diff --git a/clang/lib/AST/Comment.cpp b/clang/lib/AST/Comment.cpp --- a/clang/lib/AST/Comment.cpp +++ b/clang/lib/AST/Comment.cpp @@ -221,6 +221,7 @@ CurrentDecl = CommentDecl; Decl::Kind K = CommentDecl->getKind(); + const TypeSourceInfo *TSI = nullptr; switch (K) { default: // Defaults are should be good for declarations we don't handle explicitly. @@ -297,72 +298,46 @@ case Decl::EnumConstant: case Decl::ObjCIvar: case Decl::ObjCAtDefsField: - case Decl::ObjCProperty: { - const TypeSourceInfo *TSI; + case Decl::ObjCProperty: if (const auto *VD = dyn_cast(CommentDecl)) TSI = VD->getTypeSourceInfo(); else if (const auto *PD = dyn_cast(CommentDecl)) TSI = PD->getTypeSourceInfo(); - else - TSI = nullptr; - if (TSI) { - TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc(); - FunctionTypeLoc FTL; - if (getFunctionTypeLoc(TL, FTL)) { - ParamVars = FTL.getParams(); - ReturnType = FTL.getReturnLoc().getType(); - } - } Kind = VariableKind; break; - } case Decl::Namespace: Kind = NamespaceKind; break; case Decl::TypeAlias: - case Decl::Typedef: { + case Decl::Typedef: Kind = TypedefKind; - // If this is a typedef / using to something we consider a function, extract - // arguments and return type. - const TypeSourceInfo *TSI = - K == Decl::Typedef - ? cast(CommentDecl)->getTypeSourceInfo() - : cast(CommentDecl)->getTypeSourceInfo(); - if (!TSI) - break; - TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc(); - FunctionTypeLoc FTL; - if (getFunctionTypeLoc(TL, FTL)) { - Kind = FunctionKind; - ParamVars = FTL.getParams(); - ReturnType = FTL.getReturnLoc().getType(); - } + TSI = cast(CommentDecl)->getTypeSourceInfo(); break; - } case Decl::TypeAliasTemplate: { const TypeAliasTemplateDecl *TAT = cast(CommentDecl); Kind = TypedefKind; TemplateKind = Template; TemplateParameters = TAT->getTemplateParameters(); - TypeAliasDecl *TAD = TAT->getTemplatedDecl(); - if (!TAD) - break; + if (TypeAliasDecl *TAD = TAT->getTemplatedDecl()) + TSI = TAD->getTypeSourceInfo(); + break; + } + case Decl::Enum: + Kind = EnumKind; + break; + } - const TypeSourceInfo *TSI = TAD->getTypeSourceInfo(); - if (!TSI) - break; + // If the type is a typedef / using to something we consider a function, + // extract arguments and return type. + if (TSI) { TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc(); FunctionTypeLoc FTL; if (getFunctionTypeLoc(TL, FTL)) { - Kind = FunctionKind; + if (Kind == TypedefKind) + Kind = FunctionKind; ParamVars = FTL.getParams(); ReturnType = FTL.getReturnLoc().getType(); } - break; - } - case Decl::Enum: - Kind = EnumKind; - break; } IsFilled = true;