diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-05-01 17:50:17 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-05-01 17:50:17 +0000 |
| commit | daff37013c0019afca0ee052a86b03785e2cd2de (patch) | |
| tree | 099cd132386b04750fe8adf75e6abbc4889ccc11 /clang/lib/Serialization | |
| parent | 0db806b7f942b8ab5495fc31cf672975642ebb10 (diff) | |
| download | bcm5719-llvm-daff37013c0019afca0ee052a86b03785e2cd2de.tar.gz bcm5719-llvm-daff37013c0019afca0ee052a86b03785e2cd2de.zip | |
AST: Mangle reference temporaries reliably
Summary:
Previously, we would generate a single name for all reference
temporaries and allow LLVM to rename them for us. Instead, number the
reference temporaries as we build them in Sema.
Reviewers: rsmith
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D3554
llvm-svn: 207776
Diffstat (limited to 'clang/lib/Serialization')
| -rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 6 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTWriterStmt.cpp | 5 |
2 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index da652ff8e3f..b42aa24cd7c 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -1572,8 +1572,10 @@ void ASTStmtReader::VisitFunctionParmPackExpr(FunctionParmPackExpr *E) { void ASTStmtReader::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) { VisitExpr(E); - E->Temporary = Reader.ReadSubExpr(); - E->ExtendingDecl = ReadDeclAs<ValueDecl>(Record, Idx); + E->State = Reader.ReadSubExpr(); + auto VD = ReadDeclAs<ValueDecl>(Record, Idx); + unsigned ManglingNumber = Record[Idx++]; + E->setExtendingDecl(VD, ManglingNumber); } void ASTStmtReader::VisitOpaqueValueExpr(OpaqueValueExpr *E) { diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp index 958620636ee..2fcf5450a3c 100644 --- a/clang/lib/Serialization/ASTWriterStmt.cpp +++ b/clang/lib/Serialization/ASTWriterStmt.cpp @@ -1567,8 +1567,9 @@ void ASTStmtWriter::VisitFunctionParmPackExpr(FunctionParmPackExpr *E) { void ASTStmtWriter::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) { VisitExpr(E); - Writer.AddStmt(E->Temporary); - Writer.AddDeclRef(E->ExtendingDecl, Record); + Writer.AddStmt(E->getTemporary()); + Writer.AddDeclRef(E->getExtendingDecl(), Record); + Record.push_back(E->getManglingNumber()); Code = serialization::EXPR_MATERIALIZE_TEMPORARY; } |

