From 2947608c10b46f11a22d2ee1d4976eb52185f499 Mon Sep 17 00:00:00 2001
From: pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 4 Dec 2006 02:24:42 +0000
Subject: [PATCH] 2006-12-03  Richard Henderson  <rth@redhat.com>            
 Andrew Pinski  <pinskia@gmail.com>

        PR C++/14329
        * error.c (cp_printer) <'D'>: Handle DECL_DEBUG_EXPR.

2006-12-03  Richard Henderson  <rth@redhat.com>
            Andrew Pinski  <pinskia@gmail.com>

        PR C++/14329
        * g++.dg/warn/unit-1.C: New test.





git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119478 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog                   |  6 ++++++
 gcc/cp/error.c                     | 17 ++++++++++++++++-
 gcc/testsuite/ChangeLog            |  6 ++++++
 gcc/testsuite/g++.dg/warn/unit-1.C | 10 ++++++++++
 4 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/warn/unit-1.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index cfd933c314d1..7e482c01e1d9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-12-03  Richard Henderson  <rth@redhat.com>
+            Andrew Pinski  <pinskia@gmail.com>
+
+	PR C++/14329
+	* error.c (cp_printer) <'D'>: Handle DECL_DEBUG_EXPR.
+
 2006-12-02  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
 	PR C++/30033
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index c4f4d461c2fe..49f3367d7431 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -2337,7 +2337,22 @@ cp_printer (pretty_printer *pp, text_info *text, const char *spec,
     {
     case 'A': result = args_to_string (next_tree, verbose);	break;
     case 'C': result = code_to_string (next_tcode);		break;
-    case 'D': result = decl_to_string (next_tree, verbose);	break;
+    case 'D':
+      {
+	tree temp = next_tree;
+	if (DECL_P (temp)
+	    && DECL_DEBUG_EXPR_IS_FROM (temp) && DECL_DEBUG_EXPR (temp))
+	  {
+	    temp = DECL_DEBUG_EXPR (temp);
+	    if (!DECL_P (temp))
+	      {
+		result = expr_to_string (temp);
+		break;
+	      }
+	  }
+	result = decl_to_string (temp, verbose);
+      }
+      break;
     case 'E': result = expr_to_string (next_tree);		break;
     case 'F': result = fndecl_to_string (next_tree, verbose);	break;
     case 'L': result = language_to_string (next_lang);		break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2eefcc074d0a..37cc2e275831 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2006-12-03  Richard Henderson  <rth@redhat.com>
+            Andrew Pinski  <pinskia@gmail.com>
+
+	PR C++/14329
+	* g++.dg/warn/unit-1.C: New test.
+
 2006-12-03  Uros Bizjak  <ubizjak@gmail.com>
 
 	* gcc.dg/visibility-11.c: Compile with -mstringop-strategy=libcall.
diff --git a/gcc/testsuite/g++.dg/warn/unit-1.C b/gcc/testsuite/g++.dg/warn/unit-1.C
new file mode 100644
index 000000000000..1bfe75b2f6cd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/unit-1.C
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wuninitialized" } */
+
+struct a { int mode; };
+int sys_msgctl (void)
+{
+  struct a setbuf;  /* { dg-warning "'setbuf\.a::mode' is used" } */
+  return setbuf.mode;
+}
+
-- 
GitLab