aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2013-01-16 20:52:10 +0100
committerJanus Weil <janus@gcc.gnu.org>2013-01-16 20:52:10 +0100
commit9b940c6dd781581de1493d658182be58d2b4a93d (patch)
tree673b77c76d912d5d5c6e4e782f2fdb2ca81aca2b /gcc
parent934144c03c96b4f8e487ddbc2a473d6da71379c8 (diff)
downloadgcc-9b940c6dd781581de1493d658182be58d2b4a93d.zip
gcc-9b940c6dd781581de1493d658182be58d2b4a93d.tar.gz
gcc-9b940c6dd781581de1493d658182be58d2b4a93d.tar.bz2
re PR fortran/55983 (ICE in find_typebound_proc_uop, at fortran/class.c:2711)
2013-01-16 Janus Weil <janus@gcc.gnu.org> PR fortran/55983 * class.c (find_typebound_proc_uop): Check for f2k_derived instead of asserting it. 2013-01-16 Janus Weil <janus@gcc.gnu.org> PR fortran/55983 * gfortran.dg/class_55.f90: New. From-SVN: r195251
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/class.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/class_55.f9012
4 files changed, 30 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index fc39b41..6477c48 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2013-01-16 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/55983
+ * class.c (find_typebound_proc_uop): Check for f2k_derived instead of
+ asserting it.
+
2013-01-16 Jakub Jelinek <jakub@redhat.com>
Tobias Burnus <burnus@net-b.de>
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 3bb326c..9ef30f6 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -2707,15 +2707,17 @@ find_typebound_proc_uop (gfc_symbol* derived, gfc_try* t,
gfc_symtree* res;
gfc_symtree* root;
- /* Set correct symbol-root. */
- gcc_assert (derived->f2k_derived);
- root = (uop ? derived->f2k_derived->tb_uop_root
- : derived->f2k_derived->tb_sym_root);
-
/* Set default to failure. */
if (t)
*t = FAILURE;
+ if (derived->f2k_derived)
+ /* Set correct symbol-root. */
+ root = (uop ? derived->f2k_derived->tb_uop_root
+ : derived->f2k_derived->tb_sym_root);
+ else
+ return NULL;
+
/* Try to find it in the current type's namespace. */
res = gfc_find_symtree (root, name);
if (res && res->n.tb && !res->n.tb->error)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c6473f2..7572696 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-01-16 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/55983
+ * gfortran.dg/class_55.f90: New.
+
2013-01-16 Janis Johnson <janisjo@codesourcery.com>
PR testsuite/55994
diff --git a/gcc/testsuite/gfortran.dg/class_55.f90 b/gcc/testsuite/gfortran.dg/class_55.f90
new file mode 100644
index 0000000..b47989f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_55.f90
@@ -0,0 +1,12 @@
+! { dg-do compile }
+!
+! PR 55983: [4.7/4.8 Regression] ICE in find_typebound_proc_uop, at fortran/class.c:2711
+!
+! Contributed by Sylwester Arabas <slayoo@staszic.waw.pl>
+
+ type :: mpdata_t
+ class(bcd_t), pointer :: bcx, bcy ! { dg-error "is a type that has not been declared" }
+ end type
+ type(mpdata_t) :: this
+ call this%bcx%fill_halos() ! { dg-error "is being used before it is defined" }
+end