aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2010-06-22 17:07:06 +0000
committerJanus Weil <janus@gcc.gnu.org>2010-06-22 17:07:06 +0000
commita346b863a000d0d6ec7ce3436710d0981701f0b0 (patch)
treed5318ee0e3c06f0a8b81e0d2c1bea008dd4bf521
parentb8fd1fe9d622b5951b6af74b8cb8bad609f3d6ef (diff)
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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@161208 138bc75d-0d04-0410-961f-82ee72b054a4
-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 1385318d550..07a5825123b 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 20def447767..96b3e8daab1 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 54d13fd22c5..326f2bcc4ee 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 00000000000..c924abac9af
--- /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" } }