VisitVarDecl should return Error(E), and we should test that the address
of a TLS var can't be used as a constexpr.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162837
91177308-0d34-0410-b5e6-
96231b3b80d8
bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {
if (VD->isThreadSpecified())
- return false;
+ return Error(E);
if (!VD->getType()->isReferenceType()) {
if (isa<ParmVarDecl>(VD)) {
Result.set(VD, Info.CurrentCall->Index);
constexpr A a(4);
static_assert(f(a).v == 4, "");
}
+
+namespace TLS {
+ __thread int n;
+ constexpr int &f() { // expected-error {{constexpr function never produces a constant expression}}
+ return n; // expected-note {{subexpression not valid in a constant expression}}
+ }
+}