]> granicus.if.org Git - clang/commitdiff
Allow #pragma unused to be used on global variables like gcc. Fixes rdar://8793832.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 27 Jan 2011 18:16:48 +0000 (18:16 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 27 Jan 2011 18:16:48 +0000 (18:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124383 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaAttr.cpp
test/Sema/pragma-unused.c

index 3d9d8d38bed522e8e0be78f5e6430eb52098bbd1..bd9e441a844c37303cd39b9c7594b4d59bc06b1d 100644 (file)
@@ -279,8 +279,8 @@ def warn_pragma_pack_pop_failed : Warning<"#pragma pack(pop, ...) failed: %0">;
 
 def warn_pragma_unused_undeclared_var : Warning<
   "undeclared variable %0 used as an argument for '#pragma unused'">;
-def warn_pragma_unused_expected_localvar : Warning<
-  "only local variables can be arguments to '#pragma unused'">;
+def warn_pragma_unused_expected_var_arg : Warning<
+  "only variables can be arguments to '#pragma unused'">;
 def err_unsupported_pragma_weak : Error<
   "using '#pragma weak' to refer to an undeclared identifier is not yet supported">;
 
index a67c4fbbb2296ff26404d70cb4928a838c46f14e..c983199cf910d743702e340fefa5c94bf92ba0de 100644 (file)
@@ -277,8 +277,8 @@ void Sema::ActOnPragmaUnused(const Token &IdTok, Scope *curScope,
   }
 
   VarDecl *VD = Lookup.getAsSingle<VarDecl>();
-  if (!VD || !(VD->hasLocalStorage() || VD->isStaticLocal())) {
-    Diag(PragmaLoc, diag::warn_pragma_unused_expected_localvar)
+  if (!VD) {
+    Diag(PragmaLoc, diag::warn_pragma_unused_expected_var_arg)
       << Name << SourceRange(IdTok.getLocation());
     return;
   }
index 5f379458a2146f82a015de809c6f14906bf13b60..aafac0de206d20a7664e5c715cb65472f0799c0a 100644 (file)
@@ -1,16 +1,16 @@
-// RUN: %clang_cc1 -fsyntax-only -Wunused-parameter -Wused-but-marked-unused -verify %s
+// RUN: %clang_cc1 -fsyntax-only -Wunused-parameter -Wused-but-marked-unused -Wunused -verify %s
 
 void f1(void) {
   int x, y, z;
   #pragma unused(x)
   #pragma unused(y, z)
   
-  int w; // FIXME: We should emit a warning that 'w' is unused.  
+  int w; // expected-warning {{unused}}
   #pragma unused w // expected-warning{{missing '(' after '#pragma unused' - ignoring}}
 }
 
 void f2(void) {
-  int x, y;
+  int x, y; // expected-warning {{unused}} expected-warning {{unused}}
   #pragma unused(x,) // expected-warning{{expected '#pragma unused' argument to be a variable name}}
   #pragma unused() // expected-warning{{expected '#pragma unused' argument to be a variable name}}
 }
@@ -20,15 +20,10 @@ void f3(void) {
 }
 
 void f4(void) {
-  int w; // FIXME: We should emit a warning that 'w' is unused.
+  int w; // expected-warning {{unused}}
   #pragma unused((w)) // expected-warning{{expected '#pragma unused' argument to be a variable name}}
 }
 
-int k;
-void f5(void) {
-  #pragma unused(k) // expected-warning{{only local variables can be arguments to '#pragma unused'}}
-}
-
 void f6(void) {
   int z; // no-warning
   {
@@ -64,3 +59,7 @@ int f12(int x) {
   #pragma unused(x) // expected-warning{{'x' was marked unused but was used}}
   return y;
 }
+
+// rdar://8793832
+static int glob_var = 0;
+#pragma unused(glob_var)