aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2010-10-07 19:35:18 +0200
committerJanus Weil <janus@gcc.gnu.org>2010-10-07 19:35:18 +0200
commit061e60bd787049355aa67c3370fa2a8a7998f478 (patch)
tree48ab1d27fc9e1798d4f9be4fed1d31f4fda9dd33 /gcc
parent3cfa8f8272176e74a0a8ac2075a3d55046a44652 (diff)
downloadgcc-061e60bd787049355aa67c3370fa2a8a7998f478.zip
gcc-061e60bd787049355aa67c3370fa2a8a7998f478.tar.gz
gcc-061e60bd787049355aa67c3370fa2a8a7998f478.tar.bz2
re PR fortran/45933 ([OOP] ICE in gfc_add_component_ref, at fortran/class.c:77)
2010-10-07 Janus Weil <janus@gcc.gnu.org> PR fortran/45933 * resolve.c (resolve_typebound_function): Use correct declared type for type-bound operators. 2010-10-07 Janus Weil <janus@gcc.gnu.org> PR fortran/45933 * gfortran.dg/typebound_operator_5.f03: New. From-SVN: r165126
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_operator_5.f0330
4 files changed, 43 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 18e4dd9..641807f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2010-10-07 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/45933
+ * resolve.c (resolve_typebound_function): Use correct declared type
+ for type-bound operators.
+
2010-10-07 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/45916
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 526e6df..a5aa62a 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5719,13 +5719,12 @@ resolve_typebound_function (gfc_expr* e)
/* Deal with typebound operators for CLASS objects. */
expr = e->value.compcall.base_object;
- if (expr && expr->symtree->n.sym->ts.type == BT_CLASS
- && e->value.compcall.name)
+ if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
{
/* Since the typebound operators are generic, we have to ensure
that any delays in resolution are corrected and that the vtab
is present. */
- ts = expr->symtree->n.sym->ts;
+ ts = expr->ts;
declared = ts.u.derived;
c = gfc_find_component (declared, "$vptr", true, true);
if (c->ts.u.derived == NULL)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c8f841e..b68689c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-10-07 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/45933
+ * gfortran.dg/typebound_operator_5.f03: New.
+
2010-10-07 Nicola Pero <nicola.pero@meta-innovation.com>
Merge from 'apple/trunk' branch on FSF servers.
diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_5.f03 b/gcc/testsuite/gfortran.dg/typebound_operator_5.f03
new file mode 100644
index 0000000..440c1b5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_operator_5.f03
@@ -0,0 +1,30 @@
+! { dg-do compile }
+!
+! PR 45933: [4.6 regression] [OOP] ICE in gfc_add_component_ref, at fortran/class.c:77
+!
+! Contributed by Mark Rashid <mmrashid@ucdavis.edu>
+
+MODULE DEF1
+ TYPE :: DAT
+ INTEGER :: NN
+ CONTAINS
+ PROCEDURE :: LESS_THAN
+ GENERIC :: OPERATOR (.LT.) => LESS_THAN
+ END TYPE
+CONTAINS
+ LOGICAL FUNCTION LESS_THAN(A, B)
+ CLASS (DAT), INTENT (IN) :: A, B
+ LESS_THAN = (A%NN .LT. B%NN)
+ END FUNCTION
+END MODULE
+
+PROGRAM P
+ USE DEF1
+ TYPE NODE
+ TYPE (DAT), POINTER :: PT
+ END TYPE
+ CLASS (NODE),POINTER :: A, B
+ PRINT *, A%PT .LT. B%PT
+END
+
+! { dg-final { cleanup-modules "DEF1" } }