|  | // 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'}} | 
|  | } |