[PATCH] D144157: Add 128-bit integer support to enum element

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 22 10:05:28 PST 2023


aaron.ballman added a comment.

I think this needs additional test coverage around `_BitInt` as those can be arbitrarily large depending on the target. Also, C2x made changes in this area to how we calculate what type to represent the enumerations in; we don't have to implement that support as part of this patch, but we should make sure what we're doing doesn't conflict with that future work.

(Also, please add a release note for the changes.)



================
Comment at: clang/lib/Sema/SemaDecl.cpp:19571-19573
-  // TODO: If the result value doesn't fit in an int, it must be a long or long
-  // long value.  ISO C does not support this, but GCC does as an extension,
-  // emit a warning.
----------------
h-vetinari wrote:
> That comment is still relevant AFAICT, at least partially (the ISO C restrictions are still there, GCC still extends it)
Not only is it still relevant, there were changes for C2x in this area. See https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2997.htm for more details.


================
Comment at: clang/lib/Sema/SemaDecl.cpp:19698-19699
+      BestWidth = 128;
+      assert(NumPositiveBits <= BestWidth &&
+             "How could an initializer get larger than 128-bit?");
+      assert(Context.getTargetInfo().hasInt128Type() &&
----------------
Consider (in C2x):
```
enum E {
  Val = 0xFFFF'FFFF'FFFF'FFFF'FFFF'FFFF'FFFF'FFFF'1wb
};
```


================
Comment at: clang/lib/Sema/SemaDecl.cpp:19700-19702
+      assert(Context.getTargetInfo().hasInt128Type() &&
+             "How could an initializer get larger than ULL in target without "
+             "128-bit interger type support?");
----------------
Again, `_BitInt`.


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

https://reviews.llvm.org/D144157



More information about the cfe-commits mailing list