On Dec 6, 2010, at 10:06 AM, Argyrios Kyrtzidis wrote:

> On Dec 5, 2010, at 8:33 PM, John McCall wrote:
> 
>> 
>> On Dec 3, 2010, at 5:12 PM, Argyrios Kyrtzidis wrote:
>> 
>>> Author: akirtzidis
>>> Date: Fri Dec  3 19:12:11 2010
>>> New Revision: 120872
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=120872&view=rev
>>> Log:
>>> Mark functions referenced by 'cleanup' attribute as used. Fixes 
>>> rdar://8728293
>> 
>>> 
>>> Modified:
>>>  cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>>>  cfe/trunk/test/Sema/warn-unused-function.c
>>> 
>>> Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=120872&r1=120871&r2=120872&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
>>> +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Fri Dec  3 19:12:11 2010
>>> @@ -1450,6 +1450,7 @@
>>> }
>>> 
>>> d->addAttr(::new (S.Context) CleanupAttr(Attr.getLoc(), S.Context, FD));
>>> +  FD->setUsed();
>>> }
>> 
>> Technically, you can use __attribute__((cleanup)) inside a template.  This 
>> should use MarkDeclarationReferenced, and then there should be special 
>> instantiation logic for the attribute.
> 
> Hmm, is this really the right approach ? If it's referenced from a template 
> which is not instantiated, it's not used from the codegen perspective but how 
> about from the user's perspective:
> 
> -We emit a warning that the function 'foo' is unused.
> -User removes function 'foo'
> -Now we emit an error that 'foo' is not found.

Oh, you mean if a function is referenced from a template definition that's 
never instantiated?  Yeah, that's a valid user complaint.  That's not specific 
to attribute((cleanup)), though;  any reference without dependent ADL will have 
that issue.

John.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to