xref: /llvm-project/clang/test/CodeGen/enum-bool.cpp (revision c5de4dd1eab00df76c1a68c5f397304ceacb71f2)
1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
2 
3 namespace dr2338 {
4 namespace A {
5 enum E { Zero, One };
a(int x)6 E a(int x) { return static_cast<E>(x); }
7 // CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381A1aEi
8 // CHECK: ret i32 %0
9 
b(int x)10 E b(int x) { return (E)x; }
11 // CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381A1bEi
12 // CHECK: ret i32 %0
13 
14 } // namespace A
15 namespace B {
16 enum E : bool { Zero, One };
a(int x)17 E a(int x) { return static_cast<E>(x); }
18 // CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381B1aEi
19 // CHECK: ret i1 %tobool
20 
b(int x)21 E b(int x) { return (E)x; }
22 // CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381B1bEi
23 // CHECK: ret i1 %tobool
24 
25 } // namespace B
26 namespace C {
27 enum class E { Zero, One };
a(int x)28 E a(int x) { return static_cast<E>(x); }
29 // CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381C1aEi
30 // CHECK: ret i32 %0
31 
b(int x)32 E b(int x) { return (E)x; }
33 // CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381C1bEi
34 // CHECK: ret i32 %0
35 
36 } // namespace C
37 namespace D {
38 enum class E : bool { Zero, One };
a(int x)39 E a(int x) { return static_cast<E>(x); }
40 // CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381D1aEi
41 // CHECK: ret i1 %tobool
42 
b(int x)43 E b(int x) { return (E)x; }
44 
45 // CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381D1bEi
46 // CHECK: ret i1 %tobool
47 
48 } // namespace D
49 } // namespace dr2338
50