summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr61921.f9015
-rw-r--r--gcc/tree-ssa-structalias.c4
4 files changed, 29 insertions, 1 deletions
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 <rguenther@suse.de>
+
+ 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 <gareevroman@gmail.com>
* 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,5 +1,10 @@
2014-07-28 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/61921
+ * gfortran.dg/pr61921.f90: New testcase.
+
+2014-07-28 Richard Biener <rguenther@suse.de>
+
PR rtl-optimization/61801
* gcc.target/i386/pr61801.c: New testcase.
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<fieldoff_s> 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;