[LLVMdev] -Woverloaded-virtual

Reid Spencer reid at x10sys.com
Thu Jun 24 12:38:01 PDT 2004


I've long been an advocate of using -Woverloaded-virtual.  The thing
with this option is that it can REALLY help catch some nasty inheritance
bugs. I'm running into these as I'm designing the bytecode analyzer
interface. I make a change to the interface, forget to change a
subclass, and bingo, that method doesn't get called any more and the
compiler doesn't warn me about it.

I asked Chris about this months ago but there was little interest in
changing it. Perhaps we need to file a bug to take care of the warnings
it produces so that LLVm is overloaded virtual clean, then we can turn
on checking for overloaded virtuals.

Reid.

On Thu, 2004-06-24 at 06:40, Vladimir Prus wrote:
> I've just had some fun, because I wanted to override 
> FunctionPass::addAnalysisUsage, but forgot "const" after the method name -- 
> so instead of overriding I've just created a new unrelated method.
> 
> After spending some time on this, I've decided to add -Woverloaded-virtual 
> option to compiler to catch such cases. However, it also gives some warnings 
> on LLVM code:
> 
> ../../../include/llvm/Pass.h:264: warning: `virtual bool 
>    llvm::FunctionPass::run(llvm::Module&)' was hidden
> ../../../include/llvm/Pass.h:326: warning:   by `bool 
>    llvm::BasicBlockPass::run(llvm::BasicBlock&)'
> ../../../include/llvm/Pass.h:275: warning: `virtual void 
>    llvm::FunctionPass::addToPassManager(llvm::PassManagerT<llvm::Module>*, 
>    llvm::AnalysisUsage&)' was hidden
> ../../../include/llvm/Pass.h:332: warning:   by `virtual void 
>    llvm::BasicBlockPass::addToPassManager(llvm::PassManagerT<llvm::BasicBlock>*,
>    llvm::AnalysisUsage&)'
> 
> The problem is that "run" method is virtual in Path (with Module& as 
> argument), but another version (non-virtual), which takes BasicBlock& is 
> defined in BasicBlockPath.
> 
> Do you think this warning is worth fixing? One possible approach is to rename 
> virtual run(Module&) to runOnModule, but that would require updating all 
> derived classes :-(
> 
> - Volodya
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20040624/2648653a/attachment.sig>


More information about the llvm-dev mailing list