Colin Miller wrote:
> 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()
>
Colin,
Thanks, that did the trick. I tried various combinations declaring
minLevel as a const
and evilly circumventing the 'const-ness'. Good for generating core dumps, but
not much else.
Regards,
Andy
------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users