From: Colin M. <col...@pi...> - 2009-05-19 14:20:35
|
Andy Howell wrote: > I have some code that uses the pre-processor to generate code to log messages: > > #define logDebug if ( Log::minLevel <= Log::LVL_DEBUG ) Log::printLog > > Helgrind reports data races ultimately due to the global Log::minLevel. While technically > this is a potential race condition, Log::minLevel is essentially a constant after startup. > > I tried to add suppressions for the mangled Log::printLog method, however because of the > #define, helgrind reports the race on lines where LogDebug is used, not the Log::printLog > method. > > Is there any way to add a suppression based on the global variable? > > Thanks, > > Andy > Andy, not an ideal solution, but could you do something like this static boolean logRequired(void) { return (Log::minLevel <= Log::LVL_DEBUG); } #define logDebug if ( logRequired() ) Log::printLog and then suppress the warning for logRequired() Of course, you need to disable auto-inlining for logRequired() HTH, Colin S. Miller |