diff options
author | Francois Pichet <pichet2000@gmail.com> | 2011-04-22 08:14:00 +0000 |
---|---|---|
committer | Francois Pichet <pichet2000@gmail.com> | 2011-04-22 08:14:00 +0000 |
commit | e900b10a2929b1ea473a0e28f594613d9a075ed9 (patch) | |
tree | 8e737e07ca6d86bc15743b4f3e08948b8df234de | |
parent | ae95ad1935b7f52360c6a77031efd180f2554eec (diff) | |
download | bcm5719-llvm-e900b10a2929b1ea473a0e28f594613d9a075ed9.tar.gz bcm5719-llvm-e900b10a2929b1ea473a0e28f594613d9a075ed9.zip |
Downgrade error "static declaration of 'foo' follows non-static declaration" to a warning in Microsoft mode.
llvm-svn: 129985
-rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 2 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 6 | ||||
-rw-r--r-- | clang/test/SemaCXX/MicrosoftExtensions.cpp | 12 |
3 files changed, 18 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index b72ef6fed55..6e2a50fa8aa 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -2124,6 +2124,8 @@ def err_inline_declaration_block_scope : Error< "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< diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 73f25a95c6d..4e31d03e0e9 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -1258,8 +1258,10 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD) { 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; } diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp index c2a32b4c407..2d620b6da62 100644 --- a/clang/test/SemaCXX/MicrosoftExtensions.cpp +++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp @@ -167,4 +167,16 @@ public: Base3::TYPE a6; // expected-error {{missing 'typename' prior to dependent type name}} }; +} + + + + +extern void static_func(); +void static_func(); // expected-note {{previous declaration is here}} + + +static void static_func() // expected-warning {{static declaration of 'static_func' follows non-static declaration}} +{ + }
\ No newline at end of file |