mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 18:06:05 +00: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
24 lines
893 B
C++
24 lines
893 B
C++
// RUN: %clang_cc1 -std=c++11 -triple=x86_64-linux-gnu -verify %s
|
|
|
|
struct S {
|
|
static thread_local int a;
|
|
static int b; // expected-note {{here}}
|
|
thread_local int c; // expected-error {{'thread_local' is only allowed on variable declarations}}
|
|
static thread_local int d; // expected-note {{here}}
|
|
};
|
|
|
|
thread_local int S::a;
|
|
thread_local int S::b; // expected-error {{thread-local declaration of 'b' follows non-thread-local declaration}}
|
|
thread_local int S::c; // expected-error {{non-static data member defined out-of-line}}
|
|
int S::d; // expected-error {{non-thread-local declaration of 'd' follows thread-local declaration}}
|
|
|
|
thread_local int x[3];
|
|
thread_local int y[3];
|
|
thread_local int z[3]; // expected-note {{previous}}
|
|
|
|
void f() {
|
|
thread_local int x;
|
|
static thread_local int y;
|
|
extern thread_local int z; // expected-error {{redeclaration of 'z' with a different type}}
|
|
}
|