aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f90
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f90
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f90')
-rw-r--r--gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f9062
1 files changed, 62 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f90 b/gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f90
new file mode 100644
index 000000000..8ac48c3f1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f90
@@ -0,0 +1,62 @@
+! { dg-do compile }
+! { dg-options "-std=f2008" }
+!
+! PR fortran/45170
+!
+! Character deferred type parameter
+!
+
+subroutine one(x, y) ! { dg-error "Entity .y. at .1. has a deferred type parameter" }
+ implicit none
+ character(len=:), pointer :: x
+ character(len=:) :: y
+ character(len=:), allocatable, target :: str2
+ character(len=:), target :: str ! { dg-error "deferred type parameter" }
+end subroutine one
+
+subroutine two()
+ implicit none
+ character(len=:), allocatable, target :: str1(:)
+ character(len=5), save, target :: str2
+ character(len=:), pointer :: pstr => str2
+ character(len=:), pointer :: pstr2(:)
+end subroutine two
+
+subroutine three()
+! implicit none ! Disabled because of PR 46152
+ character(len=:), allocatable, target :: str1(:)
+ character(len=5), save, target :: str2
+ character(len=:), pointer :: pstr
+ character(len=:), pointer :: pstr2(:)
+
+ pstr => str2
+ pstr2 => str1
+ str1 = ["abc"]
+ pstr2 => str1
+
+ allocate (character(len=77) :: str1(1))
+ allocate (pstr, source=str2)
+ allocate (pstr, mold=str2)
+ allocate (pstr) ! { dg-error "requires either a type-spec or SOURCE tag" }
+ allocate (character(len=:) :: str1(1)) ! { dg-error "cannot contain a deferred type parameter" }
+
+ str1 = [ character(len=2) :: "abc" ]
+ str1 = [ character(len=:) :: "abc" ] ! { dg-error "cannot contain a deferred type parameter" }
+end subroutine three
+
+subroutine four()
+ implicit none
+ character(len=:), allocatable, target :: str
+ character(len=:), pointer :: pstr
+ pstr => str
+ str = "abc"
+ if(len(pstr) /= len(str) .or. len(str)/= 3) call abort()
+ str = "abcd"
+ if(len(pstr) /= len(str) .or. len(str)/= 4) call abort()
+end subroutine four
+
+subroutine five()
+character(len=4) :: str*(:)
+allocatable :: str
+end subroutine five
+