r198858 - Disable LeakSanitizer in TableGen binaries, see PR18325

Alp Toker alp at nuanti.com
Thu Jan 9 10:07:49 PST 2014


On 09/01/2014 17:52, Jordan Rose wrote:
>
> On Jan 9, 2014, at 9:42 , Alp Toker <alp at nuanti.com 
> <mailto:alp at nuanti.com>> wrote:
>
>>
>> On 09/01/2014 17:30, Jordan Rose wrote:
>>>
>>> Would it help if the function were pre-declared in a system header, 
>>> and then just implemented or not implemented in user code?
>>
>> Hi Jordan,
>>
>> That's the current situation -- as long as sanitizer headers are 
>> available and in use the part of the spec you highlighted means it's 
>> acceptable.
>>
>> The problem arises when sanitizer headers aren't available.
>
> I just don't think the program is illegal when LEAK_SANITIZER is not 
> defined. The tokens within the #ifdef are skipped completely, so they 
> don't refer to names and certainly don't declare anything.


If there was an ifdef in TableGen there'd be no problem. The trouble is 
there is no ifdef...

utils/TableGen/TableGen.cpp:

    |int main(int argc, char **argv) {|||
    |||  sys::PrintStackTraceOnErrorSignal();|||
    |||  PrettyStackTraceProgram X(argc, argv);|||
    |||  cl::ParseCommandLineOptions(argc, argv);|||
    ||||
    |||  return TableGenMain(argv[0], &LLVMTableGenMain);|||
    |||}|||
    ||||
    |||extern "C" {|||
    |||// Disable LeakSanitizer for this binary as it has too many leaks
    that are not|||
    |||// very interesting to fix. __lsan_is_turned_off is explained in|||
    |||// compiler-rt/include/sanitizer/lsan_interface.h|||
    |||*int __lsan_is_turned_off() { return 1; }*|||
    |||}  // extern "C"|


Kostya said he preferred not to conditionalize the definition, but 
provide it unconditionally.

That's why I've been trying to help find a name that can be legitimately 
defined in ordinary builds.

If that's no longer a requirement, I'm absolutely fine to guard it with 
ifdef LEAK_SANITIZER and be done with it.

(If that ends up being the resolution, it's a little unfortunate for 
compiler-rt because a well-chosen name would have solved the problem for 
all projects. Either approach is acceptable though in terms of a 
resolution though from my POV.)

Alp.


>
> I'm not sure we should care about the case where LEAK_SANITIZER is 
> defined in an environment that doesn't specify what defining this 
> particular name will do. The user has full control over this. (And in 
> fact, IIRC being able to define macros on the command line isn't at 
> all specified by the standard, so the program by itself will 
> /always/ skip the LEAK_SANITIZER block.)
>
> Jordan
>

-- 
http://www.nuanti.com
the browser experts

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140109/d14965f6/attachment.html>


More information about the cfe-commits mailing list