diff options
Diffstat (limited to 'clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp')
| -rw-r--r-- | clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp | 61 |
1 files changed, 24 insertions, 37 deletions
diff --git a/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp b/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp index 2b55820b3880..42f2d6591b21 100644 --- a/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp +++ b/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp @@ -852,7 +852,7 @@ RewriteModernObjC::getIvarAccessString(ObjCIvarDecl *D) { IvarT = GetGroupRecordTypeForObjCIvarBitfield(D); if (!IvarT->getAs<TypedefType>() && IvarT->isRecordType()) { - RecordDecl *RD = IvarT->castAs<RecordType>()->getOriginalDecl(); + RecordDecl *RD = IvarT->castAsCanonical<RecordType>()->getOriginalDecl(); RD = RD->getDefinition(); if (RD && !RD->getDeclName().getAsIdentifierInfo()) { // decltype(((Foo_IMPL*)0)->bar) * @@ -3638,8 +3638,7 @@ bool RewriteModernObjC::RewriteObjCFieldDeclType(QualType &Type, return RewriteObjCFieldDeclType(ElemTy, Result); } else if (Type->isRecordType()) { - RecordDecl *RD = - Type->castAs<RecordType>()->getOriginalDecl()->getDefinitionOrSelf(); + auto *RD = Type->castAsRecordDecl(); if (RD->isCompleteDefinition()) { if (RD->isStruct()) Result += "\n\tstruct "; @@ -3660,28 +3659,26 @@ bool RewriteModernObjC::RewriteObjCFieldDeclType(QualType &Type, Result += "\t} "; return true; } - } - else if (Type->isEnumeralType()) { - EnumDecl *ED = - Type->castAs<EnumType>()->getOriginalDecl()->getDefinitionOrSelf(); - if (ED->isCompleteDefinition()) { - Result += "\n\tenum "; - Result += ED->getName(); - if (GlobalDefinedTags.count(ED)) { - // Enum is globall defined, use it. - Result += " "; - return true; - } - - Result += " {\n"; - for (const auto *EC : ED->enumerators()) { - Result += "\t"; Result += EC->getName(); Result += " = "; - Result += toString(EC->getInitVal(), 10); - Result += ",\n"; - } - Result += "\t} "; + } else if (auto *ED = Type->getAsEnumDecl(); + ED && ED->isCompleteDefinition()) { + Result += "\n\tenum "; + Result += ED->getName(); + if (GlobalDefinedTags.count(ED)) { + // Enum is globall defined, use it. + Result += " "; return true; } + + Result += " {\n"; + for (const auto *EC : ED->enumerators()) { + Result += "\t"; + Result += EC->getName(); + Result += " = "; + Result += toString(EC->getInitVal(), 10); + Result += ",\n"; + } + Result += "\t} "; + return true; } Result += "\t"; @@ -3733,15 +3730,7 @@ void RewriteModernObjC::RewriteLocallyDefinedNamedAggregates(FieldDecl *fieldDec auto *IDecl = dyn_cast<ObjCContainerDecl>(fieldDecl->getDeclContext()); - TagDecl *TD = nullptr; - if (Type->isRecordType()) { - TD = Type->castAs<RecordType>()->getOriginalDecl()->getDefinitionOrSelf(); - } - else if (Type->isEnumeralType()) { - TD = Type->castAs<EnumType>()->getOriginalDecl()->getDefinitionOrSelf(); - } - - if (TD) { + if (auto *TD = Type->getAsTagDecl()) { if (GlobalDefinedTags.count(TD)) return; @@ -5723,10 +5712,7 @@ void RewriteModernObjC::HandleDeclInMainFile(Decl *D) { } } } else if (VD->getType()->isRecordType()) { - RecordDecl *RD = VD->getType() - ->castAs<RecordType>() - ->getOriginalDecl() - ->getDefinitionOrSelf(); + auto *RD = VD->getType()->castAsRecordDecl(); if (RD->isCompleteDefinition()) RewriteRecordBody(RD); } @@ -7467,7 +7453,8 @@ Stmt *RewriteModernObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) { IvarT = GetGroupRecordTypeForObjCIvarBitfield(D); if (!IvarT->getAs<TypedefType>() && IvarT->isRecordType()) { - RecordDecl *RD = IvarT->castAs<RecordType>()->getOriginalDecl(); + RecordDecl *RD = + IvarT->castAsCanonical<RecordType>()->getOriginalDecl(); RD = RD->getDefinition(); if (RD && !RD->getDeclName().getAsIdentifierInfo()) { // decltype(((Foo_IMPL*)0)->bar) * |
