[cfe-dev] RFC: do not optimize on basis of __attribute__((nonnull)) in glibc headers

Hal Finkel via cfe-dev cfe-dev at lists.llvm.org
Wed Jan 4 11:05:10 PST 2017


On 01/04/2017 01:01 PM, James Y Knight wrote:
>
>
> On Wed, Jan 4, 2017 at 12:54 PM, Hal Finkel <hfinkel at anl.gov 
> <mailto:hfinkel at anl.gov>> wrote:
>
>
>     On 01/04/2017 11:43 AM, James Y Knight via cfe-dev wrote:
>>     On Wed, Jan 4, 2017 at 11:12 AM, Aaron Ballman via cfe-dev
>>     <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>>
>>         So I would be opposed to ignoring those attributes in
>>
>>         Sema (I think we should still warn when users do nonportable
>>         things),
>>         but in favor of not changing the optimizer to capitalize on this
>>         "opportunity."
>>
>>
>>     I'd be opposed to ignoring the attributes only in some places and
>>     not in others. It should be ignored totally, as if it wasn't
>>     present on those functions. Doing anything else sends the wrong
>>     message -- that libc authors should continue to use nonnull on
>>     these functions because they might be helpful, and won't do
>>     anything bad.
>
>     I think that we have a responsibility to our users to continue to
>     warn (statically, in ubsan, etc.) on non-portable behavior, which
>     this is and will continue to be in practice for at least a decade
>     or two, regardless of the message we'd like to send libc authors.
>     We cannot undo history here and this will be relevant to
>     production systems for at least a decade. We can talk to libc
>     developers directly -- they're a much smaller set -- and we can
>     pursue change at the standards level while still providing the
>     most useful set of tools to our users in the mean time.
>
> But, this is an entirely different question.
>
> - Should clang warn about non-portable usage of passing NULL to 
> memcpy/etc?
>
> Sounds like a fine warning to add.
>
> - Should that warning be dependent on the libc headers having nonnull 
> annotations on these functions, which will be used only for warnings, 
> and ignored for semantics, on this given list of hardcoded functions?
>
> No.
>
> Firstly: I'd note that nearly all libc implementations don't use these 
> attributes today. In some cases, because they've simply not thought 
> about it, but in others because they explicitly decided to NOT break 
> their users' code by introducing this problem! Glibc is the outlier, 
> here.
>
> So: what portability do you want to warn for? Portability assuming the 
> same libc, but a different compiler which might fail to ignore the 
> nonnull attribute? Or portability to other libc? If the latter, 
> depending on the nonnull attribute being present doesn't and can't work.
>
> Secondly: if we already have a hardcoded list of functions to special 
> case, that could just as well be used to generate a 
> nonportable-stringfunc-null warning, as well.

Agreed. We should use the list to generate warnings, etc. regardless of 
how the headers are annotated.

  -Hal

-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170104/4b85d885/attachment.html>


More information about the cfe-dev mailing list