| extern const int *p; |
| extern volatile void *q; |
| extern volatile int *r; |
| static void f(void) |
| { |
| q = 1 ? p : q; // warn: const volatile void * -> const int * |
| r = 1 ? r : q; // OK: volatile void * -> volatile int * |
| r = 1 ? r : p; // warn: const volatile int * -> volatile int * |
| } |
| /* |
| * check-name: type of conditional expression |
| * check-description: Used to miss qualifier mixing and mishandle void * |
| * |
| * check-error-start |
| cond_expr2.c:6:11: warning: incorrect type in assignment (different modifiers) |
| cond_expr2.c:6:11: expected void volatile *extern [addressable] [toplevel] q |
| cond_expr2.c:6:11: got void const volatile * |
| cond_expr2.c:8:11: warning: incorrect type in assignment (different modifiers) |
| cond_expr2.c:8:11: expected int volatile *extern [addressable] [toplevel] [assigned] r |
| cond_expr2.c:8:11: got int const volatile * |
| * check-error-end |
| */ |