@@ -180,11 +180,7 @@ CharUnits CodeGenModule::computeNonVirtualBaseClassOffset(
180180 // Get the layout.
181181 const ASTRecordLayout &Layout = Context.getASTRecordLayout (RD);
182182
183- const auto *BaseDecl =
184- cast<CXXRecordDecl>(
185- Base->getType ()->castAs <RecordType>()->getOriginalDecl ())
186- ->getDefinitionOrSelf ();
187-
183+ const auto *BaseDecl = Base->getType ()->castAsCXXRecordDecl ();
188184 // Add the offset.
189185 Offset += Layout.getBaseClassOffset (BaseDecl);
190186
@@ -302,9 +298,7 @@ Address CodeGenFunction::GetAddressOfBaseClass(
302298 // *start* with a step down to the correct virtual base subobject,
303299 // and hence will not require any further steps.
304300 if ((*Start)->isVirtual ()) {
305- VBase = cast<CXXRecordDecl>(
306- (*Start)->getType ()->castAs <RecordType>()->getOriginalDecl ())
307- ->getDefinitionOrSelf ();
301+ VBase = (*Start)->getType ()->castAsCXXRecordDecl ();
308302 ++Start;
309303 }
310304
@@ -559,10 +553,7 @@ static void EmitBaseInitializer(CodeGenFunction &CGF,
559553
560554 Address ThisPtr = CGF.LoadCXXThisAddress ();
561555
562- const Type *BaseType = BaseInit->getBaseClass ();
563- const auto *BaseClassDecl =
564- cast<CXXRecordDecl>(BaseType->castAs <RecordType>()->getOriginalDecl ())
565- ->getDefinitionOrSelf ();
556+ const auto *BaseClassDecl = BaseInit->getBaseClass ()->castAsCXXRecordDecl ();
566557
567558 bool isBaseVirtual = BaseInit->isBaseVirtual ();
568559
@@ -1267,10 +1258,7 @@ namespace {
12671258
12681259static bool isInitializerOfDynamicClass (const CXXCtorInitializer *BaseInit) {
12691260 const Type *BaseType = BaseInit->getBaseClass ();
1270- const auto *BaseClassDecl =
1271- cast<CXXRecordDecl>(BaseType->castAs <RecordType>()->getOriginalDecl ())
1272- ->getDefinitionOrSelf ();
1273- return BaseClassDecl->isDynamicClass ();
1261+ return BaseType->castAsCXXRecordDecl ()->isDynamicClass ();
12741262}
12751263
12761264// / EmitCtorPrologue - This routine generates necessary code to initialize
@@ -1377,10 +1365,7 @@ HasTrivialDestructorBody(ASTContext &Context,
13771365 if (I.isVirtual ())
13781366 continue ;
13791367
1380- const CXXRecordDecl *NonVirtualBase =
1381- cast<CXXRecordDecl>(
1382- I.getType ()->castAs <RecordType>()->getOriginalDecl ())
1383- ->getDefinitionOrSelf ();
1368+ const auto *NonVirtualBase = I.getType ()->castAsCXXRecordDecl ();
13841369 if (!HasTrivialDestructorBody (Context, NonVirtualBase,
13851370 MostDerivedClassDecl))
13861371 return false ;
@@ -1389,10 +1374,7 @@ HasTrivialDestructorBody(ASTContext &Context,
13891374 if (BaseClassDecl == MostDerivedClassDecl) {
13901375 // Check virtual bases.
13911376 for (const auto &I : BaseClassDecl->vbases ()) {
1392- const auto *VirtualBase =
1393- cast<CXXRecordDecl>(
1394- I.getType ()->castAs <RecordType>()->getOriginalDecl ())
1395- ->getDefinitionOrSelf ();
1377+ const auto *VirtualBase = I.getType ()->castAsCXXRecordDecl ();
13961378 if (!HasTrivialDestructorBody (Context, VirtualBase,
13971379 MostDerivedClassDecl))
13981380 return false ;
@@ -1408,13 +1390,10 @@ FieldHasTrivialDestructorBody(ASTContext &Context,
14081390{
14091391 QualType FieldBaseElementType = Context.getBaseElementType (Field->getType ());
14101392
1411- const RecordType *RT = FieldBaseElementType->getAs <RecordType> ();
1412- if (!RT )
1393+ auto *FieldClassDecl = FieldBaseElementType->getAsCXXRecordDecl ();
1394+ if (!FieldClassDecl )
14131395 return true ;
14141396
1415- auto *FieldClassDecl =
1416- cast<CXXRecordDecl>(RT->getOriginalDecl ())->getDefinitionOrSelf ();
1417-
14181397 // The destructor for an implicit anonymous union member is never invoked.
14191398 if (FieldClassDecl->isUnion () && FieldClassDecl->isAnonymousStructOrUnion ())
14201399 return true ;
@@ -1907,11 +1886,7 @@ void CodeGenFunction::EnterDtorCleanups(const CXXDestructorDecl *DD,
19071886 // We push them in the forward order so that they'll be popped in
19081887 // the reverse order.
19091888 for (const auto &Base : ClassDecl->vbases ()) {
1910- auto *BaseClassDecl =
1911- cast<CXXRecordDecl>(
1912- Base.getType ()->castAs <RecordType>()->getOriginalDecl ())
1913- ->getDefinitionOrSelf ();
1914-
1889+ auto *BaseClassDecl = Base.getType ()->castAsCXXRecordDecl ();
19151890 if (BaseClassDecl->hasTrivialDestructor ()) {
19161891 // Under SanitizeMemoryUseAfterDtor, poison the trivial base class
19171892 // memory. For non-trival base classes the same is done in the class
@@ -2130,10 +2105,7 @@ void CodeGenFunction::EmitCXXAggrConstructorCall(const CXXConstructorDecl *ctor,
21302105void CodeGenFunction::destroyCXXObject (CodeGenFunction &CGF,
21312106 Address addr,
21322107 QualType type) {
2133- const RecordType *rtype = type->castAs <RecordType>();
2134- const auto *record =
2135- cast<CXXRecordDecl>(rtype->getOriginalDecl ())->getDefinitionOrSelf ();
2136- const CXXDestructorDecl *dtor = record->getDestructor ();
2108+ const CXXDestructorDecl *dtor = type->castAsCXXRecordDecl ()->getDestructor ();
21372109 assert (!dtor->isTrivial ());
21382110 CGF.EmitCXXDestructorCall (dtor, Dtor_Complete, /* for vbase*/ false ,
21392111 /* Delegating=*/ false , addr, type);
@@ -2652,10 +2624,7 @@ void CodeGenFunction::getVTablePointers(BaseSubobject Base,
26522624
26532625 // Traverse bases.
26542626 for (const auto &I : RD->bases ()) {
2655- auto *BaseDecl = cast<CXXRecordDecl>(
2656- I.getType ()->castAs <RecordType>()->getOriginalDecl ())
2657- ->getDefinitionOrSelf ();
2658-
2627+ auto *BaseDecl = I.getType ()->castAsCXXRecordDecl ();
26592628 // Ignore classes without a vtable.
26602629 if (!BaseDecl->isDynamicClass ())
26612630 continue ;
@@ -2850,13 +2819,10 @@ void CodeGenFunction::EmitVTablePtrCheckForCast(QualType T, Address Derived,
28502819 if (!getLangOpts ().CPlusPlus )
28512820 return ;
28522821
2853- auto *ClassTy = T->getAs <RecordType> ();
2854- if (!ClassTy )
2822+ const auto *ClassDecl = T->getAsCXXRecordDecl ();
2823+ if (!ClassDecl )
28552824 return ;
28562825
2857- const auto *ClassDecl =
2858- cast<CXXRecordDecl>(ClassTy->getOriginalDecl ())->getDefinitionOrSelf ();
2859-
28602826 if (!ClassDecl->isCompleteDefinition () || !ClassDecl->isDynamicClass ())
28612827 return ;
28622828
0 commit comments