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