summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExprConstant.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2018-12-01 08:29:36 +0000
committerBill Wendling <isanbard@gmail.com>2018-12-01 08:29:36 +0000
commit2a81f6670db3cb78d65e0a05ff6a7f0b114fd359 (patch)
tree57a6216b6544dc570cfecae1404bc7c1aedc131d /clang/lib/CodeGen/CGExprConstant.cpp
parent2d6324c3cb97ff8e00b0d6d337fea619cb6d532b (diff)
downloadbcm5719-llvm-2a81f6670db3cb78d65e0a05ff6a7f0b114fd359.tar.gz
bcm5719-llvm-2a81f6670db3cb78d65e0a05ff6a7f0b114fd359.zip
Specify constant context in constant emitter
The constant emitter may need to evaluate the expression in a constant context. For exasmple, global initializer lists. llvm-svn: 348070
Diffstat (limited to 'clang/lib/CodeGen/CGExprConstant.cpp')
-rw-r--r--clang/lib/CodeGen/CGExprConstant.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp
index eb5e0109684..519b206ad37 100644
--- a/clang/lib/CodeGen/CGExprConstant.cpp
+++ b/clang/lib/CodeGen/CGExprConstant.cpp
@@ -1455,6 +1455,7 @@ llvm::Constant *ConstantEmitter::tryEmitPrivateForVarInit(const VarDecl &D) {
if (CD->isTrivial() && CD->isDefaultConstructor())
return CGM.EmitNullConstant(D.getType());
}
+ InConstantContext = true;
}
QualType destType = D.getType();
@@ -1552,7 +1553,7 @@ llvm::Constant *ConstantEmitter::tryEmitPrivate(const Expr *E,
if (destType->isReferenceType())
Success = E->EvaluateAsLValue(Result, CGM.getContext());
else
- Success = E->EvaluateAsRValue(Result, CGM.getContext());
+ Success = E->EvaluateAsRValue(Result, CGM.getContext(), InConstantContext);
llvm::Constant *C;
if (Success && !Result.HasSideEffects)
OpenPOWER on IntegriCloud