summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTWriterStmt.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2019-06-05 11:46:57 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2019-06-05 11:46:57 +0000
commit9b2b8ad8b187745881880b62fda465c6d5b61fa5 (patch)
tree8f2257a095230c1dd86122de7014d3d55d52ec4e /clang/lib/Serialization/ASTWriterStmt.cpp
parentb42196661ba7ccfa3d68906ed52e0488305291b2 (diff)
downloadbcm5719-llvm-9b2b8ad8b187745881880b62fda465c6d5b61fa5.tar.gz
bcm5719-llvm-9b2b8ad8b187745881880b62fda465c6d5b61fa5.zip
Revert "Factor out duplicated code building a MemberExpr and marking it" and "Convert MemberExpr creation and serialization to work the same way as"
This reverts commits r362551 and r362563. Crashes during modules selfhost. llvm-svn: 362597
Diffstat (limited to 'clang/lib/Serialization/ASTWriterStmt.cpp')
-rw-r--r--clang/lib/Serialization/ASTWriterStmt.cpp56
1 files changed, 25 insertions, 31 deletions
diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp
index d52a4a85b32..776aab6bf51 100644
--- a/clang/lib/Serialization/ASTWriterStmt.cpp
+++ b/clang/lib/Serialization/ASTWriterStmt.cpp
@@ -660,45 +660,39 @@ void ASTStmtWriter::VisitCallExpr(CallExpr *E) {
}
void ASTStmtWriter::VisitMemberExpr(MemberExpr *E) {
- VisitExpr(E);
+ // Don't call VisitExpr, we'll write everything here.
+
+ Record.push_back(E->hasQualifier());
+ if (E->hasQualifier())
+ Record.AddNestedNameSpecifierLoc(E->getQualifierLoc());
+
+ Record.push_back(E->hasTemplateKWAndArgsInfo());
+ if (E->hasTemplateKWAndArgsInfo()) {
+ Record.AddSourceLocation(E->getTemplateKeywordLoc());
+ unsigned NumTemplateArgs = E->getNumTemplateArgs();
+ Record.push_back(NumTemplateArgs);
+ Record.AddSourceLocation(E->getLAngleLoc());
+ Record.AddSourceLocation(E->getRAngleLoc());
+ for (unsigned i=0; i != NumTemplateArgs; ++i)
+ Record.AddTemplateArgumentLoc(E->getTemplateArgs()[i]);
+ }
- bool HasQualifier = E->hasQualifier();
- bool HasFoundDecl =
- E->hasQualifierOrFoundDecl() &&
- (E->getFoundDecl().getDecl() != E->getMemberDecl() ||
- E->getFoundDecl().getAccess() != E->getMemberDecl()->getAccess());
- bool HasTemplateInfo = E->hasTemplateKWAndArgsInfo();
- unsigned NumTemplateArgs = E->getNumTemplateArgs();
+ Record.push_back(E->hadMultipleCandidates());
- // Write these first for easy access when deserializing, as they affect the
- // size of the MemberExpr.
- Record.push_back(HasQualifier);
- Record.push_back(HasFoundDecl);
- Record.push_back(HasTemplateInfo);
- Record.push_back(NumTemplateArgs);
+ DeclAccessPair FoundDecl = E->getFoundDecl();
+ Record.AddDeclRef(FoundDecl.getDecl());
+ Record.push_back(FoundDecl.getAccess());
+ Record.AddTypeRef(E->getType());
+ Record.push_back(E->getValueKind());
+ Record.push_back(E->getObjectKind());
Record.AddStmt(E->getBase());
Record.AddDeclRef(E->getMemberDecl());
- Record.AddDeclarationNameLoc(E->MemberDNLoc,
- E->getMemberDecl()->getDeclName());
Record.AddSourceLocation(E->getMemberLoc());
Record.push_back(E->isArrow());
- Record.push_back(E->hadMultipleCandidates());
Record.AddSourceLocation(E->getOperatorLoc());
-
- if (HasFoundDecl) {
- DeclAccessPair FoundDecl = E->getFoundDecl();
- Record.AddDeclRef(FoundDecl.getDecl());
- Record.push_back(FoundDecl.getAccess());
- }
-
- if (HasQualifier)
- Record.AddNestedNameSpecifierLoc(E->getQualifierLoc());
-
- if (HasTemplateInfo)
- AddTemplateKWAndArgsInfo(*E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
- E->getTrailingObjects<TemplateArgumentLoc>());
-
+ Record.AddDeclarationNameLoc(E->MemberDNLoc,
+ E->getMemberDecl()->getDeclName());
Code = serialization::EXPR_MEMBER;
}
OpenPOWER on IntegriCloud