diff options
author | Richard Guenther <rguenther@suse.de> | 2011-03-01 09:45:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-03-01 09:45:05 +0000 |
commit | 06c7edcc27e82d457693e971b2f7a7830b12a0a5 (patch) | |
tree | cafb8fcad8e9b58d7db10092019913f456bcc23f | |
parent | d610c25e4a375648bdea9a44dc4c602bd44bf6bd (diff) | |
download | gcc-06c7edcc27e82d457693e971b2f7a7830b12a0a5.zip gcc-06c7edcc27e82d457693e971b2f7a7830b12a0a5.tar.gz gcc-06c7edcc27e82d457693e971b2f7a7830b12a0a5.tar.bz2 |
re PR lto/46911 (ICE: SIGSEGV in add_name_and_src_coords_attributes (dwarf2out.c:17792) with -flto -g)
2011-03-01 Richard Guenther <rguenther@suse.de>
PR lto/46911
* lto-streamer-in.c (lto_input_ts_decl_common_tree_pointers):
Do not stream DECL_ABSTRACT_ORIGIN.
(lto_input_ts_block_tree_pointers): Nor BLOCK_SOURCE_LOCATION,
BLOCK_NONLOCALIZED_VARS or BLOCK_ABSTRACT_ORIGIN.
* lto-streamer-out.c (lto_output_ts_decl_common_tree_pointers):
Do not stream DECL_ABSTRACT_ORIGIN.
(lto_output_ts_block_tree_pointers): Nor BLOCK_SOURCE_LOCATION,
BLOCK_NONLOCALIZED_VARS or BLOCK_ABSTRACT_ORIGIN.
* gfortran.dg/lto/pr46911_0.f: New testcase.
From-SVN: r170588
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/lto-streamer-in.c | 27 | ||||
-rw-r--r-- | gcc/lto-streamer-out.c | 24 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/lto/pr46911_0.f | 6 |
5 files changed, 47 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 89661c2..5d567fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2011-03-01 Richard Guenther <rguenther@suse.de> + + PR lto/46911 + * lto-streamer-in.c (lto_input_ts_decl_common_tree_pointers): + Do not stream DECL_ABSTRACT_ORIGIN. + (lto_input_ts_block_tree_pointers): Nor BLOCK_SOURCE_LOCATION, + BLOCK_NONLOCALIZED_VARS or BLOCK_ABSTRACT_ORIGIN. + * lto-streamer-out.c (lto_output_ts_decl_common_tree_pointers): + Do not stream DECL_ABSTRACT_ORIGIN. + (lto_output_ts_block_tree_pointers): Nor BLOCK_SOURCE_LOCATION, + BLOCK_NONLOCALIZED_VARS or BLOCK_ABSTRACT_ORIGIN. + 2011-02-28 Anatoly Sokolov <aesok@post.ru> * config/stormy16/stormy16.h (FUNCTION_VALUE, LIBCALL_VALUE, diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index 058885d..a873258 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -1980,7 +1980,9 @@ lto_input_ts_decl_common_tree_pointers (struct lto_input_block *ib, DECL_INITIAL (expr) = lto_input_tree (ib, data_in); DECL_ATTRIBUTES (expr) = lto_input_tree (ib, data_in); - DECL_ABSTRACT_ORIGIN (expr) = lto_input_tree (ib, data_in); + /* Do not stream DECL_ABSTRACT_ORIGIN. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ if (TREE_CODE (expr) == PARM_DECL) TREE_CHAIN (expr) = lto_input_chain (ib, data_in); @@ -2179,24 +2181,19 @@ static void lto_input_ts_block_tree_pointers (struct lto_input_block *ib, struct data_in *data_in, tree expr) { - unsigned i, len; - - BLOCK_SOURCE_LOCATION (expr) = lto_input_location (ib, data_in); + /* Do not stream BLOCK_SOURCE_LOCATION. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ BLOCK_VARS (expr) = lto_input_chain (ib, data_in); - len = lto_input_uleb128 (ib); - if (len > 0) - { - VEC_reserve_exact (tree, gc, BLOCK_NONLOCALIZED_VARS (expr), len); - for (i = 0; i < len; i++) - { - tree t = lto_input_tree (ib, data_in); - VEC_quick_push (tree, BLOCK_NONLOCALIZED_VARS (expr), t); - } - } + /* Do not stream BLOCK_NONLOCALIZED_VARS. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ BLOCK_SUPERCONTEXT (expr) = lto_input_tree (ib, data_in); - BLOCK_ABSTRACT_ORIGIN (expr) = lto_input_tree (ib, data_in); + /* Do not stream BLOCK_ABSTRACT_ORIGIN. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ BLOCK_FRAGMENT_ORIGIN (expr) = lto_input_tree (ib, data_in); BLOCK_FRAGMENT_CHAIN (expr) = lto_input_tree (ib, data_in); /* We re-compute BLOCK_SUBBLOCKS of our parent here instead diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index 29d171b..ba916b6 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -870,7 +870,9 @@ lto_output_ts_decl_common_tree_pointers (struct output_block *ob, tree expr, } lto_output_tree_or_ref (ob, DECL_ATTRIBUTES (expr), ref_p); - lto_output_tree_or_ref (ob, DECL_ABSTRACT_ORIGIN (expr), ref_p); + /* Do not stream DECL_ABSTRACT_ORIGIN. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ if (TREE_CODE (expr) == PARM_DECL) lto_output_chain (ob, TREE_CHAIN (expr), ref_p); @@ -1054,21 +1056,19 @@ static void lto_output_ts_block_tree_pointers (struct output_block *ob, tree expr, bool ref_p) { - unsigned i; - tree t; - - lto_output_location (ob, BLOCK_SOURCE_LOCATION (expr)); + /* Do not stream BLOCK_SOURCE_LOCATION. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ lto_output_chain (ob, BLOCK_VARS (expr), ref_p); - output_uleb128 (ob, VEC_length (tree, BLOCK_NONLOCALIZED_VARS (expr))); - FOR_EACH_VEC_ELT (tree, BLOCK_NONLOCALIZED_VARS (expr), i, t) - { - gcc_assert (DECL_CONTEXT (t) != expr); - lto_output_tree_or_ref (ob, t, ref_p); - } + /* Do not stream BLOCK_NONLOCALIZED_VARS. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ lto_output_tree_or_ref (ob, BLOCK_SUPERCONTEXT (expr), ref_p); - lto_output_tree_or_ref (ob, BLOCK_ABSTRACT_ORIGIN (expr), ref_p); + /* Do not stream BLOCK_ABSTRACT_ORIGIN. We cannot handle debug information + for early inlining so drop it on the floor instead of ICEing in + dwarf2out.c. */ lto_output_tree_or_ref (ob, BLOCK_FRAGMENT_ORIGIN (expr), ref_p); lto_output_tree_or_ref (ob, BLOCK_FRAGMENT_CHAIN (expr), ref_p); /* Do not output BLOCK_SUBBLOCKS. Instead on streaming-in this diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e8d4685..65e0db4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-03-01 Richard Guenther <rguenther@suse.de> + + PR lto/46911 + * gfortran.dg/lto/pr46911_0.f: New testcase. + 2011-02-28 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/47933 diff --git a/gcc/testsuite/gfortran.dg/lto/pr46911_0.f b/gcc/testsuite/gfortran.dg/lto/pr46911_0.f new file mode 100644 index 0000000..fce9597 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/pr46911_0.f @@ -0,0 +1,6 @@ +! { dg-lto-do link } +! { dg-lto-options {{ -O2 -flto -g }} } +! { dg-extra-ld-options "-r -nostdlib" } + common/main1/ eps(2) + call dalie6s(iqmod6,1,wx,cor6d) + end |