[LLVMdev] -Woverloaded-virtual

Vladimir Prus ghost at cs.msu.su
Fri Jun 25 02:18:02 PDT 2004


Chris Lattner wrote:
> On Thu, 24 Jun 2004, 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.
>
> Ya know, I think that everyone has done that at least once (myself
> included)... on THAT VERY METHOD.  grr :)

Interesting!

> I definitely think that it would be a good idea to add this -W flag :)

Good.

> > 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::BasicBloc
> >k>*, 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.
>
> Is that the only problem case?

No, the Pass::print is sometimes hidden as well. Maybe there are other issues, 
but the above ones happen on every file, so it's hard to see anything more.
The build log is at 

   http://zigzag.cs.msu.su:7813/bjam.log.bz2

if you want to take a look.

> > 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 :-(
>
> That is not a big deal necessarily.  Is this the only case that currently
> causes spurious warnings?

That and Pass::print. Any other, if any, are not so severe.

- Volodya




More information about the llvm-dev mailing list