llvm-project/clang/test/SemaCXX/cxx11-thread-local.cpp
David Majnemer 38a50c0a16 [Sema] Emit a better diagnostic when variable redeclarations disagree
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
2015-07-14 20:08:49 +00:00

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}}
}