aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2022-09-20 23:06:19 +0200
committerTobias Burnus <tobias@codesourcery.com>2022-09-20 23:06:19 +0200
commit59f6dea963b5f7a6b9ced325200359b4831e7fa7 (patch)
tree2811f5823664b0cb35eee7b046ff9f310d3acd96 /gcc/testsuite
parent5976fbf9d5dd9542fcb82eebb2185886fd52d000 (diff)
downloadgcc-59f6dea963b5f7a6b9ced325200359b4831e7fa7.zip
gcc-59f6dea963b5f7a6b9ced325200359b4831e7fa7.tar.gz
gcc-59f6dea963b5f7a6b9ced325200359b4831e7fa7.tar.bz2
Fortran: F2018 type(*),dimension(*) with scalars [PR104143]
Assumed-size dummy arguments accept arrays and array elements as actual arguments. There are also a few exceptions when real scalars are permitted. Since F2018, this includes scalar arguments to assumed-type dummies; while type(*) was added in TS29113, this change is only in F2018 itself. PR fortran/104143 gcc/fortran/ChangeLog: * interface.cc (compare_parameter): Permit scalar args to 'type(*), dimension(*)'. gcc/testsuite/ChangeLog: * gfortran.dg/c-interop/c407b-2.f90: Remove dg-error. * gfortran.dg/assumed_type_16.f90: New test. * gfortran.dg/assumed_type_17.f90: New test.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/gfortran.dg/assumed_type_16.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/assumed_type_17.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/c-interop/c407b-2.f902
3 files changed, 33 insertions, 1 deletions
diff --git a/gcc/testsuite/gfortran.dg/assumed_type_16.f90 b/gcc/testsuite/gfortran.dg/assumed_type_16.f90
new file mode 100644
index 0000000..52d8ef5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/assumed_type_16.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! { dg-additional-options "-std=f2008" }
+!
+! PR fortran/104143
+!
+ interface
+ subroutine foo(x)
+ type(*) :: x(*) ! { dg-error "Fortran 2018: Assumed type" }
+ end
+ end interface
+ integer :: a
+ call foo(a) ! { dg-error "Type mismatch in argument" }
+ call foo((a)) ! { dg-error "Type mismatch in argument" }
+end
diff --git a/gcc/testsuite/gfortran.dg/assumed_type_17.f90 b/gcc/testsuite/gfortran.dg/assumed_type_17.f90
new file mode 100644
index 0000000..d6ccd30
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/assumed_type_17.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! { dg-additional-options "-std=f2018 -fdump-tree-original" }
+!
+! PR fortran/104143
+!
+ interface
+ subroutine foo(x)
+ type(*) :: x(*)
+ end
+ end interface
+ integer :: a
+ call foo(a)
+ call foo((a))
+end
+
+! { dg-final { scan-tree-dump-times "foo \\(&a\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = a;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "foo \\(&D.\[0-9\]+\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/c-interop/c407b-2.f90 b/gcc/testsuite/gfortran.dg/c-interop/c407b-2.f90
index 4f9f6c7..49352fc 100644
--- a/gcc/testsuite/gfortran.dg/c-interop/c407b-2.f90
+++ b/gcc/testsuite/gfortran.dg/c-interop/c407b-2.f90
@@ -40,7 +40,7 @@ subroutine s0 (x)
call g (x, 1)
call f (x, 1) ! { dg-error "Type mismatch" }
- call h (x, 1) ! { dg-error "Rank mismatch" }
+ call h (x, 1) ! Scalar to type(*),dimension(*): Invalid in TS29113 but valid since F2018
end subroutine
! Check that you can't use an assumed-type array variable in an array