From: Jakub Jelinek Date: Mon, 23 May 2011 18:07:43 +0000 (+0200) Subject: re PR debug/49032 (-gstabs generates reference to deleted static variable) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9166988f2635469e9e7a85e0473df7b0eee689ee;p=gcc.git re PR debug/49032 (-gstabs generates reference to deleted static variable) 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. From-SVN: r174083 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4c73adb3789..623a34770d3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2011-05-23 Jakub Jelinek + 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). + PR c/49120 * c-decl.c (start_decl): Convert expr to void_type_node. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 1c65a5bf00c..d3e6ea4aaa9 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2957,7 +2957,8 @@ optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ $(RTL_H) $(FLAGS_H) $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) $(FUNCTION_H) \ langhooks.h insn-config.h reload.h $(GSTAB_H) xcoffout.h output.h dbxout.h \ - toplev.h $(DIAGNOSTIC_CORE_H) $(GGC_H) $(OBSTACK_H) $(EXPR_H) gt-dbxout.h + toplev.h $(DIAGNOSTIC_CORE_H) $(GGC_H) $(OBSTACK_H) $(EXPR_H) $(CGRAPH_H) \ + gt-dbxout.h debug.o : debug.c debug.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) debug.h \ $(TREE_H) $(GGC_H) $(RTL_H) $(REGS_H) $(FLAGS_H) insn-config.h \ 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: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 65a3514b44e..ff678fc1d67 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-05-23 Jakub Jelinek + PR debug/49032 + * gcc.dg/debug/pr49032.c: New test. + PR c/49120 * gcc.dg/pr49120.c: New test. diff --git a/gcc/testsuite/gcc.dg/debug/pr49032.c b/gcc/testsuite/gcc.dg/debug/pr49032.c new file mode 100644 index 00000000000..3985040d712 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/pr49032.c @@ -0,0 +1,11 @@ +/* PR debug/49032 */ +/* { dg-do link } */ + +static int s = 42; + +int +main () +{ + int *l[18] = { &s, &s, &s, &s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + return 0; +}