[clang] 0cd44ff - [Clang][AST][NFC] Move template argument dependence computations for MemberExpr to computeDependence (#86682)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 2 08:14:28 PDT 2024
Author: Krystian Stasiowski
Date: 2024-04-02T11:14:24-04:00
New Revision: 0cd44ff15990799759721e8ec5e6402b7916e464
URL: https://github.com/llvm/llvm-project/commit/0cd44ff15990799759721e8ec5e6402b7916e464
DIFF: https://github.com/llvm/llvm-project/commit/0cd44ff15990799759721e8ec5e6402b7916e464.diff
LOG: [Clang][AST][NFC] Move template argument dependence computations for MemberExpr to computeDependence (#86682)
(This patch depends on #86678)
Pretty straightforward change, addresses the FIXME's in
`computeDependence(MemberExpr*)` and `MemberExpr::Create` by moving the
template argument dependence computations to `computeDependence`.
Added:
Modified:
clang/include/clang/AST/Expr.h
clang/lib/AST/ComputeDependence.cpp
clang/lib/AST/Expr.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h
index e43098e144c88f..2bfefeabc348be 100644
--- a/clang/include/clang/AST/Expr.h
+++ b/clang/include/clang/AST/Expr.h
@@ -3209,9 +3209,11 @@ class MemberExpr final
}
MemberExpr(Expr *Base, bool IsArrow, SourceLocation OperatorLoc,
- ValueDecl *MemberDecl, const DeclarationNameInfo &NameInfo,
- QualType T, ExprValueKind VK, ExprObjectKind OK,
- NonOdrUseReason NOUR);
+ NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc,
+ ValueDecl *MemberDecl, DeclAccessPair FoundDecl,
+ const DeclarationNameInfo &NameInfo,
+ const TemplateArgumentListInfo *TemplateArgs, QualType T,
+ ExprValueKind VK, ExprObjectKind OK, NonOdrUseReason NOUR);
MemberExpr(EmptyShell Empty)
: Expr(MemberExprClass, Empty), Base(), MemberDecl() {}
diff --git a/clang/lib/AST/ComputeDependence.cpp b/clang/lib/AST/ComputeDependence.cpp
index 9d3856b8f7e08a..86b77b49a0fbc4 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -654,6 +654,9 @@ ExprDependence clang::computeDependence(MemberExpr *E) {
D |= toExprDependence(NNS->getDependence() &
~NestedNameSpecifierDependence::Dependent);
+ for (const auto &A : E->template_arguments())
+ D |= toExprDependence(A.getArgument().getDependence());
+
auto *MemberDecl = E->getMemberDecl();
if (FieldDecl *FD = dyn_cast<FieldDecl>(MemberDecl)) {
DeclContext *DC = MemberDecl->getDeclContext();
@@ -670,7 +673,6 @@ ExprDependence clang::computeDependence(MemberExpr *E) {
D |= ExprDependence::Type;
}
}
- // FIXME: move remaining dependence computation from MemberExpr::Create()
return D;
}
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index a85755efeb8b8e..07c9f287dd0767 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -1712,8 +1712,11 @@ UnaryExprOrTypeTraitExpr::UnaryExprOrTypeTraitExpr(
}
MemberExpr::MemberExpr(Expr *Base, bool IsArrow, SourceLocation OperatorLoc,
- ValueDecl *MemberDecl,
- const DeclarationNameInfo &NameInfo, QualType T,
+ NestedNameSpecifierLoc QualifierLoc,
+ SourceLocation TemplateKWLoc, ValueDecl *MemberDecl,
+ DeclAccessPair FoundDecl,
+ const DeclarationNameInfo &NameInfo,
+ const TemplateArgumentListInfo *TemplateArgs, QualType T,
ExprValueKind VK, ExprObjectKind OK,
NonOdrUseReason NOUR)
: Expr(MemberExprClass, T, VK, OK), Base(Base), MemberDecl(MemberDecl),
@@ -1721,12 +1724,30 @@ MemberExpr::MemberExpr(Expr *Base, bool IsArrow, SourceLocation OperatorLoc,
assert(!NameInfo.getName() ||
MemberDecl->getDeclName() == NameInfo.getName());
MemberExprBits.IsArrow = IsArrow;
- MemberExprBits.HasQualifier = false;
- MemberExprBits.HasFoundDecl = false;
- MemberExprBits.HasTemplateKWAndArgsInfo = false;
+ MemberExprBits.HasQualifier = QualifierLoc.hasQualifier();
+ MemberExprBits.HasFoundDecl =
+ FoundDecl.getDecl() != MemberDecl ||
+ FoundDecl.getAccess() != MemberDecl->getAccess();
+ MemberExprBits.HasTemplateKWAndArgsInfo =
+ TemplateArgs || TemplateKWLoc.isValid();
MemberExprBits.HadMultipleCandidates = false;
MemberExprBits.NonOdrUseReason = NOUR;
MemberExprBits.OperatorLoc = OperatorLoc;
+
+ if (hasQualifier())
+ new (getTrailingObjects<NestedNameSpecifierLoc>())
+ NestedNameSpecifierLoc(QualifierLoc);
+ if (hasFoundDecl())
+ *getTrailingObjects<DeclAccessPair>() = FoundDecl;
+ if (TemplateArgs) {
+ auto Deps = TemplateArgumentDependence::None;
+ getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
+ TemplateKWLoc, *TemplateArgs, getTrailingObjects<TemplateArgumentLoc>(),
+ Deps);
+ } else if (TemplateKWLoc.isValid()) {
+ getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
+ TemplateKWLoc);
+ }
setDependence(computeDependence(this));
}
@@ -1747,36 +1768,9 @@ MemberExpr *MemberExpr::Create(
TemplateArgs ? TemplateArgs->size() : 0);
void *Mem = C.Allocate(Size, alignof(MemberExpr));
- MemberExpr *E = new (Mem) MemberExpr(Base, IsArrow, OperatorLoc, MemberDecl,
- NameInfo, T, VK, OK, NOUR);
-
- E->MemberExprBits.HasQualifier = HasQualifier;
- E->MemberExprBits.HasFoundDecl = HasFoundDecl;
- E->MemberExprBits.HasTemplateKWAndArgsInfo = HasTemplateKWAndArgsInfo;
-
- if (HasQualifier)
- new (E->getTrailingObjects<NestedNameSpecifierLoc>())
- NestedNameSpecifierLoc(QualifierLoc);
- if (HasFoundDecl)
- *E->getTrailingObjects<DeclAccessPair>() = FoundDecl;
-
- // FIXME: remove remaining dependence computation to computeDependence().
- auto Deps = E->getDependence();
- if (TemplateArgs) {
- auto TemplateArgDeps = TemplateArgumentDependence::None;
- E->getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
- TemplateKWLoc, *TemplateArgs,
- E->getTrailingObjects<TemplateArgumentLoc>(), TemplateArgDeps);
- for (const TemplateArgumentLoc &ArgLoc : TemplateArgs->arguments()) {
- Deps |= toExprDependence(ArgLoc.getArgument().getDependence());
- }
- } else if (TemplateKWLoc.isValid()) {
- E->getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
- TemplateKWLoc);
- }
- E->setDependence(Deps);
-
- return E;
+ return new (Mem) MemberExpr(Base, IsArrow, OperatorLoc, QualifierLoc,
+ TemplateKWLoc, MemberDecl, FoundDecl, NameInfo,
+ TemplateArgs, T, VK, OK, NOUR);
}
MemberExpr *MemberExpr::CreateEmpty(const ASTContext &Context,
More information about the cfe-commits
mailing list