[PATCH] D54903: [Sema] Improve static_assert diagnostics.

Arthur O'Dwyer via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 28 05:39:31 PST 2018


Quuxplusone added inline comments.


================
Comment at: lib/Sema/SemaTemplate.cpp:3061
+#define TYPE_TRAIT_N(Spelling, Name, Key) RecordName == (#Spelling + 2) ||
+#include "clang/Basic/TokenKinds.def"
+#undef TYPE_TRAIT_1
----------------
Why do you bother to check a whitelist of "known" type trait names? It seems to me that if you replaced this function body with `return true;`, the diagnostic would automatically be able to handle cases such as

    static_assert(std::is_trivially_move_constructible<T>::value);  // not a builtin
    static_assert(folly::IsRelocatable<T>::value);  // not in namespace std

What would go wrong if you replaced this entire function body with `return true;`?


================
Comment at: lib/Sema/SemaTemplate.cpp:3109
+    // This might be `std::some_type_trait<U,V>::value`.
+    if (Var && Var->isStaticDataMember() && Var->getName() == "value" &&
+        prettyPrintTypeTrait(DR->getQualifier(), OS, PrintPolicy)) {
----------------
Again, why do you bother to check this? I would not expect the compiler to treat differently

    struct Trait { static constexpr bool value = true; }; static_assert(Trait::value);
    struct Trait { static constexpr bool wodget = true; }; static_assert(Trait::wodget);



Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54903/new/

https://reviews.llvm.org/D54903





More information about the cfe-commits mailing list