aaronpuchert created this revision. aaronpuchert added reviewers: gribozavr2, Mordante. aaronpuchert requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
We were doing this already for type aliases, and it deduplicates the code looking through aliases and pointers to find a function type. As a side effect, this finds two warnings that we apparently missed before. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D111264 Files: clang/include/clang/AST/CommentSema.h clang/lib/AST/Comment.cpp clang/lib/AST/CommentSema.cpp clang/test/Sema/warn-documentation.cpp clang/test/Sema/warn-documentation.m
Index: clang/test/Sema/warn-documentation.m =================================================================== --- clang/test/Sema/warn-documentation.m +++ clang/test/Sema/warn-documentation.m @@ -248,6 +248,7 @@ int (^blockPointerFields)(int i); }; +// expected-warning@+5 {{parameter 'p' not found in the function declaration}} // expected-warning@+5 {{'\returns' command used in a comment that is attached to a function returning void}} /** * functionPointerVariable Index: clang/test/Sema/warn-documentation.cpp =================================================================== --- clang/test/Sema/warn-documentation.cpp +++ clang/test/Sema/warn-documentation.cpp @@ -1333,6 +1333,7 @@ int (*functionPointerField)(int i); }; +// expected-warning@+5 {{parameter 'p' not found in the function declaration}} // expected-warning@+5 {{'\returns' command used in a comment that is attached to a function returning void}} /** * functionPointerVariable Index: clang/lib/AST/CommentSema.cpp =================================================================== --- clang/lib/AST/CommentSema.cpp +++ clang/lib/AST/CommentSema.cpp @@ -86,7 +86,7 @@ new (Allocator) ParamCommandComment(LocBegin, LocEnd, CommandID, CommandMarker); - if (!isFunctionDecl() && !isFunctionOrBlockPointerVarLikeDecl()) + if (!isFunctionDecl()) Diag(Command->getLocation(), diag::warn_doc_param_not_attached_to_a_function_decl) << CommandMarker @@ -590,7 +590,7 @@ // to document the value that the property getter returns. if (isObjCPropertyDecl()) return; - if (isFunctionDecl() || isFunctionOrBlockPointerVarLikeDecl()) { + if (isFunctionDecl()) { assert(!ThisDeclInfo->ReturnType.isNull() && "should have a valid return type"); if (ThisDeclInfo->ReturnType->isVoidType()) { @@ -873,36 +873,6 @@ return false; } -bool Sema::isFunctionOrBlockPointerVarLikeDecl() { - if (!ThisDeclInfo) - return false; - if (!ThisDeclInfo->IsFilled) - inspectThisDecl(); - if (ThisDeclInfo->getKind() != DeclInfo::VariableKind || - !ThisDeclInfo->CurrentDecl) - return false; - QualType QT; - if (const auto *VD = dyn_cast<DeclaratorDecl>(ThisDeclInfo->CurrentDecl)) - QT = VD->getType(); - else if (const auto *PD = - dyn_cast<ObjCPropertyDecl>(ThisDeclInfo->CurrentDecl)) - QT = PD->getType(); - else - return false; - // We would like to warn about the 'returns'/'param' commands for - // variables that don't directly specify the function type, so type aliases - // can be ignored. - if (QT->getAs<TypedefType>()) - return false; - if (const auto *P = QT->getAs<PointerType>()) - if (P->getPointeeType()->getAs<TypedefType>()) - return false; - if (const auto *P = QT->getAs<BlockPointerType>()) - if (P->getPointeeType()->getAs<TypedefType>()) - return false; - return QT->isFunctionPointerType() || QT->isBlockPointerType(); -} - bool Sema::isObjCPropertyDecl() { if (!ThisDeclInfo) return false; Index: clang/lib/AST/Comment.cpp =================================================================== --- clang/lib/AST/Comment.cpp +++ clang/lib/AST/Comment.cpp @@ -333,8 +333,7 @@ TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc(); FunctionTypeLoc FTL; if (getFunctionTypeLoc(TL, FTL)) { - if (Kind == TypedefKind) - Kind = FunctionKind; + Kind = FunctionKind; ParamVars = FTL.getParams(); ReturnType = FTL.getReturnLoc().getType(); } Index: clang/include/clang/AST/CommentSema.h =================================================================== --- clang/include/clang/AST/CommentSema.h +++ clang/include/clang/AST/CommentSema.h @@ -207,10 +207,6 @@ /// \returns \c true if declaration that this comment is attached to declares /// a function pointer. bool isFunctionPointerVarDecl(); - /// \returns \c true if the declaration that this comment is attached to - /// declares a variable or a field whose type is a function or a block - /// pointer. - bool isFunctionOrBlockPointerVarLikeDecl(); bool isFunctionOrMethodVariadic(); bool isObjCMethodDecl(); bool isObjCPropertyDecl();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits