diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-02-20 16:12:14 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-02-20 16:12:14 +0000 |
commit | caf4826e2edd31da89e7c0f1bd1b5f557918d850 (patch) | |
tree | 0c6b327588acf4775fdc76ae4b9096216f33efbc | |
parent | 7adb1895384553144aa54d37ad1ed9166ece7644 (diff) | |
download | bcm5719-llvm-caf4826e2edd31da89e7c0f1bd1b5f557918d850.tar.gz bcm5719-llvm-caf4826e2edd31da89e7c0f1bd1b5f557918d850.zip |
Deserialize the direct-initialization range of a "new" expression
properly. Previously, we deserialized it but failed to set the
corresponding member in CXXNewExpr. Fixes <rdar://problem/10893600>.
llvm-svn: 150963
-rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 9 | ||||
-rw-r--r-- | clang/test/PCH/cxx-exprs.cpp | 27 |
2 files changed, 29 insertions, 7 deletions
diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index 8b85976bf42..77e45416694 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -1174,14 +1174,9 @@ void ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) { E->setOperatorNew(ReadDeclAs<FunctionDecl>(Record, Idx)); E->setOperatorDelete(ReadDeclAs<FunctionDecl>(Record, Idx)); E->AllocatedTypeInfo = GetTypeSourceInfo(Record, Idx); - SourceRange TypeIdParens; - TypeIdParens.setBegin(ReadSourceLocation(Record, Idx)); - TypeIdParens.setEnd(ReadSourceLocation(Record, Idx)); - E->TypeIdParens = TypeIdParens; + E->TypeIdParens = ReadSourceRange(Record, Idx); E->StartLoc = ReadSourceLocation(Record, Idx); - SourceRange DirectInitRange; - DirectInitRange.setBegin(ReadSourceLocation(Record, Idx)); - DirectInitRange.setEnd(ReadSourceLocation(Record, Idx)); + E->DirectInitRange = ReadSourceRange(Record, Idx); E->AllocateArgsArray(Reader.getContext(), isArray, NumPlacementArgs, E->StoredInitializationStyle != 0); diff --git a/clang/test/PCH/cxx-exprs.cpp b/clang/test/PCH/cxx-exprs.cpp new file mode 100644 index 00000000000..9cd31941e35 --- /dev/null +++ b/clang/test/PCH/cxx-exprs.cpp @@ -0,0 +1,27 @@ +// Test this without pch. +// RUN: %clang_cc1 -include %s -verify -std=c++11 %s + +// Test with pch. +// RUN: %clang_cc1 -std=c++11 -emit-pch -o %t %s +// RUN: %clang_cc1 -include-pch %t -verify -std=c++11 %s + +#ifndef HEADER +#define HEADER + +template<typename T> +class New { + New(const New&); + +public: + New *clone() { + return new New(*this); + } +}; + +#else + +New<int> *clone_new(New<int> *n) { + return n->clone(); +} + +#endif |