summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/module_commons_3.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/module_commons_3.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/module_commons_3.f9057
1 files changed, 57 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/module_commons_3.f90 b/gcc/testsuite/gfortran.dg/module_commons_3.f90
new file mode 100644
index 000000000..a57863e9a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/module_commons_3.f90
@@ -0,0 +1,57 @@
+! { dg-do run }
+!
+! PR fortran/38657, in which the mixture of PRIVATE and
+! COMMON in TEST4, would mess up the association with
+! TESTCHAR in TEST2.
+!
+! Contributed by Paul Thomas <pault@gcc.gnu.org>
+! From a report in clf by Chris Bradley.
+!
+MODULE TEST4
+ PRIVATE
+ CHARACTER(LEN=80) :: T1 = &
+ "Mary had a little lamb, Its fleece was white as snow;"
+ CHARACTER(LEN=80) :: T2 = &
+ "And everywhere that Mary went, The lamb was sure to go."
+ CHARACTER(LEN=80) :: TESTCHAR
+ COMMON /TESTCOMMON1/ TESTCHAR
+ PUBLIC T1, T2, FOOBAR
+CONTAINS
+ subroutine FOOBAR (CHECK)
+ CHARACTER(LEN=80) :: CHECK
+ IF (TESTCHAR .NE. CHECK) CALL ABORT
+ end subroutine
+END MODULE TEST4
+
+MODULE TEST3
+ CHARACTER(LEN=80) :: TESTCHAR
+ COMMON /TESTCOMMON1/ TESTCHAR
+END MODULE TEST3
+
+MODULE TEST2
+ use TEST4
+ USE TEST3, chr => testchar
+ PRIVATE
+ CHARACTER(LEN=80) :: TESTCHAR
+ COMMON /TESTCOMMON1/ TESTCHAR
+ PUBLIC TESTCHAR, FOO, BAR, CHR, T1, T2, FOOBAR
+contains
+ subroutine FOO
+ TESTCHAR = T1
+ end subroutine
+ subroutine BAR (CHECK)
+ CHARACTER(LEN=80) :: CHECK
+ IF (TESTCHAR .NE. CHECK) CALL ABORT
+ IF (CHR .NE. CHECK) CALL ABORT
+ end subroutine
+END MODULE TEST2
+
+PROGRAM TEST1
+ USE TEST2
+ call FOO
+ call BAR (T1)
+ TESTCHAR = T2
+ call BAR (T2)
+ CALL FOOBAR (T2)
+END PROGRAM TEST1
+! { dg-final { cleanup-modules "TEST2 TEST3 TEST4" } }