aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2011-11-10 03:30:42 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2011-11-10 03:30:42 +0000
commit1445bbacf4c8de5f208ff4ccb302424a4d9e233e (patch)
tree50c2237eda4491c2b3d627a145f9e1f23aff8158
parent7480d96830ab80547da28f585e522958b001de52 (diff)
Temporary fix for a performance problem Eli spotted. The APValue representation
is currently too inefficient to allow us to use it for array initializers, but fortunately we usually don't yet need to evaluate such initializers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144260 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AST/ExprConstant.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp
index aa949907eb..f2e3d36d75 100644
--- a/lib/AST/ExprConstant.cpp
+++ b/lib/AST/ExprConstant.cpp
@@ -3391,6 +3391,12 @@ static bool EvaluateConstantExpression(APValue &Result, EvalInfo &Info,
/// in Result. If this expression is a glvalue, an lvalue-to-rvalue conversion
/// will be applied to the result.
bool Expr::EvaluateAsRValue(EvalResult &Result, const ASTContext &Ctx) const {
+ // FIXME: Evaluating initializers for large arrays can cause performance
+ // problems, and we don't use such values yet. Once we have a more efficient
+ // array representation, this should be reinstated, and used by CodeGen.
+ if (isRValue() && getType()->isArrayType())
+ return false;
+
EvalInfo Info(Ctx, Result);
CCValue Value;