diff options
-rw-r--r-- | clang/lib/CodeGen/CGExprConstant.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGen/builtin-constant-p.c | 11 |
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp index eb5e0109684..ca86e107102 100644 --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -1552,7 +1552,8 @@ 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 */ true); llvm::Constant *C; if (Success && !Result.HasSideEffects) diff --git a/clang/test/CodeGen/builtin-constant-p.c b/clang/test/CodeGen/builtin-constant-p.c index 5cdcc721235..943d2886324 100644 --- a/clang/test/CodeGen/builtin-constant-p.c +++ b/clang/test/CodeGen/builtin-constant-p.c @@ -157,3 +157,14 @@ static void src_fn(void) { void test14() { assign(dest_p, src_fn); } + +struct test15_s { + const char *name; + int num_args; +}; + +extern int test15_v; + +struct test15_s tcg_op_defs_org_x86_64[] = { + {"tag", __builtin_constant_p(test15_v) && !test15_v ? 0x10 : 0 }, +}; |