| /* { dg-do compile } */ |
| /* { dg-options "-Wuseless-cast" } */ |
| |
| void foo(void) |
| { |
| // casts to the same type |
| int i = 0; |
| const int ic = 0; |
| struct foo { int x; } x = { 0 }; |
| int q[3]; |
| (int)ic; /* { dg-warning "useless cast" } */ |
| (int)i; /* { dg-warning "useless cast" } */ |
| (const int)ic; /* { dg-warning "useless cast" } */ |
| (const int)i; /* { dg-warning "useless cast" } */ |
| (struct foo)x; /* { dg-warning "useless cast" } */ |
| (int(*)[3])&q; /* { dg-warning "useless cast" } */ |
| (_Atomic(int))i; /* { dg-warning "useless cast" } */ |
| |
| // not the same |
| int n = 3; |
| (int(*)[n])&q; // no warning |
| int j = (int)0UL; |
| enum X { A = 1 } xx = { A }; |
| enum Y { B = 1 } yy = (enum Y)xx; |
| } |
| |