OSDN Git Service

2009-08-31 Janus Weil <janus@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gfortran.dg / allocate_derived_1.f90
diff --git a/gcc/testsuite/gfortran.dg/allocate_derived_1.f90 b/gcc/testsuite/gfortran.dg/allocate_derived_1.f90
new file mode 100644 (file)
index 0000000..d74851e
--- /dev/null
@@ -0,0 +1,53 @@
+! { dg-do compile }
+!
+! FIXME: Remove -w after polymorphic entities are supported.
+! { dg-options "-w" }
+!
+! ALLOCATE statements with derived type specification
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+ type :: t1
+  integer :: i
+ end type
+
+ type, extends(t1) :: t2
+  real :: r
+ end type
+
+ type, extends(t2) :: t3
+  real :: q
+ end type
+
+ type, abstract :: u0
+  logical :: nothing
+ end type
+
+ type :: v1
+  real :: r
+ end type
+
+ class(t1),dimension(:),allocatable :: x
+ type(t2),dimension(:),allocatable :: y
+ class(t3),dimension(:),allocatable :: z
+
+ allocate(      x(1))
+ allocate(t1 :: x(2))
+ allocate(t2 :: x(3))
+ allocate(t3 :: x(4))
+ allocate(tx :: x(5))  ! { dg-error "is not an accessible derived type" }
+ allocate(u0 :: x(6))  ! { dg-error "may not be ABSTRACT" }
+ allocate(v1 :: x(7))  ! { dg-error "is type incompatible with typespec" }
+
+ allocate(      y(1))
+ allocate(t1 :: y(2))  ! { dg-error "is type incompatible with typespec" }
+ allocate(t2 :: y(3))
+ allocate(t3 :: y(3))  ! { dg-error "is type incompatible with typespec" }
+
+ allocate(      z(1))
+ allocate(t1 :: z(2))  ! { dg-error "is type incompatible with typespec" }
+ allocate(t2 :: z(3))  ! { dg-error "is type incompatible with typespec" }
+ allocate(t3 :: z(4))
+
+end
+