summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/ExprConstant.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 9c9e473f7b5..6456376d48f 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -558,12 +558,14 @@ bool HandleLValueToRValueConversion(EvalInfo &Info, QualType Type,
// them are not permitted.
const VarDecl *VD = dyn_cast<VarDecl>(D);
QualType VT = VD->getType();
- if (!VD)
+ if (!VD || VD->isInvalidDecl())
return false;
if (!isa<ParmVarDecl>(VD)) {
if (!IsConstNonVolatile(VT))
return false;
- if (!VT->isIntegralOrEnumerationType() && !VT->isRealFloatingType())
+ // FIXME: Allow folding of values of any literal type in all languages.
+ if (!VT->isIntegralOrEnumerationType() && !VT->isRealFloatingType() &&
+ !VD->isConstexpr())
return false;
}
if (!EvaluateVarDeclInit(Info, VD, Frame, RVal))
OpenPOWER on IntegriCloud