2009-03-24 10:24:46 +08:00
// RUN: clang-cc -fsyntax-only -verify -pedantic %s
2008-01-08 09:11:38 +08:00
void foo ( ) {
* ( 0 ? ( double * ) 0 : ( void * ) 0 ) = 0 ;
2008-01-31 05:50:43 +08:00
// FIXME: GCC doesn't consider the the following two statements to be errors.
2008-01-15 00:10:57 +08:00
* ( 0 ? ( double * ) 0 : ( void * ) ( int * ) 0 ) = 0 ; // expected-error {{incomplete type 'void' is not assignable}}
* ( 0 ? ( double * ) 0 : ( void * ) ( double * ) 0 ) = 0 ; // expected-error {{incomplete type 'void' is not assignable}}
2008-01-31 05:50:43 +08:00
* ( 0 ? ( double * ) 0 : ( int * ) ( void * ) 0 ) = 0 ; // expected-error {{incomplete type 'void' is not assignable}} expected-warning {{pointer type mismatch ('double *' and 'int *')}}
2008-01-14 10:53:34 +08:00
* ( 0 ? ( double * ) 0 : ( double * ) ( void * ) 0 ) = 0 ;
* ( ( void * ) 0 ) = 0 ; // expected-error {{incomplete type 'void' is not assignable}}
2008-01-08 09:11:38 +08:00
double * dp ;
int * ip ;
void * vp ;
dp = vp ;
vp = dp ;
2008-01-14 10:53:34 +08:00
ip = dp ; // expected-warning {{incompatible pointer types assigning 'double *', expected 'int *'}}
dp = ip ; // expected-warning {{incompatible pointer types assigning 'int *', expected 'double *'}}
2008-01-08 09:11:38 +08:00
dp = 0 ? ( double * ) 0 : ( void * ) 0 ;
vp = 0 ? ( double * ) 0 : ( void * ) 0 ;
2008-01-14 10:53:34 +08:00
ip = 0 ? ( double * ) 0 : ( void * ) 0 ; // expected-warning {{incompatible pointer types assigning 'double *', expected 'int *'}}
2008-02-11 07:14:16 +08:00
const int * cip ;
vp = ( 0 ? vp : cip ) ; // expected-warning {{discards qualifiers}}
vp = ( 0 ? cip : vp ) ; // expected-warning {{discards qualifiers}}
2008-02-12 16:23:06 +08:00
int i = 2 ;
int ( * pf ) [ 2 ] ;
int ( * pv ) [ i ] ;
pf = ( i ? pf : pv ) ;
2008-02-12 16:46:17 +08:00
enum { xxx , yyy , zzz } e , * ee ;
short x ;
ee = ee ? & x : ee ? & i : & e ; // expected-warning {{pointer type mismatch}}
2008-02-14 01:29:58 +08:00
typedef void * asdf ;
* ( 0 ? ( asdf ) 0 : & x ) = 10 ;
2008-01-08 09:11:38 +08:00
}
2008-05-13 05:44:38 +08:00
int Postgresql ( ) {
char x ;
return ( ( ( ( & x ) ! = ( ( void * ) 0 ) ) ? ( * ( & x ) = ( ( char ) 1 ) ) : ( void ) ( ( void * ) 0 ) ) , ( unsigned long ) ( ( void * ) 0 ) ) ; // expected-warning {{C99 forbids conditional expressions with only one void side}}
}
2009-04-09 01:05:15 +08:00
# define nil ((void*) 0)
extern int f1 ( void ) ;
int f0 ( int a ) {
// GCC considers this a warning.
return a ? f1 ( ) : nil ; // expected-warning {{pointer/integer type mismatch in conditional expression ('int' and 'void *')}} expected-warning {{incompatible pointer to integer conversion returning 'void *', expected 'int'}}
}