[LLVMdev] anchoring explicit template instantiations
Chris Lattner
clattner at apple.com
Thu Dec 1 09:11:54 PST 2011
On Dec 1, 2011, at 12:08 AM, David Blaikie wrote:
> On Wed, Nov 30, 2011 at 10:42 PM, Chris Lattner <clattner at apple.com> wrote:
>> On Nov 29, 2011, at 12:26 AM, David Blaikie wrote:
>>> For a bit of an experiment I've been trying to compile LLVM & Clang
>>> with -Weverything (disabling any errors that seem like more noise/less
>>> interesting). One warning I've recently hit a few instances of is
>>> -Wweak-vtable which is, in fact, an explicitly documented LLVM coding
>>> standard ( http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
>>> ). Some instances of this have been easy to fix (see attached patch -
>>> if it looks good to anyone I'll check that in) but a particular set of
>>> them have been a little more problematic.
>>
>> Nice, please commit your patch. I don't know about explicit instantiations though, maybe a C++ guru on the clang list knows.
>
> Thanks Chris, committed as r145578. I don't suppose you'll mind some
> similar commits as I encounter them?
Yep, please feel free.
> (there's also some legitimate unreachable code warnings I'd be happy
> to fix as I find them, things like:
>
> --- a/lib/Support/CommandLine.cpp
> +++ b/lib/Support/CommandLine.cpp
> @@ -294,10 +294,7 @@ static inline bool ProvideOption(Option *Handler,
> StringRef ArgName,
> break;
>
> default:
> - errs() << ProgramName
> - << ": Bad ValueMask flag! CommandLine usage error:"
> - << Handler->getValueExpectedFlag() << "\n";
> - llvm_unreachable(0);
> + llvm_unreachable("Bad ValueMask flag!");
This patch would lose the expected flag value, which is unfortunate.
> +++ b/lib/Support/APInt.cpp
> @@ -1440,16 +1440,14 @@ APInt APInt::sqrt() const {
> APInt nextSquare((x_old + 1) * (x_old +1));
> if (this->ult(square))
> return x_old;
> + if (this->ule(nextSquare)) {
> APInt midpoint((nextSquare - square).udiv(two));
> APInt offset(*this - square);
> if (offset.ult(midpoint))
> return x_old;
> + }
> + llvm_unreachable("Error in APInt::sqrt computation");
> }
>
> (a return after an llvm_unreachable - muddied up with a bit of
> syntactic tidyup))
This is an abuse of llvm_unreachable. It should just replace "if ule" check with:
assert(this->ule(nextSquare) && "Error in APInt::sqrt computation");
> & I'll take the detailed discussion about -Wweak-vtables for template
> instantiations to cfe-dev & see what they have to say.
Thanks David!
-Chris
More information about the llvm-dev
mailing list