From f95f80d1a762998d6b8731d506f6667ccbdaf996 Mon Sep 17 00:00:00 2001
From: Steven Bosscher <stevenb@suse.de>
Date: Wed, 19 Oct 2005 14:48:29 +0000
Subject: [PATCH] re PR c/23228 (Silly "unused variable" warning after
 redeclaration of a local variable)

	PR c/23228
	* c-decl.c (pop_scope): Don't warn about an unused variable
	if it is marked with TREE_NO_WARNING.
	(duplicate_decls): Set TREE_NO_WARNING if olddecl and newdecl
	somenow mismatch and olddecl is to be replaced.

From-SVN: r105621
---
 gcc/ChangeLog | 8 ++++++++
 gcc/c-decl.c  | 7 ++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 45d936ae2730..886d1f8f431e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-10-19  Steven Bosscher  <stevenb@suse.de>
+
+	PR c/23228
+	* c-decl.c (pop_scope): Don't warn about an unused variable
+	if it is marked with TREE_NO_WARNING.
+	(duplicate_decls): Set TREE_NO_WARNING if olddecl and newdecl
+	somenow mismatch and olddecl is to be replaced.
+
 2005-10-19  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
 	PR middle-end/23199
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index c274df47ac40..f7cad3b71051 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -803,6 +803,7 @@ pop_scope (void)
 	case VAR_DECL:
 	  /* Warnings for unused variables.  */
 	  if (!TREE_USED (p)
+	      && !TREE_NO_WARNING (p)
 	      && !DECL_IN_SYSTEM_HEADER (p)
 	      && DECL_NAME (p)
 	      && !DECL_ARTIFICIAL (p)
@@ -1876,7 +1877,11 @@ duplicate_decls (tree newdecl, tree olddecl)
   tree newtype = NULL, oldtype = NULL;
 
   if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
-    return false;
+    {
+      /* Avoid `unused variable' and other warnings warnings for OLDDECL.  */
+      TREE_NO_WARNING (olddecl) = 1;
+      return false;
+    }
 
   merge_decls (newdecl, olddecl, newtype, oldtype);
   return true;
-- 
GitLab