[cfe-commits] r162507 - in /cfe/trunk: include/clang/AST/Comment.h lib/AST/Comment.cpp test/Sema/warn-documentation.cpp test/Sema/warn-documentation.m
Dmitri Gribenko
gribozavr at gmail.com
Sat Sep 15 14:15:25 PDT 2012
On Sat, Aug 25, 2012 at 6:49 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Fri, Aug 24, 2012 at 8:47 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
>> On Thu, Aug 23, 2012 at 5:05 PM, Dmitri Gribenko <gribozavr at gmail.com> wrote:
>>> Author: gribozavr
>>> Date: Thu Aug 23 19:05:30 2012
>>> New Revision: 162507
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=162507&view=rev
>>> Log:
>>> Comment semantic analysis: treat function typedefs as functions so that one can
>>> use \param and \returns in documentation.
>>>
>>> Fixes PR13533.
>>>
>>> Modified:
>>> cfe/trunk/include/clang/AST/Comment.h
>>> cfe/trunk/lib/AST/Comment.cpp
>>> cfe/trunk/test/Sema/warn-documentation.cpp
>>> cfe/trunk/test/Sema/warn-documentation.m
>>>
>>> Modified: cfe/trunk/include/clang/AST/Comment.h
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Comment.h?rev=162507&r1=162506&r2=162507&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/AST/Comment.h (original)
>>> +++ cfe/trunk/include/clang/AST/Comment.h Thu Aug 23 19:05:30 2012
>>> @@ -942,7 +942,9 @@
>>> /// \li member function,
>>> /// \li member function template,
>>> /// \li member function template specialization,
>>> - /// \li ObjC method.
>>> + /// \li ObjC method,
>>> + /// \li a typedef for a function pointer, member function pointer,
>>> + /// ObjC block.
>>> FunctionKind,
>>>
>>> /// Something that we consider a "class":
>>>
>>> Modified: cfe/trunk/lib/AST/Comment.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Comment.cpp?rev=162507&r1=162506&r2=162507&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/AST/Comment.cpp (original)
>>> +++ cfe/trunk/lib/AST/Comment.cpp Thu Aug 23 19:05:30 2012
>>> @@ -240,7 +240,58 @@
>>> case Decl::Namespace:
>>> Kind = NamespaceKind;
>>> break;
>>> - case Decl::Typedef:
>>> + case Decl::Typedef: {
>>> + Kind = TypedefKind;
>>> + // If this is a typedef to something we consider a function, extract
>>> + // arguments and return type.
>>> + const TypedefDecl *TD = cast<TypedefDecl>(ThisDecl);
>>> + const TypeSourceInfo *TSI = TD->getTypeSourceInfo();
>>> + if (!TSI)
>>> + break;
>>> + TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc();
>>> + while (true) {
>>> + TL = TL.IgnoreParens();
>>> + // Look through typedefs.
>>> + if (TypedefTypeLoc *TypedefTL = dyn_cast<TypedefTypeLoc>(&TL)) {
>>> + TSI = TypedefTL->getTypedefNameDecl()->getTypeSourceInfo();
>>> + if (TSI)
>>> + break;
>>> + TL = TSI->getTypeLoc().getUnqualifiedLoc();
>>> + continue;
>>> + }
>>
>> Do we really want to look through typedefs? We don't want to allow
>> doc comments on "typedef foo bar;" just because foo happens to be a
>> function type.
>
> That wasn't clearly stated; let me try again:
>
> Do we really want to look through typedefs? Given "typedef foo bar;",
> we don't want to allow a doc comment on bar to refer a parameter from
> the definition of the typedef foo (which could be anywhere).
Thanks for noticing! Fixed in r163985.
Dmitri
--
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
More information about the cfe-commits
mailing list