| // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wsign-conversion -verify=unsigned,both %s |
| // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wconversion -verify=unsigned,both %s |
| // RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -verify -Wsign-conversion -verify=win32,both %s |
| |
| // PR35200 |
| enum X { A,B,C}; |
| int f(enum X x) { |
| return x; // unsigned-warning {{implicit conversion changes signedness: 'enum X' to 'int'}} |
| } |
| |
| enum SE1 { N1 = -1 }; // Always a signed underlying type. |
| enum E1 { P1 }; // Unsigned underlying type except on Windows. |
| |
| // ensure no regression with enum to sign (related to enum-enum-conversion.c) |
| int f1(enum E1 E) { |
| return E; // unsigned-warning {{implicit conversion changes signedness: 'enum E1' to 'int'}} |
| } |
| |
| enum E1 f2(int E) { |
| return E; // unsigned-warning {{implicit conversion changes signedness: 'int' to 'enum E1'}} |
| } |
| |
| int f3(enum SE1 E) { |
| return E; // shouldn't warn |
| } |
| |
| enum SE1 f4(int E) { |
| return E; // shouldn't warn |
| } |
| |
| unsigned f5(enum E1 E) { |
| return E; // win32-warning {{implicit conversion changes signedness: 'enum E1' to 'unsigned int'}} |
| } |
| |
| enum E1 f6(unsigned E) { |
| return E; // win32-warning {{implicit conversion changes signedness: 'unsigned int' to 'enum E1'}} |
| } |
| |
| unsigned f7(enum SE1 E) { |
| return E; // both-warning {{implicit conversion changes signedness: 'enum SE1' to 'unsigned int'}} |
| } |
| |
| enum SE1 f8(unsigned E) { |
| return E; // both-warning {{implicit conversion changes signedness: 'unsigned int' to 'enum SE1'}} |
| } |