[llvm-dev] Change in -Wnonnull in gcc-11

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 1 13:05:12 PDT 2021


On Wed, Sep 1, 2021 at 12:58 PM James Y Knight via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> The first warning looks valid, although it doesn't happen at runtime.
>
>    1. In constructor ‘llvm::MachineModuleInfo::MachineModuleInfo(const
>    llvm::LLVMTargetMachine*)’,
>    2. inlined from
>    ‘llvm::MachineModuleInfoWrapperPass::MachineModuleInfoWrapperPass(const
>    llvm::LLVMTargetMachine*)’ at
>    /llvm/lib/CodeGen/MachineModuleInfo.cpp:357:26,
>    3. inlined from ‘llvm::Pass* llvm::callDefaultCtor() [with PassName =
>    llvm::MachineModuleInfoWrapperPass]’ at
>    /llvm/include/llvm/PassSupport.h:80:76:
>    4. /llvm/lib/CodeGen/MachineModuleInfo.cpp:240:51: warning: ‘this’
>    pointer is null [-Wnonnull]
>    5. 240 | Context.setObjectFileInfo(TM->getObjFileLowering());
>    6.
>
> I believe it should be a simple matter of deleting the zero-arg
> constructor. I'll try that and push it.
>
> I note that the GCC warning points to an odd place, though -- it probably
> should be pointing to the construction TM(*TM), which initializes a
> reference with null, which is already UB.
>
> MachineModuleInfo::MachineModuleInfo(const LLVMTargetMachine *TM)
>
>     : TM(*TM), ....
>
>
>
> However, the rest of the warnings come from:
>   decltype(static_cast<const TypeParam *>(nullptr)->rbegin())>::value
> which I think is a false-positive in GCC's warning.
>

Oh, yeah, if it's in an unevaluated context - agreed, that's a false
positive. (though we could probably also just make that code nicer to read
by using std::declval<const TypeParam&>().rbegin(), I think?


>
> TTBOMK, calling a method on nullptr in an unevaluated context (e.g.
> decltype, non-vla-sizeof, etc) is not UB, and therefore should not emit a
> warning.
>
>
>
> On Wed, Sep 1, 2021, 2:44 PM Luke Benes via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>>
>>
>> In gcc-11, -Wnonnull considers the implicit this argument of every C++
>> nonstatic member function to have been implicitly declared with attribute
>> nonnull and triggers warnings for calls where the pointer is null. [1]
>>
>> Should clang also do this? This change helped webkit identify and fix
>> some issues. [2][3][4][5]
>>
>> Building clang trunk with gcc-11 produces 13 new warnings related to this
>> enhancement. They are in MachineModuleInfo.cpp and RangeAdapterTest.cpp.[6]
>> Do these look like valid issues?
>>
>> -Luke
>>
>>
>> [1] https://gcc.gnu.org/gcc-11/changes.html\
>> [2] https://bugs.webkit.org/show_bug.cgi?id=224838
>> [3] https://bugs.webkit.org/show_bug.cgi?id=224826
>> [4] https://trac.webkit.org/changeset/276343/webkit
>> [5] https://bugs.webkit.org/show_bug.cgi?id=224452
>> [6] https://pastebin.com/EJTZphGm
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210901/2838c499/attachment.html>


More information about the llvm-dev mailing list