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

Clement Courbet via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 28 09:31:52 PST 2018


courbet marked 2 inline comments as done.
courbet 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
----------------
Quuxplusone wrote:
> 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;`?
That's a very good question. I guess because I was mainly interested in this. But now that I think of it, there is no reason to limit to  "known" type traits, or even to type traits at all. Any qualified DeclRefExpr shoul see its qualifiers be spelled out with explicit types, e.g.

`ns::S1<T>::S2<int, typename U::value_type>::var`

should be diagnosed as something like:

`ns::S1<double>::S2<int, long int>::var`

I've done that and added unit tests. Tell me what you think.



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