[cfe-commits] r129985 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDecl.cpp test/SemaCXX/MicrosoftExtensions.cpp
Eli Friedman
eli.friedman at gmail.com
Fri Apr 22 08:24:56 PDT 2011
On Fri, Apr 22, 2011 at 1:14 AM, Francois Pichet <pichet2000 at gmail.com> wrote:
> Author: fpichet
> Date: Fri Apr 22 03:14:00 2011
> New Revision: 129985
>
> URL: http://llvm.org/viewvc/llvm-project?rev=129985&view=rev
> Log:
> Downgrade error "static declaration of 'foo' follows non-static declaration" to a warning in Microsoft mode.
>
> Modified:
> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> cfe/trunk/lib/Sema/SemaDecl.cpp
> cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=129985&r1=129984&r2=129985&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Apr 22 03:14:00 2011
> @@ -2124,6 +2124,8 @@
> "inline declaration of %0 not allowed in block scope">;
> def err_static_non_static : Error<
> "static declaration of %0 follows non-static declaration">;
> +def warn_static_non_static : ExtWarn<
> + "static declaration of %0 follows non-static declaration">;
> def err_non_static_static : Error<
> "non-static declaration of %0 follows static declaration">;
> def err_extern_non_extern : Error<
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=129985&r1=129984&r2=129985&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Apr 22 03:14:00 2011
> @@ -1258,8 +1258,10 @@
> New->getStorageClass() == SC_Static &&
> Old->getStorageClass() != SC_Static &&
> !canRedefineFunction(Old, getLangOptions())) {
> - Diag(New->getLocation(), diag::err_static_non_static)
> - << New;
> + unsigned DiagID = diag::err_static_non_static;
> + if (getLangOptions().Microsoft)
> + DiagID = diag::warn_static_non_static;
> + Diag(New->getLocation(), DiagID) << New;
> Diag(Old->getLocation(), PrevDiag);
> return true;
> }
You can't just "return true" in the non-error case; some sort of
recovery is required.
-Eli
More information about the cfe-commits
mailing list