1 // RUN: %clang_cc1 -triple i386-pc-unknown -Wconversion -Wliteral-conversion -fsyntax-only -verify %s
4 void f0(a
, b
, c
, d
) int a
,b
,c
,d
; {} // expected-warning {{a function definition without a prototype is deprecated in all versions of C and is not supported in C23}}
6 f0(1); // expected-warning{{too few arguments}}
9 void f1(a
, b
) int a
, b
; {} // expected-warning {{a function definition without a prototype is deprecated in all versions of C and is not supported in C23}}
11 f1(1, 2, 3); // expected-warning{{too many arguments}}
14 void f2(float); // expected-note{{previous declaration is here}}
15 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}} \
16 expected
-warning
{{a function definition without a prototype is deprecated in all versions of C
and is
not supported in C23
}}
18 typedef void (*f3
)(void);
19 f3
t3(int b
) { return b
? f0
: f1
; } // okay
25 // FIXME: we should diagnose this case, but when merging function declarations,
26 // we don't diagnose it because the function is a builtin.
28 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}}
35 void proto(x
) // expected-warning {{a function definition without a prototype is deprecated in all versions of C and is not supported in C23}}
41 proto(42.1); // expected-warning{{implicit conversion from 'double' to 'int' changes value from 42.1 to 42}}
42 (&proto
)(42.1); // expected-warning{{implicit conversion from 'double' to 'int' changes value from 42.1 to 42}}
46 void func(short d
) __attribute__((cdecl)); // expected-note{{previous declaration is here}}
47 void __attribute__((cdecl)) func(d
) // expected-warning {{a function definition without a prototype is deprecated in all versions of C and is not supported in C23}}
48 short d
; // expected-warning{{promoted type 'int' of K&R function parameter is not compatible with the parameter type 'short' declared in a previous prototype}}