xref: /aosp_15_r20/external/clang/test/CodeGen/enum.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li int 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