r198858 - Disable LeakSanitizer in TableGen binaries, see PR18325

Jordan Rose jordan_rose at apple.com
Thu Jan 9 09:30:38 PST 2014

On Jan 9, 2014, at 6:57 , Alp Toker <alp at nuanti.com> wrote:

> I'm not making an assertion. The standard is very clear on this:
> Reserved names [reserved.names]
> If a program declares or defines a name in a context where it is reserved, other than as explicitly allowed by this Clause, its behavior is undefined.
> Global names [global.names]
> Certain sets of names and function signatures are always reserved to the implementation:
> Each name that contains a double underscore __ or begins with an underscore followed by an uppercase letter (2.12) is reserved to the implementation for any use.
> Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

I know I shouldn't be getting into this, but...

1.3.24 undefined behavior [defns.undefined]
behavior for which this International Standard imposes no requirements
[ Note: Undefined behavior may be expected when this International Standard omits any explicit definition of behavior or when a program uses an erroneous construct or erroneous data. Permissible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message). Many erroneous program constructs do not engender undefined behavior; they are required to be diagnosed. — end note ]

(emphasis mine)

As I read this, a valid interpretation of this program is that when LEAK_SANITIZER is defined, the program contains undefined behavior, and therefore it should only be set in a context when the particular implementation is known to do something sensible for this particular undefined behavior (that is, use the function at runtime to disable leak checking).

I don't see this as abstractly different from the standard-specified practice of replacing the global operator new, so I don't think it's inherently an anti-pattern. I think everyone agrees on this since you've said already you'd have no objections if the name weren't one of the restricted [global.names] names.

Would it help if the function were pre-declared in a system header, and then just implemented or not implemented in user code?

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

More information about the cfe-commits mailing list