When I updated -Wformat to works with NSString methods, I had to include a 
similar workaround for NSLocalizedString.
At that time, I wasn't aware of the existence of isInSystemMacro().

I wrote a patch to use this method instead of disabling the warning in all 
macros in my existing workaround, 
and wrote a test that check for both NSLocalizedString and NSAssert cases.

If you're OK with this patch, I will commit it.

Le 3 mai 2012 à 21:47, Bob Wilson a écrit :

> Author: bwilson
> Date: Thu May  3 14:47:19 2012
> New Revision: 156092
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=156092&view=rev
> Log:
> Disable -Wformat-extra-args for arguments defined in system headers.
> 
> Some of the NSAssert macros in OS X 10.7 are implemented in a way that
> adds extra arguments that trigger the -Wformat-extra-args warning.
> Earlier versions of clang failed to detect those -Wformat issues, but now
> that clang is reporting those problems, we need to quiet them since there's
> nothing to be done to fix them.  <rdar://problem/11317765>
> 
> I don't know how to write a testcase for this.  Suggestions welcome.
> Patch by Ted Kremenek!
> 
> Modified:
>    cfe/trunk/lib/Sema/SemaChecking.cpp
> 
> Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=156092&r1=156091&r2=156092&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaChecking.cpp Thu May  3 14:47:19 2012
> @@ -1975,9 +1975,12 @@
>     signed notCoveredArg = CoveredArgs.find_first();
>     if (notCoveredArg >= 0) {
>       assert((unsigned)notCoveredArg < NumDataArgs);
> -      EmitFormatDiagnostic(S.PDiag(diag::warn_printf_data_arg_not_used),
> -                           getDataArg((unsigned) 
> notCoveredArg)->getLocStart(),
> -                           /*IsStringLocation*/false, 
> getFormatStringRange());
> +      SourceLocation Loc = getDataArg((unsigned) 
> notCoveredArg)->getLocStart();
> +      if (!S.getSourceManager().isInSystemMacro(Loc)) {
> +        EmitFormatDiagnostic(S.PDiag(diag::warn_printf_data_arg_not_used),
> +                             Loc,
> +                             /*IsStringLocation*/false, 
> getFormatStringRange());
> +      }
>     }
>   }
> }
> 
> 
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- Jean-Daniel



Attachment: system.patch
Description: Binary data

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

Reply via email to