aaron.ballman accepted this revision.
aaron.ballman added a comment.

LGTM, though I did have a nit about diagnostic wording that you can feel free 
to take or leave at your discretion. Thank you for this work, this was a very 
large patch with a whole lot of review comments, but I think what we ended up 
with is really great!



================
Comment at: clang/include/clang/Sema/DeclSpec.h:424-431
+  static bool isTransformTypeTrait(TST T) {
+    constexpr TST Traits[] = {
+#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) TST_##Trait,
+#include "clang/AST/TransformTypeTraits.def"
+    };
+
+    return (T >= Traits[0] && T <= std::end(Traits)[-1]);
----------------
cjdb wrote:
> aaron.ballman wrote:
> > Errr, this isn't Python, so that `[-1]` terrifies me. It took me a good 
> > solid ten minutes to convince myself this was actually valid. Any interest 
> > in something along the lines of this form?
> I have many questions about the decisions I made in this snippet.
It was definitely a great way to wake up this morning. "Wait, what? WHAT?!?" 
followed by a bunch of furious standards reading. :-D


================
Comment at: clang/lib/AST/TypePrinter.cpp:1158
                                            raw_ostream &OS) {
   IncludeStrongLifetimeRAII Strong(Policy);
 }
----------------
cjdb wrote:
> aaron.ballman wrote:
> > cjdb wrote:
> > > rsmith wrote:
> > > > Remove this line too. No point building an RAII scope with nothing in 
> > > > it.
> > > Can we get rid of this function entirely in that case?
> > I believe you can.
> It looks like other things also have this as just empty, so maybe it's best 
> to keep it?
That's fine by me!


================
Comment at: clang/test/SemaCXX/type-traits.cpp:3505
+  { using ExpectedError = __make_unsigned(unsigned _BitInt(1)); }
+  // expected-error@*:*{{'make_unsigned' is only compatible with non-bool 
integers and enum types, but was given 'unsigned _BitInt(1)'}}
+  { using ExpectedError = __make_unsigned(UnscopedBit); }
----------------
This diagnostic is a bit unfortunate because it was given a non-bool integer, 
so I don't know that users will know how to fix the issue from the text. I 
leave it to your discretion where to split that diagnostic up with a `%select` 
so that `_BitInt` is special or not; I don't think users will hit this 
diagnostic all that often, but I do have a little bit of a worry about template 
metaprogramming accidentally getting into this state.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D116203

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D116203... Richard Smith - zygoloid via Phabricator via cfe-commits
    • [PATCH] D1... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D1... Aaron Ballman via Phabricator via cfe-commits
    • [PATCH] D1... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D1... Aaron Ballman via Phabricator via cfe-commits
    • [PATCH] D1... Nico Weber via Phabricator via cfe-commits
    • [PATCH] D1... Martin Storsjö via Phabricator via cfe-commits
    • [PATCH] D1... Nico Weber via Phabricator via cfe-commits
    • [PATCH] D1... Felipe de Azevedo Piovezan via Phabricator via cfe-commits
    • [PATCH] D1... Felipe de Azevedo Piovezan via Phabricator via cfe-commits
    • [PATCH] D1... Felipe de Azevedo Piovezan via Phabricator via cfe-commits
    • [PATCH] D1... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D1... Felipe de Azevedo Piovezan via Phabricator via cfe-commits
    • [PATCH] D1... Adrian Prantl via Phabricator via cfe-commits
    • [PATCH] D1... Christopher Di Bella via Phabricator via cfe-commits

Reply via email to