Patchwork [google] fix for undefined location list symbol in LIPO (issue5355042)

login
register
mail settings
Submitter Cary Coutant
Date Nov. 5, 2011, 6:57 a.m.
Message ID <CAHACq4r5SFPV2mWxDyg5TL57iR8xymQnTjPkyDg8DnzcBPrbfg@mail.gmail.com>
Download mbox | patch
Permalink /patch/123825/
State New
Headers show

Comments

Cary Coutant - Nov. 5, 2011, 6:57 a.m.
>> 2011-11-04   Rong Xu  <xur@google.com>
>>
>>        * gcc/dwarf2out.c (dwarf2out_decl): not emit type info
>>          for unreachable functions in LIPO mode.

Here's a follow-on patch to fix the build breakage caused by the
declaration in the middle of a block. It also fixes up the style
complaints that Diego mentioned. I won't be able to commit this, so
could someone else take care of it? I'd check it in as obvious, but
I'm about to leave the country, and didn't want to commit and run.

-cary

Patch

Index: dwarf2out.c
===================================================================
--- dwarf2out.c	(revision 181007)
+++ dwarf2out.c	(working copy)
@@ -21424,8 +21424,10 @@  dwarf2out_imported_module_or_decl (tree
 void
 dwarf2out_decl (tree decl)
 {
+  dw_die_ref context_die;
+
   /* In LIPO mode, we may output some functions whose type is defined
-     in another function that will not be output. This can result in
+     in another function that will not be output.  This can result in
      undefined location list symbols in the debug type info.
      Here we disable the output of the type info for this case.
      It is safe since this function and its debug info should never
@@ -21435,8 +21437,8 @@  dwarf2out_decl (tree decl)
       tree decl_context, orig_decl;

       decl_context = DECL_CONTEXT (decl);
-      while (decl_context &&
-          TREE_CODE (decl_context) != TRANSLATION_UNIT_DECL)
+      while (decl_context
+	     && TREE_CODE (decl_context) != TRANSLATION_UNIT_DECL)
       {
         struct cgraph_node *node;

@@ -21447,17 +21449,17 @@  dwarf2out_decl (tree decl)
         /* Refer to cgraph_mark_functions_to_output() in cgraphunit.c,
            if cgraph_is_aux_decl_external() is true,
            this function will not be output in LIPO mode.  */
-        if (TREE_CODE (decl_context) == FUNCTION_DECL &&
-            TREE_PUBLIC (decl_context) &&
-            (node = cgraph_get_node (decl_context)) &&
-            cgraph_is_aux_decl_external (node))
+        if (TREE_CODE (decl_context) == FUNCTION_DECL
+            && TREE_PUBLIC (decl_context)
+	    && (node = cgraph_get_node (decl_context))
+	    && cgraph_is_aux_decl_external (node))
           return;

         decl_context = DECL_CONTEXT (orig_decl);
       }
     }

-  dw_die_ref context_die = comp_unit_die ();
+  context_die = comp_unit_die ();

   switch (TREE_CODE (decl))
     {