aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2010-06-22 19:07:06 +0200
committerJanus Weil <janus@gcc.gnu.org>2010-06-22 19:07:06 +0200
commit5cd2f8152d6741a4c793e0c7340470ca71009bfb (patch)
treed5318ee0e3c06f0a8b81e0d2c1bea008dd4bf521 /gcc
parentb074e7833ba9c3ff29f71892c5a0b254972eef31 (diff)
downloadgcc-5cd2f8152d6741a4c793e0c7340470ca71009bfb.zip
gcc-5cd2f8152d6741a4c793e0c7340470ca71009bfb.tar.gz
gcc-5cd2f8152d6741a4c793e0c7340470ca71009bfb.tar.bz2
re PR fortran/44616 ([OOP] ICE if CLASS(foo) is used before its definition)
2010-06-22 Janus Weil <janus@gcc.gnu.org> PR fortran/44616 * resolve.c (resolve_fl_derived): Avoid checking for abstract on class containers. 2010-06-22 Janus Weil <janus@gcc.gnu.org> PR fortran/44616 * gfortran.dg/abstract_type_8.f03: New. From-SVN: r161208
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/abstract_type_8.f0329
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 1385318..07a5825 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2010-06-22 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44616
+ * resolve.c (resolve_fl_derived): Avoid checking for abstract on class
+ containers.
+
2010-06-21 Tobias Burnus <burnus@net-b.de>
PR fortran/40632
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 20def44..96b3e8d 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -11144,6 +11144,7 @@ resolve_fl_derived (gfc_symbol *sym)
/* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
all DEFERRED bindings are overridden. */
if (super_type && super_type->attr.abstract && !sym->attr.abstract
+ && !sym->attr.is_class
&& ensure_not_abstract (sym, super_type) == FAILURE)
return FAILURE;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 54d13fd..326f2bc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-06-22 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44616
+ * gfortran.dg/abstract_type_8.f03: New.
+
2010-06-21 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/noexcept08.C: New.
diff --git a/gcc/testsuite/gfortran.dg/abstract_type_8.f03 b/gcc/testsuite/gfortran.dg/abstract_type_8.f03
new file mode 100644
index 0000000..c924aba
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/abstract_type_8.f03
@@ -0,0 +1,29 @@
+! { dg-do compile }
+!
+! PR 44616: [OOP] ICE if CLASS(foo) is used before its definition
+!
+! Contributed by bd satish <bdsatish@gmail.com>
+
+module factory_pattern
+implicit none
+
+type First_Factory
+ character(len=20) :: factory_type
+ class(Connection), pointer :: connection_type
+ contains
+end type First_Factory
+
+type, abstract :: Connection
+ contains
+ procedure(generic_desc), deferred :: description
+end type Connection
+
+abstract interface
+ subroutine generic_desc(self)
+ import ! Required, cf. PR 44614
+ class(Connection) :: self
+ end subroutine generic_desc
+end interface
+end module factory_pattern
+
+! { dg-final { cleanup-modules "factory_pattern" } }