Skip to content

Commit 9d96ab9

Browse files
authored
Revert "[clang] NFC: Clear some uses of MemberPointerType::getClass (#131965)"
This reverts commit fd7be0d.
1 parent 5151e6d commit 9d96ab9

19 files changed

+112
-114
lines changed

clang-tools-extra/clang-tidy/bugprone/ComparePointerToMemberVirtualFunctionCheck.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ void ComparePointerToMemberVirtualFunctionCheck::check(
7070
// compare with variable which type is pointer to member function.
7171
llvm::SmallVector<SourceLocation, 12U> SameSignatureVirtualMethods{};
7272
const auto *MPT = cast<MemberPointerType>(DRE->getType().getCanonicalType());
73-
const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
73+
const Type *T = MPT->getClass();
74+
if (T == nullptr)
75+
return;
76+
const CXXRecordDecl *RD = T->getAsCXXRecordDecl();
7477
if (RD == nullptr)
7578
return;
7679

clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ bool isQualificationConvertiblePointer(QualType From, QualType To,
219219

220220
if (P1->isMemberPointerType())
221221
return P2->isMemberPointerType() &&
222-
P1->getAs<MemberPointerType>()->getMostRecentCXXRecordDecl() ==
223-
P2->getAs<MemberPointerType>()->getMostRecentCXXRecordDecl();
222+
P1->getAs<MemberPointerType>()->getClass() ==
223+
P2->getAs<MemberPointerType>()->getClass();
224224

225225
if (P1->isConstantArrayType())
226226
return P2->isConstantArrayType() &&

clang/include/clang/AST/CanonicalType.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -454,8 +454,6 @@ struct CanProxyAdaptor<MemberPointerType>
454454
: public CanProxyBase<MemberPointerType> {
455455
LLVM_CLANG_CANPROXY_TYPE_ACCESSOR(getPointeeType)
456456
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(const Type *, getClass)
457-
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(const CXXRecordDecl *,
458-
getMostRecentCXXRecordDecl)
459457
};
460458

461459
// CanProxyAdaptors for arrays are intentionally unimplemented because

clang/include/clang/Sema/Sema.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5769,11 +5769,10 @@ class Sema final : public SemaBase {
57695769

57705770
/// Determine whether the type \p Derived is a C++ class that is
57715771
/// derived from the type \p Base.
5772-
bool IsDerivedFrom(SourceLocation Loc, CXXRecordDecl *Derived,
5773-
CXXRecordDecl *Base, CXXBasePaths &Paths);
5774-
bool IsDerivedFrom(SourceLocation Loc, CXXRecordDecl *Derived,
5775-
CXXRecordDecl *Base);
57765772
bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base);
5773+
5774+
/// Determine whether the type \p Derived is a C++ class that is
5775+
/// derived from the type \p Base.
57775776
bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base,
57785777
CXXBasePaths &Paths);
57795778

clang/lib/AST/ByteCode/Compiler.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,8 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) {
238238
const auto *FromMP = SubExpr->getType()->getAs<MemberPointerType>();
239239
const auto *ToMP = CE->getType()->getAs<MemberPointerType>();
240240

241-
unsigned DerivedOffset =
242-
Ctx.collectBaseOffset(ToMP->getMostRecentCXXRecordDecl(),
243-
FromMP->getMostRecentCXXRecordDecl());
241+
unsigned DerivedOffset = collectBaseOffset(QualType(ToMP->getClass(), 0),
242+
QualType(FromMP->getClass(), 0));
244243

245244
if (!this->delegate(SubExpr))
246245
return false;
@@ -254,9 +253,8 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) {
254253
const auto *FromMP = SubExpr->getType()->getAs<MemberPointerType>();
255254
const auto *ToMP = CE->getType()->getAs<MemberPointerType>();
256255

257-
unsigned DerivedOffset =
258-
Ctx.collectBaseOffset(FromMP->getMostRecentCXXRecordDecl(),
259-
ToMP->getMostRecentCXXRecordDecl());
256+
unsigned DerivedOffset = collectBaseOffset(QualType(FromMP->getClass(), 0),
257+
QualType(ToMP->getClass(), 0));
260258

261259
if (!this->delegate(SubExpr))
262260
return false;

clang/lib/AST/ExprConstant.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10551,9 +10551,8 @@ bool MemberPointerExprEvaluator::VisitCastExpr(const CastExpr *E) {
1055110551
if (!Result.castToDerived(Derived))
1055210552
return Error(E);
1055310553
}
10554-
if (!Result.castToDerived(E->getType()
10555-
->castAs<MemberPointerType>()
10556-
->getMostRecentCXXRecordDecl()))
10554+
const Type *FinalTy = E->getType()->castAs<MemberPointerType>()->getClass();
10555+
if (!Result.castToDerived(FinalTy->getAsCXXRecordDecl()))
1055710556
return Error(E);
1055810557
return true;
1055910558
}

