This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Proper use of decl_function_context in dwar2out.c


Hi,

the following patch fixes an ICE for me when LTO building Firefox at
-O3 -g.  The problem is that at one spot we use decl_function_context
as a predicate whether to use TREE_CONTEXT rather than using it's
result which can be determined in a much more elaborate way.  In my
particular case TREE_CONTEXT is a type, not a function decl and
lookup_decl_die chokes on that, when it is fed the function result,
all seems fine.

Bootstrapped and tested on x86_64-linux.  OK for trunk?

Also, I have not actually tried it but I suppose we'll be hitting this
problem with 4.7 as well.  OK for the branch once 4.7.0 is out?

Thanks,

Martin
 

2012-03-07  Martin Jambor  <mjambor@suse.cz>

	* dwarf2out.c (dwarf2out_decl): Use result of decl_function_context
	rather than DECL_CONTEXT.

Index: src/gcc/dwarf2out.c
===================================================================
--- src.orig/gcc/dwarf2out.c
+++ src/gcc/dwarf2out.c
@@ -19830,6 +19830,7 @@ void
 dwarf2out_decl (tree decl)
 {
   dw_die_ref context_die = comp_unit_die ();
+  tree ctx_fndecl;
 
   switch (TREE_CODE (decl))
     {
@@ -19889,8 +19890,9 @@ dwarf2out_decl (tree decl)
 	return;
 
       /* For local statics lookup proper context die.  */
-      if (TREE_STATIC (decl) && decl_function_context (decl))
-	context_die = lookup_decl_die (DECL_CONTEXT (decl));
+      if (TREE_STATIC (decl) &&
+	  (ctx_fndecl = decl_function_context (decl)) != NULL_TREE)
+	context_die = lookup_decl_die (ctx_fndecl);
 
       /* If we are in terse mode, don't generate any DIEs to represent any
 	 variable declarations or definitions.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]