| // REQUIRES: lld, x86 |
| |
| // RUN: %clang_cl --target=x86_64-windows-msvc -Od -Z7 -GS- -c /Fo%t.obj -- %s |
| // RUN: lld-link -debug:full -nodefaultlib -entry:main %t.obj -out:%t.exe -pdb:%t.pdb |
| // RUN: %lldb -f %t.exe -o "type lookup Foo" | FileCheck %s |
| |
| enum class U8Enum : unsigned char { |
| Max = 255, |
| }; |
| enum class I8Enum : char { |
| Min = 127, |
| Max = -128, |
| }; |
| enum class U16Enum : unsigned short { |
| Max = 65535, |
| }; |
| enum class I16Enum : short { |
| Min = -32768, |
| Max = 32767, |
| }; |
| enum class U32Enum : unsigned { |
| Max = 4294967295U, |
| }; |
| enum class I32Enum : int { |
| Min = -2147483648, |
| Max = 2147483647, |
| }; |
| enum class U64Enum : unsigned long long { |
| Max = 18446744073709551615ULL, |
| }; |
| enum class I64Enum : long long { |
| Min = -9223372036854775807LL - 1, |
| Max = 9223372036854775807LL, |
| }; |
| |
| // CHECK: struct Foo { |
| struct Foo { |
| // CHECK-NEXT: static const U8Enum u8_enum_max = 255Ui8; |
| static constexpr U8Enum u8_enum_max = U8Enum::Max; |
| |
| // CHECK-NEXT: static const I8Enum i8_enum_min = 127i8; |
| static constexpr I8Enum i8_enum_min = I8Enum::Min; |
| // CHECK-NEXT: static const I8Enum i8_enum_max = -128i8; |
| static constexpr I8Enum i8_enum_max = I8Enum::Max; |
| |
| // CHECK-NEXT: static const U16Enum u16_enum_max = 65535Ui16; |
| static constexpr U16Enum u16_enum_max = U16Enum::Max; |
| |
| // CHECK-NEXT: static const I16Enum i16_enum_min = -32768i16; |
| static constexpr I16Enum i16_enum_min = I16Enum::Min; |
| // CHECK-NEXT: static const I16Enum i16_enum_max = 32767i16; |
| static constexpr I16Enum i16_enum_max = I16Enum::Max; |
| |
| // CHECK-NEXT: static const U32Enum u32_enum_max = 4294967295U; |
| static constexpr U32Enum u32_enum_max = U32Enum::Max; |
| |
| // CHECK-NEXT: static const I32Enum i32_enum_min = -2147483648; |
| static constexpr I32Enum i32_enum_min = I32Enum::Min; |
| // CHECK-NEXT: static const I32Enum i32_enum_max = 2147483647; |
| static constexpr I32Enum i32_enum_max = I32Enum::Max; |
| |
| // CHECK-NEXT: static const U64Enum u64_enum_max = 18446744073709551615ULL; |
| static constexpr U64Enum u64_enum_max = U64Enum::Max; |
| |
| // CHECK-NEXT: static const I64Enum i64_enum_min = -9223372036854775808LL; |
| static constexpr I64Enum i64_enum_min = I64Enum::Min; |
| // CHECK-NEXT: static const I64Enum i64_enum_max = 9223372036854775807LL; |
| static constexpr I64Enum i64_enum_max = I64Enum::Max; |
| |
| // CHECK-NEXT: static const unsigned char u8_max = 255Ui8; |
| static constexpr unsigned char u8_max = 255; |
| |
| // CHECK-NEXT: static const char i8_min = -128i8; |
| static constexpr char i8_min = -128; |
| // CHECK-NEXT: static const char i8_max = 127i8; |
| static constexpr char i8_max = 127; |
| |
| // CHECK-NEXT: static const unsigned short u16_max = 65535Ui16; |
| static constexpr unsigned short u16_max = 65535; |
| |
| // CHECK-NEXT: static const short i16_min = -32768i16; |
| static constexpr short i16_min = -32767 - 1; |
| // CHECK-NEXT: static const short i16_max = 32767i16; |
| static constexpr short i16_max = 32767; |
| |
| // CHECK-NEXT: static const unsigned int u32_max = 4294967295U; |
| static constexpr unsigned u32_max = 4294967295; |
| |
| // CHECK-NEXT: static const int i32_min = -2147483648; |
| static constexpr int i32_min = -2147483648; |
| // CHECK-NEXT: static const int i32_max = 2147483647; |
| static constexpr int i32_max = 2147483647; |
| |
| // CHECK-NEXT: static const unsigned long long u64_max = 18446744073709551615ULL; |
| static constexpr unsigned long long u64_max = 18446744073709551615ULL; |
| |
| // CHECK-NEXT: static const long long i64_min = -9223372036854775808LL; |
| static constexpr long long i64_min = -9223372036854775807LL - 1; |
| // CHECK-NEXT: static const long long i64_max = 9223372036854775807LL; |
| static constexpr long long i64_max = 9223372036854775807LL; |
| |
| // CHECK-NEXT: int i; |
| int i; |
| }; |
| |
| int main() { |
| Foo f{42}; |
| return f.i; |
| } |