1*67e74705SXin Li // RUN: %clang_cc1 -triple i386-unknown-unknown %s -O3 -emit-llvm -o - | FileCheck -check-prefix=CHECK-C %s 2*67e74705SXin Li // RUN: %clang_cc1 -triple i386-unknown-unknown -x c++ %s -O3 -emit-llvm -o - | FileCheck -check-prefix=CHECK-CXX %s 3*67e74705SXin Li // CHECK-C: ret i32 6 4*67e74705SXin Li // CHECK-CXX: ret i32 7 5*67e74705SXin Li 6*67e74705SXin Li // This test case illustrates a peculiarity of the promotion of 7*67e74705SXin Li // enumeration types in C and C++. In particular, the enumeration type 8*67e74705SXin Li // "z" below promotes to an unsigned int in C but int in C++. 9*67e74705SXin Li static enum { foo, bar = 1U } z; 10*67e74705SXin Li main(void)11*67e74705SXin Liint main (void) 12*67e74705SXin Li { 13*67e74705SXin Li int r = 0; 14*67e74705SXin Li 15*67e74705SXin Li if (bar - 2 < 0) 16*67e74705SXin Li r += 4; 17*67e74705SXin Li if (foo - 1 < 0) 18*67e74705SXin Li r += 2; 19*67e74705SXin Li if (z - 1 < 0) 20*67e74705SXin Li r++; 21*67e74705SXin Li 22*67e74705SXin Li return r; 23*67e74705SXin Li } 24