[cfe-commits] r163329 - in /cfe/trunk: lib/Sema/SemaExpr.cpp test/Sema/warn-unused-function.c

jahanian fjahanian at apple.com
Thu Sep 6 10:33:03 PDT 2012


On Sep 6, 2012, at 10:28 AM, Ted Kremenek wrote:

> Hi Fariborz,
> 
> I see logic here that special cases for Objective-C categories, but no test case for that bit.  Is that already covered by an existing test?
No, I cut-and-pasted from similar code for other attributes. I will add a test case.

-- Fariborz

> 
> Ted
> 
> On Sep 6, 2012, at 9:43 AM, Fariborz Jahanian <fjahanian at apple.com> wrote:
> 
>> Author: fjahanian
>> Date: Thu Sep  6 11:43:18 2012
>> New Revision: 163329
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=163329&view=rev
>> Log:
>> c: make __attribute__((unused)) transitive.
>>  Don't warn if annotated decl is used inside another
>>  unused. // rdar://12233989
>> 
>> Modified:
>>   cfe/trunk/lib/Sema/SemaExpr.cpp
>>   cfe/trunk/test/Sema/warn-unused-function.c
>> 
>> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=163329&r1=163328&r2=163329&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Thu Sep  6 11:43:18 2012
>> @@ -66,6 +66,18 @@
>>  return true;
>> }
>> 
>> +static void DiagnoseUnusedOfDecl(Sema &S, NamedDecl *D, SourceLocation Loc) {
>> +  // Warn if this is used but marked unused.
>> +  if (D->hasAttr<UnusedAttr>()) {
>> +    const Decl *DC = cast<Decl>(S.getCurLexicalContext());
>> +    // A category implicitly has the availability of the interface.
>> +    if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(DC))
>> +      DC = CatD->getClassInterface();
>> +    if (!DC->hasAttr<UnusedAttr>())
>> +      S.Diag(Loc, diag::warn_used_but_marked_unused) << D->getDeclName();
>> +  }
>> +}
>> +
>> static AvailabilityResult DiagnoseAvailabilityOfDecl(Sema &S,
>>                              NamedDecl *D, SourceLocation Loc,
>>                              const ObjCInterfaceDecl *UnknownObjCClass) {
>> @@ -250,9 +262,7 @@
>>  }
>>  DiagnoseAvailabilityOfDecl(*this, D, Loc, UnknownObjCClass);
>> 
>> -  // Warn if this is used but marked unused.
>> -  if (D->hasAttr<UnusedAttr>())
>> -    Diag(Loc, diag::warn_used_but_marked_unused) << D->getDeclName();
>> +  DiagnoseUnusedOfDecl(*this, D, Loc);
>> 
>>  diagnoseUseOfInternalDeclInInlineFunction(*this, D, Loc);
>> 
>> 
>> Modified: cfe/trunk/test/Sema/warn-unused-function.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-unused-function.c?rev=163329&r1=163328&r2=163329&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/Sema/warn-unused-function.c (original)
>> +++ cfe/trunk/test/Sema/warn-unused-function.c Thu Sep  6 11:43:18 2012
>> @@ -1,4 +1,4 @@
>> -// RUN: %clang_cc1 -fsyntax-only -Wunused-function -Wunneeded-internal-declaration -verify %s
>> +// RUN: %clang_cc1 -fsyntax-only -Wused-but-marked-unused -Wunused-function -Wunneeded-internal-declaration -verify %s
>> // RUN: %clang_cc1 -fsyntax-only -verify -Wunused %s
>> // RUN: %clang_cc1 -fsyntax-only -verify -Wall %s
>> 
>> @@ -54,3 +54,15 @@
>>  char * const __attribute__((cleanup(cleanupMalloc))) a;
>>  (void)a;
>> }
>> +
>> +// rdar://12233989
>> +extern void a(void) __attribute__((unused));
>> +extern void b(void) __attribute__((unused));
>> +
>> +void b(void)
>> +{
>> +}
>> +void a(void)
>> +{
>> +  b();
>> +}
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 




More information about the cfe-commits mailing list