[llvm-commits] [llvm] r169536 - in /llvm/trunk: include/llvm/Target/TargetLowering.h lib/CodeGen/SelectionDAG/SelectionDAG.cpp lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp lib/CodeGen/SelectionDAG/TargetLowering.cpp lib/Target/ARM/ARMISelLowering.cpp lib/Target/ARM/ARMISelLowering.h lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86ISelLowering.h

Richard Smith richard at metafoo.co.uk
Thu Dec 6 14:39:50 PST 2012


On Thu, Dec 6, 2012 at 2:11 PM, Evan Cheng <evan.cheng at apple.com> wrote:
> On Dec 6, 2012, at 1:03 PM, Matt Beaumont-Gay <matthewbg at google.com> wrote:
>> GCC's -Woverloaded-virtual complains thusly:
>> In file included from llvm/lib/Target/ARM/ARMISelLowering.h:23:0,
>>                 from llvm/lib/Target/ARM/ARMTargetMachine.h:18,
>>                 from llvm/lib/Target/ARM/ARMFastISel.cpp:21:
>> llvm/include/llvm/Target/TargetLowering.h:1708:16: error: 'virtual
>> bool llvm::TargetLowering::isZExtFree(llvm::Type*, llvm::Type*) const'
>> was hidden [-Werror=overloaded-virtual]
>> In file included from llvm/lib/Target/ARM/ARMTargetMachine.h:18:0,
>>                 from llvm/lib/Target/ARM/ARMFastISel.cpp:21:
>> llvm/lib/Target/ARM/ARMISelLowering.h:297:18: error:   by 'virtual
>> bool llvm::ARMTargetLowering::isZExtFree(llvm::SDValue, llvm::EVT)
>> const' [-Werror=overloaded-virtual]
>> In file included from llvm/lib/Target/ARM/ARMISelLowering.h:23:0,
>>                 from llvm/lib/Target/ARM/ARMTargetMachine.h:18,
>>                 from llvm/lib/Target/ARM/ARMFastISel.cpp:21:
>> llvm/include/llvm/Target/TargetLowering.h:1712:16: error: 'virtual
>> bool llvm::TargetLowering::isZExtFree(llvm::EVT, llvm::EVT) const' was
>> hidden [-Werror=overloaded-virtual]
>> In file included from llvm/lib/Target/ARM/ARMTargetMachine.h:18:0,
>>                 from llvm/lib/Target/ARM/ARMFastISel.cpp:21:
>> llvm/lib/Target/ARM/ARMISelLowering.h:297:18: error:   by 'virtual
>> bool llvm::ARMTargetLowering::isZExtFree(llvm::SDValue, llvm::EVT)
>> const' [-Werror=overloaded-virtual]
>
> That seems like a bug in GCC to me. It's totally unnecessary to add the other two isZExtFree() to ARMTargetLowerting.

Clang's and GCC's warnings are checking for different things. Clang is
looking for cases where we think you were trying to override a virtual
function, but got the signature wrong. GCC is looking for cases where
calling a function on the derived class object would call a different
overload than calling a function on the base class object (because
some of the base class overloads are hidden) -- and I'm not sure why
it only applies this to virtual functions, FWIW.

GCC's warning is right here; the question is whether we actually care
about the property which it's checking for (I think we do). The fix is
to add 'using TargetLowering::isZExtFree;' to ARMTargetLowering.



More information about the llvm-commits mailing list