diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2019-06-05 11:46:57 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2019-06-05 11:46:57 +0000 |
commit | 9b2b8ad8b187745881880b62fda465c6d5b61fa5 (patch) | |
tree | 8f2257a095230c1dd86122de7014d3d55d52ec4e /clang/lib/Serialization/ASTWriterStmt.cpp | |
parent | b42196661ba7ccfa3d68906ed52e0488305291b2 (diff) | |
download | bcm5719-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.cpp | 56 |
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; } |