2011-02-17 19:05:49 +08:00
// RUN: %clang_cc1 -Wconversion -Wliteral-conversion -fsyntax-only -verify %s
2009-02-26 00:33:18 +08:00
// C DR #316, PR 3626.
void f0 ( a , b , c , d ) int a , b , c , d ; { }
2009-04-02 23:37:10 +08:00
void t0 ( void ) {
f0 ( 1 ) ; // expected-warning{{too few arguments}}
}
2009-02-26 00:33:18 +08:00
void f1 ( a , b ) int a , b ; { }
2009-04-02 23:37:10 +08:00
void t1 ( void ) {
f1 ( 1 , 2 , 3 ) ; // expected-warning{{too many arguments}}
}
2009-02-26 00:33:18 +08:00
void f2 ( float ) ; // expected-note{{previous declaration is here}}
2009-03-07 06:43:54 +08:00
void f2 ( x ) float x ; { } // expected-warning{{promoted type 'double' of K&R function parameter is not compatible with the parameter type 'float' declared in a previous prototype}}
2009-02-26 00:33:18 +08:00
typedef void ( * f3 ) ( void ) ;
f3 t3 ( int b ) { return b ? f0 : f1 ; } // okay
2010-07-29 23:18:02 +08:00
// <rdar://problem/8193107>
void f4 ( ) {
char * rindex ( ) ;
}
char * rindex ( s , c )
2010-09-05 08:04:01 +08:00
register char * s , c ; // expected-warning{{promoted type 'char *' of K&R function parameter is not compatible with the parameter type 'const char *' declared in a previous prototype}}
2010-07-29 23:18:02 +08:00
{
return 0 ;
}
2010-10-26 04:39:23 +08:00
// PR8314
void proto ( int ) ;
void proto ( x )
int x ;
{
}
void use_proto ( ) {
2012-05-16 00:56:36 +08:00
proto ( 42.1 ) ; // expected-warning{{implicit conversion from 'double' to 'int' changes value from 42.1 to 42}}
( & proto ) ( 42.1 ) ; // expected-warning{{implicit conversion from 'double' to 'int' changes value from 42.1 to 42}}
2010-10-26 04:39:23 +08:00
}