aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gfortran.dg/structure_constructor_8.f03
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/structure_constructor_8.f03
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/structure_constructor_8.f03')
-rw-r--r--gcc-4.9/gcc/testsuite/gfortran.dg/structure_constructor_8.f0360
1 files changed, 60 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gfortran.dg/structure_constructor_8.f03 b/gcc-4.9/gcc/testsuite/gfortran.dg/structure_constructor_8.f03
new file mode 100644
index 000000000..1c0ecd1c1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gfortran.dg/structure_constructor_8.f03
@@ -0,0 +1,60 @@
+! { dg-do compile }
+! Test for errors when setting private components inside a structure constructor
+! or when constructing a private structure.
+
+MODULE privmod
+ IMPLICIT NONE
+
+ TYPE :: haspriv_t
+ INTEGER :: a
+ INTEGER, PRIVATE :: b = 42
+ END TYPE haspriv_t
+
+ TYPE :: allpriv_t
+ PRIVATE
+ INTEGER :: a = 25
+ END TYPE allpriv_t
+
+ TYPE, PRIVATE :: ispriv_t
+ INTEGER :: x
+ END TYPE ispriv_t
+
+CONTAINS
+
+ SUBROUTINE testfunc ()
+ IMPLICIT NONE
+ TYPE(haspriv_t) :: struct1
+ TYPE(allpriv_t) :: struct2
+ TYPE(ispriv_t) :: struct3
+
+ ! This should succeed from within the module, no error.
+ struct1 = haspriv_t (1, 2)
+ struct2 = allpriv_t (42)
+ struct3 = ispriv_t (42)
+ END SUBROUTINE testfunc
+
+END MODULE privmod
+
+PROGRAM test
+ USE privmod
+ IMPLICIT NONE
+
+ TYPE(haspriv_t) :: struct1
+ TYPE(allpriv_t) :: struct2
+
+ ! This should succeed, not giving value to private component
+ struct1 = haspriv_t (5)
+ struct2 = allpriv_t ()
+
+ ! These should fail
+ struct1 = haspriv_t (1, 2) ! { dg-error "is a PRIVATE component" }
+ struct1 = haspriv_t (b = 2, a = 1) ! { dg-error "is a PRIVATE component" }
+
+ ! This should fail as all components are private
+ struct2 = allpriv_t (5) ! { dg-error "is a PRIVATE component" }
+
+ ! This should fail as the type itself is private, and the expression should
+ ! be deduced as call to an undefined function.
+ WRITE (*,*) ispriv_t (5) ! { dg-error "has no IMPLICIT type" }
+
+END PROGRAM test