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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits