46 lines · c
1// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wsign-conversion -verify=unsigned,both %s2// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wconversion -verify=unsigned,both %s3// RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -verify -Wsign-conversion -verify=win32,both %s4 5// PR352006enum X { A,B,C};7int f(enum X x) {8 return x; // unsigned-warning {{implicit conversion changes signedness: 'enum X' to 'int'}}9}10 11enum SE1 { N1 = -1 }; // Always a signed underlying type.12enum E1 { P1 }; // Unsigned underlying type except on Windows.13 14// ensure no regression with enum to sign (related to enum-enum-conversion.c)15int f1(enum E1 E) {16 return E; // unsigned-warning {{implicit conversion changes signedness: 'enum E1' to 'int'}}17}18 19enum E1 f2(int E) {20 return E; // unsigned-warning {{implicit conversion changes signedness: 'int' to 'enum E1'}}21}22 23int f3(enum SE1 E) {24 return E; // shouldn't warn25}26 27enum SE1 f4(int E) {28 return E; // shouldn't warn29}30 31unsigned f5(enum E1 E) {32 return E; // win32-warning {{implicit conversion changes signedness: 'enum E1' to 'unsigned int'}}33}34 35enum E1 f6(unsigned E) {36 return E; // win32-warning {{implicit conversion changes signedness: 'unsigned int' to 'enum E1'}}37}38 39unsigned f7(enum SE1 E) {40 return E; // both-warning {{implicit conversion changes signedness: 'enum SE1' to 'unsigned int'}}41}42 43enum SE1 f8(unsigned E) {44 return E; // both-warning {{implicit conversion changes signedness: 'unsigned int' to 'enum SE1'}}45}46