[Clang][AST][NFC] MemberExpr stores NestedNameSpecifierLoc and DeclAccessPair separately (#86678)
Currently, `MemberExpr` allocates a trailing `MemberExprNameQualifier` object if it either has a `NestedNameSpecifierLoc`, or if it names a member found via using declaration. Since the presence of a _nested-name-specifier_ does not necessarily imply the named member was found via using declaration, this patch removes `MemberExprNameQualifier` and allocates the members separately.
This commit is contained in:
committed by
GitHub
parent
82d8a95611
commit
ea9a66ea8b
@@ -970,10 +970,7 @@ void ASTStmtWriter::VisitMemberExpr(MemberExpr *E) {
|
||||
VisitExpr(E);
|
||||
|
||||
bool HasQualifier = E->hasQualifier();
|
||||
bool HasFoundDecl =
|
||||
E->hasQualifierOrFoundDecl() &&
|
||||
(E->getFoundDecl().getDecl() != E->getMemberDecl() ||
|
||||
E->getFoundDecl().getAccess() != E->getMemberDecl()->getAccess());
|
||||
bool HasFoundDecl = E->hasFoundDecl();
|
||||
bool HasTemplateInfo = E->hasTemplateKWAndArgsInfo();
|
||||
unsigned NumTemplateArgs = E->getNumTemplateArgs();
|
||||
|
||||
@@ -995,15 +992,15 @@ void ASTStmtWriter::VisitMemberExpr(MemberExpr *E) {
|
||||
CurrentPackingBits.addBits(E->isNonOdrUse(), /*Width=*/2);
|
||||
Record.AddSourceLocation(E->getOperatorLoc());
|
||||
|
||||
if (HasQualifier)
|
||||
Record.AddNestedNameSpecifierLoc(E->getQualifierLoc());
|
||||
|
||||
if (HasFoundDecl) {
|
||||
DeclAccessPair FoundDecl = E->getFoundDecl();
|
||||
Record.AddDeclRef(FoundDecl.getDecl());
|
||||
CurrentPackingBits.addBits(FoundDecl.getAccess(), /*BitWidth=*/2);
|
||||
}
|
||||
|
||||
if (HasQualifier)
|
||||
Record.AddNestedNameSpecifierLoc(E->getQualifierLoc());
|
||||
|
||||
if (HasTemplateInfo)
|
||||
AddTemplateKWAndArgsInfo(*E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
|
||||
E->getTrailingObjects<TemplateArgumentLoc>());
|
||||
|
||||
Reference in New Issue
Block a user