------- Comment #21 from jv244 at cam dot ac dot uk  2009-07-24 12:27 -------
(In reply to comment #20)
> As noticed in PR40011,
> 
> All of gfortran.h seems to be ignorant of the GC - which means we may
> not garbage collect while the FE is still running, so all calls to
> cgraph_finalize_function should have true as their 2nd argument.
>
Richard,

I tried this change, and now it segfaults later, I guess past the frontend.

#174670 0x0000000000530d51 in gt_ggc_mx_lang_tree_node (
    x_p=<value optimized out>) at ./gt-fortran-f95-lang.h:461
#174671 0x0000000000531127 in gt_ggc_mx_lang_tree_node (
    x_p=<value optimized out>) at ./gt-fortran-f95-lang.h:320
#174672 0x0000000000531259 in gt_ggc_mx_lang_tree_node (
    x_p=<value optimized out>) at ./gt-fortran-f95-lang.h:295
#174673 0x00000000006fb2d5 in gt_ggc_mx_cgraph_node (x_p=<value optimized out>)
    at gtype-desc.c:264
#174674 0x00000000006fb43e in gt_ggc_m_P11cgraph_node4htab (
    x_p=<value optimized out>) at gtype-desc.c:2207
#174675 0x00000000006c396f in ggc_mark_roots ()
---Type <return> to continue, or q <return> to quit---
    at /data03/vondele/gcc_trunk/gcc/gcc/ggc-common.c:137
#174676 0x000000000057e636 in ggc_collect ()
    at /data03/vondele/gcc_trunk/gcc/gcc/ggc-page.c:1944
#174677 0x0000000000756de5 in execute_todo (flags=19)
    at /data03/vondele/gcc_trunk/gcc/gcc/passes.c:1057
#174678 0x0000000000757083 in execute_one_pass (pass=0x11c9640)
    at /data03/vondele/gcc_trunk/gcc/gcc/passes.c:1309
#174679 0x0000000000757255 in execute_pass_list (pass=0x11c9640)
    at /data03/vondele/gcc_trunk/gcc/gcc/passes.c:1335
#174680 0x000000000084adb9 in tree_lowering_passes (fn=<value optimized out>)
    at /data03/vondele/gcc_trunk/gcc/gcc/tree-optimize.c:345
#174681 0x00000000009ae512 in cgraph_lower_function (node=0x7f2d97042600)
    at /data03/vondele/gcc_trunk/gcc/gcc/cgraphunit.c:501
#174682 0x00000000009aed7b in cgraph_analyze_function (node=0x7f2d97042600)
    at /data03/vondele/gcc_trunk/gcc/gcc/cgraphunit.c:814
#174683 0x00000000009b14e6 in cgraph_analyze_functions ()
    at /data03/vondele/gcc_trunk/gcc/gcc/cgraphunit.c:953
#174684 0x00000000009b1840 in cgraph_finalize_compilation_unit ()
    at /data03/vondele/gcc_trunk/gcc/gcc/cgraphunit.c:1039
#174685 0x000000000071c44d in write_global_declarations ()
    at /data03/vondele/gcc_trunk/gcc/gcc/langhooks.c:314
#174686 0x00000000007fa0db in toplev_main (argc=13, argv=0x7fff001a91b8)
    at /data03/vondele/gcc_trunk/gcc/gcc/toplev.c:1039
---Type <return> to continue, or q <return> to quit---
#174687 0x00007f2df6e0e436 in __libc_start_main () from /lib64/libc.so.6
#174688 0x000000000049b2f9 in _start ()

Just for reference:

Index: trans-decl.c
===================================================================
--- trans-decl.c        (revision 149846)
+++ trans-decl.c        (working copy)
@@ -2023,7 +2023,7 @@

       current_function_decl = NULL_TREE;

-      cgraph_finalize_function (thunk_fndecl, false);
+      cgraph_finalize_function (thunk_fndecl, true);

       /* We share the symbols in the formal argument list with other entry
         points and the master function.  Clear them so that they are
@@ -4104,7 +4104,7 @@
   /* Output the GENERIC tree.  */
   dump_function (TDI_original, ftn_main);

-  cgraph_finalize_function (ftn_main, false);
+  cgraph_finalize_function (ftn_main, true);

   if (old_context)
     {
@@ -4375,7 +4375,7 @@
        added to our parent's nested function list.  */
     (void) cgraph_node (fndecl);
   else
-    cgraph_finalize_function (fndecl, false);
+    cgraph_finalize_function (fndecl, true);

   gfc_trans_use_stmts (ns);
   gfc_traverse_ns (ns, gfc_emit_parameter_debug_info);


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40005

Reply via email to