conditional-expr.c revision 890d93eec45f2ba720dce98e34a1a904697ae842
1b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff// RUN: clang -fsyntax-only -verify -pedantic %s
2b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroffvoid foo() {
3b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  *(0 ? (double *)0 : (void *)0) = 0;
4890d93eec45f2ba720dce98e34a1a904697ae842Steve Naroff  // FIXME: GCC doesn't consider the the following two statements to be errors.
5aa58f00ebba5f14955001736b7aea20bb5bd91e6Steve Naroff  *(0 ? (double *)0 : (void *)(int *)0) = 0; // expected-error {{incomplete type 'void' is not assignable}}
6aa58f00ebba5f14955001736b7aea20bb5bd91e6Steve Naroff  *(0 ? (double *)0 : (void *)(double *)0) = 0; // expected-error {{incomplete type 'void' is not assignable}}
7890d93eec45f2ba720dce98e34a1a904697ae842Steve Naroff  *(0 ? (double *)0 : (int *)(void *)0) = 0; // expected-error {{incomplete type 'void' is not assignable}} expected-warning {{pointer type mismatch ('double *' and 'int *')}}
8aaffbf7c790a324ed114184db771aae2d2e9151cSteve Naroff  *(0 ? (double *)0 : (double *)(void *)0) = 0;
9aaffbf7c790a324ed114184db771aae2d2e9151cSteve Naroff  *((void *) 0) = 0; // expected-error {{incomplete type 'void' is not assignable}}
10b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  double *dp;
11b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  int *ip;
12b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  void *vp;
13b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff
14b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  dp = vp;
15b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  vp = dp;
16aaffbf7c790a324ed114184db771aae2d2e9151cSteve Naroff  ip = dp; // expected-warning {{incompatible pointer types assigning 'double *', expected 'int *'}}
17aaffbf7c790a324ed114184db771aae2d2e9151cSteve Naroff  dp = ip; // expected-warning {{incompatible pointer types assigning 'int *', expected 'double *'}}
18b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  dp = 0 ? (double *)0 : (void *)0;
19b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff  vp = 0 ? (double *)0 : (void *)0;
20aaffbf7c790a324ed114184db771aae2d2e9151cSteve Naroff  ip = 0 ? (double *)0 : (void *)0; // expected-warning {{incompatible pointer types assigning 'double *', expected 'int *'}}
21b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff}
22b6d54e56a5c65c2728080578b84374c3c594daecSteve Naroff
23