// RUN: %clang_cc1 -verify -fsyntax-only -Wsign-compare %s // NOTE: When a 'enumeral mismatch' warning is implemented then expect several // of the following cases to be impacted. // namespace for anonymous enums tests namespace test1 { enum { A }; enum { B = -1 }; template struct Foo { enum { C }; enum { D = ~0U }; }; enum { E = ~0U }; void doit_anonymous( int i ) { int a1 = 1 ? i : A; int a2 = 1 ? A : i; int b1 = 1 ? i : B; int b2 = 1 ? B : i; int c1 = 1 ? i : Foo::C; int c2 = 1 ? Foo::C : i; int d1 = 1 ? i : Foo::D; // expected-warning {{operands of ? are integers of different signs}} int d2 = 1 ? Foo::D : i; // expected-warning {{operands of ? are integers of different signs}} int d3 = 1 ? B : Foo::D; // expected-warning {{operands of ? are integers of different signs}} int d4 = 1 ? Foo::D : B; // expected-warning {{operands of ? are integers of different signs}} int e1 = 1 ? i : E; // expected-warning {{operands of ? are integers of different signs}} int e2 = 1 ? E : i; // expected-warning {{operands of ? are integers of different signs}} int e3 = 1 ? E : B; // expected-warning {{operands of ? are integers of different signs}} int e4 = 1 ? B : E; // expected-warning {{operands of ? are integers of different signs}} } } // namespace for named enums tests namespace test2 { enum Named1 { A }; enum Named2 { B = -1 }; template struct Foo { enum Named3 { C }; enum Named4 { D = ~0U }; }; enum Named5 { E = ~0U }; void doit_anonymous( int i ) { int a1 = 1 ? i : A; int a2 = 1 ? A : i; int b1 = 1 ? i : B; int b2 = 1 ? B : i; int c1 = 1 ? i : Foo::C; int c2 = 1 ? Foo::C : i; int d1 = 1 ? i : Foo::D; // expected-warning {{operands of ? are integers of different signs}} int d2 = 1 ? Foo::D : i; // expected-warning {{operands of ? are integers of different signs}} int d3 = 1 ? B : Foo::D; // expected-warning {{operands of ? are integers of different signs}} int d4 = 1 ? Foo::D : B; // expected-warning {{operands of ? are integers of different signs}} int e1 = 1 ? i : E; // expected-warning {{operands of ? are integers of different signs}} int e2 = 1 ? E : i; // expected-warning {{operands of ? are integers of different signs}} int e3 = 1 ? E : B; // expected-warning {{operands of ? are integers of different signs}} int e4 = 1 ? B : E; // expected-warning {{operands of ? are integers of different signs}} } }