Author: arphaman Date: Fri Oct 6 13:51:04 2017 New Revision: 315103 URL: http://llvm.org/viewvc/llvm-project?rev=315103&view=rev Log: -Wdocumentation should allow '...' params in variadic function type aliases
rdar://34811344 Modified: cfe/trunk/lib/AST/CommentSema.cpp cfe/trunk/test/Sema/warn-documentation.cpp cfe/trunk/test/Sema/warn-documentation.m Modified: cfe/trunk/lib/AST/CommentSema.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/CommentSema.cpp?rev=315103&r1=315102&r2=315103&view=diff ============================================================================== --- cfe/trunk/lib/AST/CommentSema.cpp (original) +++ cfe/trunk/lib/AST/CommentSema.cpp Fri Oct 6 13:51:04 2017 @@ -813,7 +813,7 @@ bool Sema::isAnyFunctionDecl() { } bool Sema::isFunctionOrMethodVariadic() { - if (!isAnyFunctionDecl() && !isObjCMethodDecl() && !isFunctionTemplateDecl()) + if (!isFunctionDecl() || !ThisDeclInfo->CurrentDecl) return false; if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ThisDeclInfo->CurrentDecl)) @@ -824,6 +824,14 @@ bool Sema::isFunctionOrMethodVariadic() if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(ThisDeclInfo->CurrentDecl)) return MD->isVariadic(); + if (const TypedefNameDecl *TD = + dyn_cast<TypedefNameDecl>(ThisDeclInfo->CurrentDecl)) { + QualType Type = TD->getUnderlyingType(); + if (Type->isFunctionPointerType() || Type->isBlockPointerType()) + Type = Type->getPointeeType(); + if (const auto *FT = Type->getAs<FunctionProtoType>()) + return FT->isVariadic(); + } return false; } Modified: cfe/trunk/test/Sema/warn-documentation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-documentation.cpp?rev=315103&r1=315102&r2=315103&view=diff ============================================================================== --- cfe/trunk/test/Sema/warn-documentation.cpp (original) +++ cfe/trunk/test/Sema/warn-documentation.cpp Fri Oct 6 13:51:04 2017 @@ -1282,3 +1282,25 @@ struct HasMoreFields { }; } + +/*! + * Function pointer typedef with variadic params. + * + * @param a + * works + * + * @param ... + * now should work too. + */ +typedef void (*VariadicFnType)(int a, ...); + +/*! + * Function pointer type alias with variadic params. + * + * @param a + * works + * + * @param ... + * now should work too. + */ +using VariadicFnType2 = void (*)(int a, ...); Modified: cfe/trunk/test/Sema/warn-documentation.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-documentation.m?rev=315103&r1=315102&r2=315103&view=diff ============================================================================== --- cfe/trunk/test/Sema/warn-documentation.m (original) +++ cfe/trunk/test/Sema/warn-documentation.m Fri Oct 6 13:51:04 2017 @@ -299,3 +299,14 @@ void (^_Nullable blockPointerVariableTha @property void (^blockReturnsNothing)(); @end + +/*! + * Block typedef with variadic params. + * + * @param a + * works + * + * @param ... + * now should work too. + */ +typedef void (^VariadicBlockType)(int a, ...); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits