mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 11:35:51 -04:00

We referred to all declaration in definitions in our diagnostic messages which is can be inaccurate. Instead, classify the declaration and emit an appropriate diagnostic for the new declaration and an appropriate note pointing to the old one. This fixes PR24116. llvm-svn: 242190
18 lines
623 B
C
18 lines
623 B
C
/* RUN: %clang_cc1 %s -fsyntax-only -pedantic -verify
|
|
*/
|
|
|
|
extern struct {int a;} x; // expected-note {{previous declaration is here}}
|
|
extern struct {int a;} x; // expected-error {{redeclaration of 'x'}}
|
|
|
|
struct x;
|
|
int a(struct x* b) {
|
|
// Per C99 6.7.2.3, since the outer and inner "struct x"es have different
|
|
// scopes, they don't refer to the same type, and are therefore incompatible
|
|
struct x {int a;} *c = b; // expected-warning {{incompatible pointer types}}
|
|
}
|
|
|
|
struct x {int a;} r;
|
|
int b() {
|
|
struct x {char x;} s = r; // expected-error {{initializing 'struct x' with an expression of incompatible type 'struct x'}}
|
|
}
|