From dc0bd85b332b65da0d22c48dad50e875e94bcb8d Mon Sep 17 00:00:00 2001 From: jakub Date: Mon, 23 May 2011 18:07:43 +0000 Subject: PR debug/49032 * dbxout.c: Include cgraph.h. (dbxout_expand_expr): If a VAR_DECL is TREE_STATIC, not written and without value expr, return NULL if no varpool node exists for it or if it is not needed. * Makefile.in (dbxout.o): Depend on $(CGRAPH_H). * gcc.dg/debug/pr49032.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174083 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/dbxout.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'gcc/dbxout.c') diff --git a/gcc/dbxout.c b/gcc/dbxout.c index 3190803f9c4..be43ed3dae7 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -91,6 +91,7 @@ along with GCC; see the file COPYING3. If not see #include "langhooks.h" #include "obstack.h" #include "expr.h" +#include "cgraph.h" #ifdef XCOFF_DEBUGGING_INFO #include "xcoffout.h" @@ -2470,6 +2471,20 @@ dbxout_expand_expr (tree expr) disable debug info for these variables. */ if (!targetm.have_tls && DECL_THREAD_LOCAL_P (expr)) return NULL; + if (TREE_STATIC (expr) + && !TREE_ASM_WRITTEN (expr) + && !DECL_HAS_VALUE_EXPR_P (expr) + && !TREE_PUBLIC (expr) + && DECL_RTL_SET_P (expr) + && MEM_P (DECL_RTL (expr))) + { + /* If this is a var that might not be actually output, + return NULL, otherwise stabs might reference an undefined + symbol. */ + struct varpool_node *node = varpool_get_node (expr); + if (!node || !node->needed) + return NULL; + } /* FALLTHRU */ case PARM_DECL: -- cgit v1.2.1