// RUN: %clang_cc1 -triple x86_64-unknown-unknown -S -emit-llvm -o - %s | FileCheck %s

namespace dr2338 {
namespace A {
enum E { Zero, One };
E a(int x) { return static_cast<E>(x); }
// CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381A1aEi
// CHECK: ret i32 %0

E b(int x) { return (E)x; }
// CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381A1bEi
// CHECK: ret i32 %0

} // namespace A
namespace B {
enum E : bool { Zero, One };
E a(int x) { return static_cast<E>(x); }
// CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381B1aEi
// CHECK: ret i1 %tobool

E b(int x) { return (E)x; }
// CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381B1bEi
// CHECK: ret i1 %tobool

} // namespace B
namespace C {
enum class E { Zero, One };
E a(int x) { return static_cast<E>(x); }
// CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381C1aEi
// CHECK: ret i32 %0

E b(int x) { return (E)x; }
// CHECK-LABEL: define{{.*}} i32 @_ZN6dr23381C1bEi
// CHECK: ret i32 %0

} // namespace C
namespace D {
enum class E : bool { Zero, One };
E a(int x) { return static_cast<E>(x); }
// CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381D1aEi
// CHECK: ret i1 %tobool

E b(int x) { return (E)x; }

// CHECK-LABEL: define{{.*}} zeroext i1 @_ZN6dr23381D1bEi
// CHECK: ret i1 %tobool

} // namespace D
} // namespace dr2338
