llvm-project/clang/test/Sema/predefined-function.c
Aaron Ballman 385e7df330 Correctly diagnose prototype redeclaration errors in C
We did not implement C99 6.7.5.3p15 fully in that we missed the rule
for compatible function types where a prior declaration has a prototype
and a subsequent definition (not just declaration) has an empty
identifier list or an identifier list with a mismatch in parameter
arity. This addresses that situation by issuing an error on code like:

void f(int);
void f() {} // type conflicts with previous declaration

(Note: we already diagnose the other type conflict situations
appropriately, this was the only situation we hadn't covered that I
could find.)
2022-04-13 08:21:31 -04:00

38 lines
829 B
C

// RUN: %clang_cc1 -fsyntax-only -Wno-strict-prototypes -verify -pedantic %s
char *funk(int format);
enum Test {A=-1};
char *funk(enum Test x);
int eli(float b); // expected-note {{previous declaration is here}}
int b(int c) {return 1;}
int foo();
int foo() {
int eli(int (int)); // expected-error {{conflicting types for 'eli'}}
eli(b);
return 0;
}
int bar();
int bar(int i) // expected-note {{previous definition is here}}
{
return 0;
}
int bar() // expected-error {{conflicting types for 'bar'}}
{
return 0;
}
int foobar(int); // expected-note {{previous declaration is here}}
int foobar() // expected-error {{conflicting types for 'foobar'}}
{
return 0;
}
int wibble(); // expected-note {{previous declaration is here}}
float wibble() // expected-error {{conflicting types for 'wibble'}}
{
return 0.0f;
}