[PATCH] D131423: [clang] fix frontend crash when evaluating type trait
    YingChi Long via Phabricator via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Thu Aug 11 21:54:46 PDT 2022
    
    
  
inclyc added inline comments.
================
Comment at: clang/lib/Basic/TypeTraits.cpp:64
+#define TYPE_TRAIT_N(Spelling, Name, Key) 0,
+#include "clang/Basic/TokenKinds.def"
+};
----------------
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]`
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