[PATCH] D131423: [clang] fix frontend crash when evaluating type trait

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 12 07:47:17 PDT 2022


aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

LGTM, but you should add a release note for the change.



================
Comment at: clang/lib/Basic/TypeTraits.cpp:64
+#define TYPE_TRAIT_N(Spelling, Name, Key) 0,
+#include "clang/Basic/TokenKinds.def"
+};
----------------
inclyc wrote:
> inclyc wrote:
> > shafik wrote:
> > > @aaron.ballman do we really have to include this three times? We are defining different macros so shouldn't we be able to include is just once? 
> > > 
> > > I see we do this in several other places but a few we don't.
> > I've tried 
> > 
> > ```
> > #define TYPE_TRAIT(N, I, K) N,
> > #include "clang/Basic/TokenKinds.def"
> > ```
> > 
> > But using enum `TypeTrait` as array index seems to have incorrect mapping.
> > @aaron.ballman do we really have to include this three times? We are defining different macros so shouldn't we be able to include is just once? 
> > 
> > I see we do this in several other places but a few we don't.
> 
> Type trait definitions in `#include "clang/Basic/TokenKinds.def"` may not be sorted by the number of arguments.
> 
> Example:
> 
> ```
> #define TYPE_TRAIT_1(some_stuff)
> #define TYPE_TRAIT_N(some_stuff)
> #define TYPE_TRAIT_2(some_stuff)
> ```
> 
> Might be necessary to include this 3 times to get sorted layouts, like
> 
> `[1, 1, 1, 2, 2, 2, 0, 0]`
Yeah, I think we ultimately either need to reorder the TokenKinds.def file to be in sorted order (fragile, surprising, tight coupling) or we have to do this dance because we need the initialization itself to be sorted.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D131423



More information about the cfe-commits mailing list