clang/lib/AST/MicrosoftMangle.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ void MicrosoftCXXNameMangler::mangleVariableEncoding(const VarDecl *VD) {
695695
mangleQualifiers(MPT->getPointeeType().getQualifiers(), true);
696696
// Member pointers are suffixed with a back reference to the member
697697
// pointer's class name.
698-
mangleName(MPT->getMostRecentCXXRecordDecl());
698+
mangleName(MPT->getClass()->getAsCXXRecordDecl());
699699
} else
700700
mangleQualifiers(Ty->getPointeeType().getQualifiers(), false);
701701
} else if (const ArrayType *AT = getASTContext().getAsArrayType(Ty)) {
@@ -3331,11 +3331,11 @@ void MicrosoftCXXNameMangler::mangleType(const MemberPointerType *T,
33313331
manglePointerExtQualifiers(Quals, PointeeType);
33323332
if (const FunctionProtoType *FPT = PointeeType->getAs<FunctionProtoType>()) {
33333333
Out << '8';
3334-
mangleName(T->getMostRecentCXXRecordDecl());
3334+
mangleName(T->getClass()->castAs<RecordType>()->getDecl());
33353335
mangleFunctionType(FPT, nullptr, true);
33363336
} else {
33373337
mangleQualifiers(PointeeType.getQualifiers(), true);
3338-
mangleName(T->getMostRecentCXXRecordDecl());
3338+
mangleName(T->getClass()->castAs<RecordType>()->getDecl());
33393339
mangleType(PointeeType, Range, QMM_Drop);
33403340
}
33413341
}
@@ -4309,11 +4309,11 @@ void MicrosoftCXXNameMangler::mangleAutoReturnType(const MemberPointerType *T,
43094309
manglePointerExtQualifiers(Quals, PointeeType);
43104310
if (const FunctionProtoType *FPT = PointeeType->getAs<FunctionProtoType>()) {
43114311
Out << '8';
4312-
mangleName(T->getMostRecentCXXRecordDecl());
4312+
mangleName(T->getClass()->castAs<RecordType>()->getDecl());
43134313
mangleFunctionType(FPT, nullptr, true);
43144314
} else {
43154315
mangleQualifiers(PointeeType.getQualifiers(), true);
4316-
mangleName(T->getMostRecentCXXRecordDecl());
4316+
mangleName(T->getClass()->castAs<RecordType>()->getDecl());
43174317
mangleAutoReturnType(PointeeType, QMM_Drop);
43184318
}
43194319
}

clang/lib/AST/Type.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2446,17 +2446,19 @@ bool Type::isIncompleteType(NamedDecl **Def) const {
24462446
// Member pointers in the MS ABI have special behavior in
24472447
// RequireCompleteType: they attach a MSInheritanceAttr to the CXXRecordDecl
24482448
// to indicate which inheritance model to use.
2449-
// The inheritance attribute might only be present on the most recent
2450-
// CXXRecordDecl.
2451-
const CXXRecordDecl *RD =
2452-
cast<MemberPointerType>(CanonicalType)->getMostRecentCXXRecordDecl();
2449+
auto *MPTy = cast<MemberPointerType>(CanonicalType);
2450+
const Type *ClassTy = MPTy->getClass();
24532451
// Member pointers with dependent class types don't get special treatment.
2454-
if (!RD)
2452+
if (ClassTy->isDependentType())
24552453
return false;
2454+
const CXXRecordDecl *RD = ClassTy->getAsCXXRecordDecl();
24562455
ASTContext &Context = RD->getASTContext();
24572456
// Member pointers not in the MS ABI don't get special treatment.
24582457
if (!Context.getTargetInfo().getCXXABI().isMicrosoft())
24592458
return false;
2459+
// The inheritance attribute might only be present on the most recent
2460+
// CXXRecordDecl, use that one.
2461+
RD = RD->getMostRecentNonInjectedDecl();
24602462
// Nothing interesting to do if the inheritance attribute is already set.
24612463
if (RD->hasAttr<MSInheritanceAttr>())
24622464
return false;
@@ -4711,8 +4713,7 @@ LinkageInfo LinkageComputer::computeTypeLinkageInfo(const Type *T) {
47114713
return computeTypeLinkageInfo(cast<ReferenceType>(T)->getPointeeType());
47124714
case Type::MemberPointer: {
47134715
const auto *MPT = cast<MemberPointerType>(T);
4714-
LinkageInfo LV =
4715-
getDeclLinkageAndVisibility(MPT->getMostRecentCXXRecordDecl());
4716+
LinkageInfo LV = computeTypeLinkageInfo(MPT->getClass());
47164717
LV.merge(computeTypeLinkageInfo(MPT->getPointeeType()));
47174718
return LV;
47184719
}
@@ -5178,10 +5179,7 @@ QualType::DestructionKind QualType::isDestructedTypeImpl(QualType type) {
51785179
}
51795180

51805181
CXXRecordDecl *MemberPointerType::getMostRecentCXXRecordDecl() const {
5181-
auto *RD = getClass()->getAsCXXRecordDecl();
5182-
if (!RD)
5183-
return nullptr;
5184-
return RD->getMostRecentNonInjectedDecl();
5182+
return getClass()->getAsCXXRecordDecl()->getMostRecentNonInjectedDecl();
51855183
}
51865184

51875185
void clang::FixedPointValueToString(SmallVectorImpl<char> &Str,

clang/lib/CodeGen/CGCXXABI.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ CGCallee CGCXXABI::EmitLoadOfMemberFunctionPointer(
5050
llvm::Value *MemPtr, const MemberPointerType *MPT) {
5151
ErrorUnsupportedABI(CGF, "calls through member pointers");
5252

53-
const auto *RD = MPT->getMostRecentCXXRecordDecl();
53+
const auto *RD =
54+
cast<CXXRecordDecl>(MPT->getClass()->castAs<RecordType>()->getDecl());
5455
ThisPtrForCall =
5556
CGF.getAsNaturalPointerTo(This, CGF.getContext().getRecordType(RD));
5657
const FunctionProtoType *FPT =
@@ -293,7 +294,7 @@ llvm::Constant *CGCXXABI::getMemberPointerAdjustment(const CastExpr *E) {
293294
derivedType = E->getType();
294295

295296
const CXXRecordDecl *derivedClass =
296-
derivedType->castAs<MemberPointerType>()->getMostRecentCXXRecordDecl();
297+
derivedType->castAs<MemberPointerType>()->getClass()->getAsCXXRecordDecl();
297298

298299
return CGM.GetNonVirtualBaseClassOffset(derivedClass,
299300
E->path_begin(),

clang/lib/CodeGen/CGClass.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,10 @@ CodeGenFunction::EmitCXXMemberDataPointerAddress(const Expr *E, Address base,
161161
QualType memberType = memberPtrType->getPointeeType();
162162
CharUnits memberAlign =
163163
CGM.getNaturalTypeAlignment(memberType, BaseInfo, TBAAInfo);
164-
memberAlign = CGM.getDynamicOffsetAlignment(
165-
base.getAlignment(), memberPtrType->getMostRecentCXXRecordDecl(),
166-
memberAlign);
164+
memberAlign =
165+
CGM.getDynamicOffsetAlignment(base.getAlignment(),
166+
memberPtrType->getClass()->getAsCXXRecordDecl(),
167+
memberAlign);
167168
return Address(ptr, ConvertTypeForMem(memberPtrType->getPointeeType()),
168169
memberAlign);
169170
}

0 commit comments

Comments
 (0)