//===----------------------------------------------------------------------===//
// FalseParser
//===----------------------------------------------------------------------===//
class FalseParser : public parser<bool> {
public:
explicit FalseParser(Option &O) : parser<bool>(O) { }
// parse - Return true on error.
bool parse(cl::Option& O, StringRef ArgName, StringRef Arg, bool&
Val) {
if (cl::parser<bool>::parse(O, ArgName, Arg, Val))
return false;
Val = false;
return false;
}
};
I don't know the history of this. I'm just starting to do some mclinker
work to add the new mips r6 relocations to it.
On 03/18/2015 07:00 PM, David Blaikie wrote:>
>
> On Wed, Mar 18, 2015 at 6:48 PM, reed kotler <rkotler at mips.com
> <mailto: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/1bd9bec1/attachment.html>