[PATCH] D120398: [format] follow up: Use unsigned char as the base of all enums in FormatStyle

Arthur O'Dwyer via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Feb 27 07:46:01 PST 2022


Quuxplusone added a comment.

> Any runtime penalty? (Usually compilers choose a faster underlying type for enums, not smaller)



> The decision is made in the header (so I think it will always be `int` until this doesn't fit). To decide what is faster the compiler would need to know all the usages. Which it can't.

Yes, Clang chooses `int` by default. In fact, C++11 and later //mandate// that a new-style scoped enum `enum class Foo {` means the same thing as `enum class Foo : int {` — see https://timsong-cpp.github.io/cppwp/n3337/dcl.enum#5 . For unscoped old-style enums, Clang/GCC/MSVC all choose `int` by default, //unless// `-fshort-enums` is passed on the command line and/or the enum is annotated with `__attribute__((packed))`, in which case it chooses the smallest possible type. `-fshort-enums` and `__attribute__((packed))` have no effect on new-style scoped enums nor on enums with explicit underlying types.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D120398



More information about the cfe-commits mailing list