aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/resolve.c3
-rw-r--r--gcc/testsuite/gfortran.dg/pr45337_1.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/pr45337_2.f9018
3 files changed, 33 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index b1238c8..2751c0c 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -12927,8 +12927,7 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag)
else if (sym->attr.external)
gfc_error ("External %qs at %L cannot have an initializer",
sym->name, &sym->declared_at);
- else if (sym->attr.dummy
- && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
+ else if (sym->attr.dummy)
gfc_error ("Dummy %qs at %L cannot have an initializer",
sym->name, &sym->declared_at);
else if (sym->attr.intrinsic)
diff --git a/gcc/testsuite/gfortran.dg/pr45337_1.f90 b/gcc/testsuite/gfortran.dg/pr45337_1.f90
new file mode 100644
index 0000000..2bb8ff2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr45337_1.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+
+module ptrmod
+contains
+subroutine lengthX(x, i) ! { dg-error "Dummy 'x' at .1. cannot have an initializer" }
+ implicit none
+ real, pointer, intent(out) :: x(:)=>null()
+ integer :: i
+ x=>null()
+ allocate(x(i))
+ x=i
+end subroutine
+end module
+
diff --git a/gcc/testsuite/gfortran.dg/pr45337_2.f90 b/gcc/testsuite/gfortran.dg/pr45337_2.f90
new file mode 100644
index 0000000..ca7a6f5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr45337_2.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+
+type t
+end type t
+type t2
+ integer :: j = 7
+end type t2
+contains
+ subroutine x(a, b, c)
+ intent(out) :: a, b, c
+ type(t) :: a = t()
+ type(t2) :: b = t2()
+ type(t2) :: c
+ end subroutine x
+end
+
+! { dg-error "Dummy .a. at .1. cannot have an initializer" " " { target *-*-* } 9 }
+! { dg-error "Dummy .b. at .1. cannot have an initializer" " " { target *-*-* } 9 }