diff options
Diffstat (limited to 'clang/lib/CodeGen/Targets/LoongArch.cpp')
| -rw-r--r-- | clang/lib/CodeGen/Targets/LoongArch.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/clang/lib/CodeGen/Targets/LoongArch.cpp b/clang/lib/CodeGen/Targets/LoongArch.cpp index af863e6101e2..1f344d658251 100644 --- a/clang/lib/CodeGen/Targets/LoongArch.cpp +++ b/clang/lib/CodeGen/Targets/LoongArch.cpp @@ -149,7 +149,7 @@ bool LoongArchABIInfo::detectFARsEligibleStructHelper( QualType EltTy = ATy->getElementType(); // Non-zero-length arrays of empty records make the struct ineligible to be // passed via FARs in C++. - if (const auto *RTy = EltTy->getAs<RecordType>()) { + if (const auto *RTy = EltTy->getAsCanonical<RecordType>()) { if (ArraySize != 0 && isa<CXXRecordDecl>(RTy->getOriginalDecl()) && isEmptyRecord(getContext(), EltTy, true, true)) return false; @@ -164,7 +164,7 @@ bool LoongArchABIInfo::detectFARsEligibleStructHelper( return true; } - if (const auto *RTy = Ty->getAs<RecordType>()) { + if (const auto *RTy = Ty->getAsCanonical<RecordType>()) { // Structures with either a non-trivial destructor or a non-trivial // copy constructor are not eligible for the FP calling convention. if (getRecordArgABI(Ty, CGT.getCXXABI())) @@ -180,10 +180,7 @@ bool LoongArchABIInfo::detectFARsEligibleStructHelper( // If this is a C++ record, check the bases first. if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) { for (const CXXBaseSpecifier &B : CXXRD->bases()) { - const auto *BDecl = - cast<CXXRecordDecl>( - B.getType()->castAs<RecordType>()->getOriginalDecl()) - ->getDefinitionOrSelf(); + const auto *BDecl = B.getType()->castAsCXXRecordDecl(); if (!detectFARsEligibleStructHelper( B.getType(), CurOff + Layout.getBaseClassOffset(BDecl), Field1Ty, Field1Off, Field2Ty, Field2Off)) @@ -370,8 +367,8 @@ ABIArgInfo LoongArchABIInfo::classifyArgumentType(QualType Ty, bool IsFixed, if (!isAggregateTypeForABI(Ty) && !Ty->isVectorType()) { // Treat an enum type as its underlying type. - if (const EnumType *EnumTy = Ty->getAs<EnumType>()) - Ty = EnumTy->getOriginalDecl()->getDefinitionOrSelf()->getIntegerType(); + if (const auto *ED = Ty->getAsEnumDecl()) + Ty = ED->getIntegerType(); // All integral types are promoted to GRLen width. if (Size < GRLen && Ty->isIntegralOrEnumerationType()) |
