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...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
MachineModuleInfo::MachineModuleInfo(const LLVMTargetMachine *TM)
: TM(*TM), ....
The first warning looks valid, although it doesn't happen at runtime.
In constructor ‘llvm::MachineModuleInfo::MachineModuleInfo(const llvm::LLVMTargetMachine*)’, inlined from ‘llvm::MachineModuleInfoWrapperPass::MachineModuleInfoWrapperPass(const llvm::LLVMTargetMachine*)’ at /llvm/lib/CodeGen/MachineModuleInfo.cpp:357:26, inlined from ‘llvm::Pass* llvm::callDefaultCtor() [with PassName = llvm::MachineModuleInfoWrapperPass]’ at /llvm/include/llvm/PassSupport.h:80:76: /llvm/lib/CodeGen/MachineModuleInfo.cpp:240:51: warning: ‘this’ pointer is null [-Wnonnull] 240 | Context.setObjectFileInfo(TM->getObjFileLowering());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())>::valuewhich I think is a false-positive in GCC's warning.