blob: f95bf8b92d90b9f6cfd2eeb1bdb469e46403dc30 [file] [log] [blame]
// PR 12242: should warn about out-of-range int->enum conversions
// { dg-do compile }
// { dg-options "-Wconversion -fpermissive" }
enum X { A };
enum Y { B, C, D };
void example ()
{
int i = 5;
X x;
Y y;
x = 10; // { dg-warning "invalid conversion from .int. to .X." "invalid" }
// { dg-warning "unspecified" "unspecified" { target *-*-* } .-1 }
x = 1; // { dg-warning "invalid conversion from .int. to .X." }
x = C; // { dg-error "cannot convert .Y. to .X. in assignment" }
x = D; // { dg-error "cannot convert .Y. to .X. in assignment" }
y = A; // { dg-error "cannot convert .X. to .Y. in assignment" }
x = y; // { dg-error "cannot convert .Y. to .X. in assignment" }
x = i; // { dg-warning "invalid conversion from .int. to .X." }
}
void foo ()
{
X a = static_cast<X> (10); // { dg-warning "unspecified" }
X b = static_cast<X> (0);
X c = static_cast<X> (1);
X d = static_cast<X> (2); // { dg-warning "unspecified" }
X f = static_cast<X> ((int)A);
X g = static_cast<X> (B);
X h = static_cast<X> (C);
X e = static_cast<X> (D); // { dg-warning "unspecified" }
}
enum QEvent { x = 42 };
int bar()
{
QEvent x = ( QEvent ) 42000; // { dg-warning "unspecified" }
return ( int ) x;
}
enum W {a,b,c};
enum Z {d,e,f,g};
void bazz (int, int, int, int);
void baz() {
int three = 3;
int four = 4;
bazz (
W(three),
W(3),
Z(four),
Z(4) // { dg-warning "unspecified" }
);
}