[PATCH] D66706: [Wdocumentation] fixes an assertion failure with typedefed function and block pointer

Dmitri Gribenko via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 30 11:52:23 PDT 2019


gribozavr added inline comments.


================
Comment at: clang/lib/AST/Comment.cpp:151
+static bool getFunctionTypeLoc(TypeLoc TL, FunctionTypeLoc &ResFTL,
+                               bool testTypedefTypeLoc = false) {
   TypeLoc PrevTL;
----------------
Mordante wrote:
> gribozavr wrote:
> > Mordante wrote:
> > > gribozavr wrote:
> > > > Why is the new functionality turned off sometimes? It seems to me that we always want to look through typedefs.
> > > Setting `testTypedefTypeLoc` to `true` breaks a unit test in `test/Sema/warn-documentation.cpp:358`
> > > 
> > > ```
> > > typedef int (*test_not_function_like_typedef1)(int aaa);
> > > 
> > > // expected-warning at +1 {{'\param' command used in a comment that is not attached to a function declaration}}
> > > /// \param aaa Meow.                                                            
> > > typedef test_not_function_like_typedef1 test_not_function_like_typedef2;
> > > ```
> > > and its corresponding test using a `using` instead of `typedef`. This has been introduced in:
> > > ```
> > > commit 49fdf8d3f5e114e6f8b49fde29a30b0eaaa3c5dd
> > > Author: Dmitri Gribenko <gribozavr at gmail.com>
> > > Date:   Sat Sep 15 21:13:36 2012 +0000
> > > 
> > >     Comment parsing: don't treat typedef to a typedef to a function as a
> > >     'function-like' type that can be annotated with \param.
> > >     
> > >     Thanks to Eli Friedman for noticing!
> > >     
> > >     llvm-svn: 163985
> > > 
> > > ```
> > > I'm not sure whether or not we should allow this typedef documentation. I just tested with Doxygen. It doesn't complain and shows the parameter documentation for `test_not_function_like_typedef2`. So on that basis we could remove this `expected-warning` and `testTypedefTypeLoc`.
> > > 
> > > What do you think?
> > Thanks for the explanation. I can't find the context for that decision, and the commit description does not explain the reason either.
> > 
> > It is really a policy decision -- when introducing a comment for function return value and arguments, should the declaration include the said return value and arguments, or can they be visible through a typedef?
> > 
> > Thinking about it, my inclination is to say that comments for the return value and arguments should be present on the declaration that introduces them. Otherwise, it is breaking an abstraction barrier.
> > 
> > WDYT?
> (I just noticed I forgot to submit this comment.)
> 
> I tend to agree. However Doxygen accepts the code, but Doxygen doesn't seem to validate whether parameters exist.
> So I wonder whether we do our users a service by warning about code that Doxygen properly handles. On that basis I think we can allow it.
> 
> We could add an extra warning in the pedantic group and let the user decide whether or not she thinks it warrants a warning.
> 
> I think that would be the best solution: accept the comment but allow the user to opt-in on a warning.
Doxygen and C++ both allow a lot of dubious stuff. That can't be a reason to avoid producing a warning -- we would have no warnings if that was the bar.

I think what we should discuss is, what is the use case for adding a `\returns` command in this position -- and how is documenting parameters not a use case. If there is a valid use case, how common it is in real world.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66706/new/

https://reviews.llvm.org/D66706





More information about the cfe-commits mailing list