From cfe2053d0edc7424353ef98c11c571b0475cf902 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 28 Jul 2014 08:25:34 +0000 Subject: [PATCH] re PR ipa/61921 (ICE: SIGSEGV in varpool_node::get_constructor(), at varpool.c:275 with -O2 -fipa-pta) 2014-07-28 Richard Biener PR tree-optimization/61921 * tree-ssa-structalias.c (create_variable_info_for_1): Check if there is a varpool node before dereferencing it. * gfortran.dg/pr61921.f90: New testcase. From-SVN: r213114 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr61921.f90 | 15 +++++++++++++++ gcc/tree-ssa-structalias.c | 4 +++- 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr61921.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5476b599865..740971a5eee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-07-28 Richard Biener + + PR tree-optimization/61921 + * tree-ssa-structalias.c (create_variable_info_for_1): Check + if there is a varpool node before dereferencing it. + 2014-07-28 Roman Gareev * graphite-sese-to-poly.c: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 581aedf236e..68499d9eed0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-07-28 Richard Biener + + PR tree-optimization/61921 + * gfortran.dg/pr61921.f90: New testcase. + 2014-07-28 Richard Biener PR rtl-optimization/61801 diff --git a/gcc/testsuite/gfortran.dg/pr61921.f90 b/gcc/testsuite/gfortran.dg/pr61921.f90 new file mode 100644 index 00000000000..52b61762a01 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr61921.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-O2 -fipa-pta" } +MODULE min_heap + TYPE heap_t + END TYPE heap_t +CONTAINS + ELEMENTAL FUNCTION get_left_child(n) RESULT (child) + INTEGER, INTENT(IN) :: n + END FUNCTION get_left_child + ELEMENTAL FUNCTION get_value(heap, n) RESULT (value) + TYPE(heap_t), INTENT(IN) :: heap + INTEGER, INTENT(IN) :: n + END FUNCTION get_value +END MODULE min_heap + diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 1879fc0b8ff..0aa0c4bfd5b 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -5650,6 +5650,7 @@ create_variable_info_for_1 (tree decl, const char *name) auto_vec fieldstack; fieldoff_s *fo; unsigned int i; + varpool_node *vnode; if (!declsize || !tree_fits_uhwi_p (declsize)) @@ -5671,7 +5672,8 @@ create_variable_info_for_1 (tree decl, const char *name) in IPA mode. Else we'd have to parse arbitrary initializers. */ && !(in_ipa_mode && is_global_var (decl) - && varpool_node::get (decl)->get_constructor ())) + && (vnode = varpool_node::get (decl)) + && vnode->get_constructor ())) { fieldoff_s *fo = NULL; bool notokay = false;