mirror of https://github.com/microsoft/clang.git
74 lines
3.3 KiB
C
74 lines
3.3 KiB
C
// RUN: %clang_cc1 -triple i386-pc-unknown -fsyntax-only -Wstrict-prototypes -verify %s
|
|
// RUN: %clang_cc1 -triple i386-pc-unknown -fsyntax-only -Wstrict-prototypes -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
|
|
|
|
// function declaration with unspecified params
|
|
void foo1(); // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:11-[[@LINE-1]]:11}:"void"
|
|
// function declaration with 0 params
|
|
void foo2(void);
|
|
|
|
// function definition with 0 params(for both cases),
|
|
// valid according to 6.7.5.3/14
|
|
void foo1() {}
|
|
void foo2(void) {}
|
|
|
|
// function type typedef unspecified params
|
|
typedef void foo3(); // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:19-[[@LINE-1]]:19}:"void"
|
|
|
|
// global fp unspecified params
|
|
void (*foo4)(); // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:14-[[@LINE-1]]:14}:"void"
|
|
|
|
// struct member fp unspecified params
|
|
struct { void (*foo5)(); } s; // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:23-[[@LINE-1]]:23}:"void"
|
|
|
|
// param fp unspecified params
|
|
void bar2(void (*foo6)()) { // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:24-[[@LINE-1]]:24}:"void"
|
|
// local fp unspecified params
|
|
void (*foo7)() = 0; // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:16-[[@LINE-1]]:16}:"void"
|
|
// array fp unspecified params
|
|
void (*foo8[2])() = {0}; // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:19-[[@LINE-1]]:19}:"void"
|
|
}
|
|
|
|
// function type cast using using an anonymous function declaration
|
|
void bar3(void) {
|
|
// casting function w/out prototype to unspecified params function type
|
|
(void)(void(*)()) foo1; // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:18-[[@LINE-1]]:18}:"void"
|
|
// .. specified params
|
|
(void)(void(*)(void)) foo1;
|
|
}
|
|
|
|
// K&R function definition not preceded by full prototype
|
|
int foo9(a, b) // expected-warning {{old-style function definition is not preceded by a prototype}}
|
|
int a, b;
|
|
{
|
|
return a + b;
|
|
}
|
|
|
|
// Function declaration with no types
|
|
void foo10(); // expected-warning {{this function declaration is not a prototype}}
|
|
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:12-[[@LINE-1]]:12}:"void"
|
|
// K&R function definition with incomplete param list declared
|
|
void foo10(p, p2) void *p; {} // expected-warning {{old-style function definition is not preceded by a prototype}}
|
|
|
|
// K&R function definition with previous prototype declared is not diagnosed.
|
|
void foo11(int p, int p2);
|
|
void foo11(p, p2) int p; int p2; {}
|
|
|
|
// PR31020
|
|
void __attribute__((cdecl)) foo12(d) // expected-warning {{this old-style function definition is not preceded by a prototype}}
|
|
short d;
|
|
{}
|
|
|
|
// No warnings for variadic functions. Overloadable attribute is required
|
|
// to avoid err_ellipsis_first_param error.
|
|
// rdar://problem/33251668
|
|
void foo13(...) __attribute__((overloadable));
|
|
void foo13(...) __attribute__((overloadable)) {}
|