[LLVMdev] Final added to parser<bool>

David Blaikie dblaikie at gmail.com
Wed Mar 18 19:00:02 PDT 2015

On Wed, Mar 18, 2015 at 6:48 PM, reed kotler <rkotler at mips.com> wrote:

> Hi David,
> Is there a reason that we need to have "final" for parser<bool> ???

Clang has a (reasonable) warning for types with virtual functions and a
non-virtual dtor. This warning is suppressed if the dtor is protected or
the class is final (since in the first case it's clear that the user
intends not to destroy objects via base pointers, only derived ones - and
in the second case there's no risk of derived classes, so public access to
the dtor is safe even without virtual dispatch.

Since the parser hierarchy never needed polymorphic destruction (all
instances are concrete instances of derived classes owned and destroyed
directly, not via base pointers) this seemed like a fine way to structure
the API.

> This breaks the compilation of mclinker which derives a class from this.
> In file included from /home/rkotler/workspace/mclinker/lib/Support/
> CommandLine.cpp:9:0:
> /home/rkotler/workspace/mclinker/include/mcld/Support/CommandLine.h:49:7:
> error: cannot derive from ‘final’ base ‘llvm::cl::parser<bool>’ in derived
> type ‘llvm::cl::FalseParser’

Why is it being derived from? If it's just a typedef that's required, it
might be more appropriate to use a typedef instead of derivation.

> make[2]: *** [Support/CommandLine.o] Error 1
> make[2]: Leaving directory `/home/rkotler/mclinker_build/lib'
> make[1]: *** [all] Error 2
> make[1]: Leaving directory `/home/rkotler/mclinker_build/lib'
> make: *** [all-recursive] Error 1
> Reed
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150318/73fb34cf/attachment.html>

More information about the llvm-dev mailing list