]> granicus.if.org Git - clang/commit
Store the source range of a CXXOperatorCallExpr in the Expr object instead of
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 30 Apr 2012 22:12:22 +0000 (22:12 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 30 Apr 2012 22:12:22 +0000 (22:12 +0000)
commit4548ca2912e5f2b78a20e50c58d8a1a9c5e9e67c
tree9a94eee3e1421d5f86099726ce3ba0eadea7cf39
parent89585e800122de7ee4ca74dfca1c86a11685528f
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155848 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/ExprCXX.h
lib/AST/ExprCXX.cpp
lib/Serialization/ASTReaderStmt.cpp
lib/Serialization/ASTWriterStmt.cpp