[LLVMdev] anchoring explicit template instantiations

David Blaikie dblaikie at gmail.com
Thu Dec 1 00:08:55 PST 2011


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?

(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!");
   }


and

--- a/lib/Support/APInt.cpp
+++ 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;
-  else if (this->ule(nextSquare)) {
+  if (this->ule(nextSquare)) {
     APInt midpoint((nextSquare - square).udiv(two));
     APInt offset(*this - square);
     if (offset.ult(midpoint))
       return x_old;
-    else
-      return x_old + 1;
-  } else
-    llvm_unreachable("Error in APInt::sqrt computation");
-  return x_old + 1;
+    return x_old + 1;
+  }
+  llvm_unreachable("Error in APInt::sqrt computation");
 }

(a return after an llvm_unreachable - muddied up with a bit of
syntactic tidyup))

& I'll take the detailed discussion about -Wweak-vtables for template
instantiations to cfe-dev & see what they have to say.

- David




More information about the llvm-dev mailing list