1 // PR 12242: should warn about out-of-range int->enum conversions
2 // { dg-do compile }
3 // { dg-options "-Wconversion -fpermissive" }
4 enum X { A };
5 enum Y { B, C, D };
6 
example()7 void example ()
8 {
9   int i = 5;
10   X x;
11   Y y;
12 
13   x = 10;  // { dg-warning "invalid conversion from .int. to .X." "invalid" }
14            // { dg-warning "unspecified" "unspecified" { target *-*-* } .-1 }
15   x = 1;   // { dg-warning "invalid conversion from .int. to .X." }
16   x = C;   // { dg-error "cannot convert .Y. to .X. in assignment" }
17   x = D;   // { dg-error "cannot convert .Y. to .X. in assignment" }
18   y = A;   // { dg-error "cannot convert .X. to .Y. in assignment" }
19   x = y;   // { dg-error "cannot convert .Y. to .X. in assignment" }
20   x = i;   // { dg-warning "invalid conversion from .int. to .X."  }
21 }
22 
foo()23 void foo ()
24 {
25   X a = static_cast<X> (10); // { dg-warning "unspecified" }
26   X b = static_cast<X> (0);
27   X c = static_cast<X> (1);
28   X d = static_cast<X> (2); // { dg-warning "unspecified" }
29   X f = static_cast<X> ((int)A);
30   X g = static_cast<X> (B);
31   X h = static_cast<X> (C);
32   X e = static_cast<X> (D); // { dg-warning "unspecified" }
33 }
34 
35 enum QEvent { x = 42 };
36 
bar()37 int bar()
38 {
39   QEvent x = ( QEvent ) 42000; // { dg-warning "unspecified" }
40   return ( int ) x;
41 }
42 
43 enum W {a,b,c};
44 enum Z {d,e,f,g};
45 void bazz (int, int, int, int);
46 
baz()47 void baz() {
48   int three = 3;
49   int four = 4;
50   bazz (
51 	W(three),
52 	W(3),
53 	Z(four),
54 	Z(4) // { dg-warning "unspecified" }
55 	);
56 }
57 
58