summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ExprCXX.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-04-30 22:12:22 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-04-30 22:12:22 +0000
commitd8e076972f815f20204558f0605f802cd12c029c (patch)
treefbfe014c5340008b82fbe9f4828d0d9c5f52d874 /clang/lib/AST/ExprCXX.cpp
parentd0d5ec4a383f280219b1ee1fbf91275620472cf1 (diff)
downloadbcm5719-llvm-d8e076972f815f20204558f0605f802cd12c029c.tar.gz
bcm5719-llvm-d8e076972f815f20204558f0605f802cd12c029c.zip
Store the source range of a CXXOperatorCallExpr in the Expr object instead of
calculating it recursively. boost::assign::tuple_list_of uses the trick of chaining call operator expressions in order to declare a "list of tuples", e.g: std::vector<tuple> v = boost::assign::tuple_list_of(1, "foo")(2, "bar")(3, "qqq"); Due to CXXOperatorCallExpr calculating its source range recursively we would get significant slowdowns with a large number of chained call operator expressions and the potential for stack overflow. rdar://11350116 llvm-svn: 155848
Diffstat (limited to 'clang/lib/AST/ExprCXX.cpp')
-rw-r--r--clang/lib/AST/ExprCXX.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp
index 8cf519c93dc..8fbe72108b9 100644
--- a/clang/lib/AST/ExprCXX.cpp
+++ b/clang/lib/AST/ExprCXX.cpp
@@ -415,7 +415,7 @@ SourceRange CXXConstructExpr::getSourceRange() const {
return SourceRange(Loc, End);
}
-SourceRange CXXOperatorCallExpr::getSourceRange() const {
+SourceRange CXXOperatorCallExpr::getSourceRangeImpl() const {
OverloadedOperatorKind Kind = getOperator();
if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) {
if (getNumArgs() == 1)
@@ -438,7 +438,7 @@ SourceRange CXXOperatorCallExpr::getSourceRange() const {
return SourceRange(getArg(0)->getSourceRange().getBegin(),
getArg(1)->getSourceRange().getEnd());
} else {
- return SourceRange();
+ return getOperatorLoc();
}
}
OpenPOWER on IntegriCloud