diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/resolve.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr45337_1.f90 | 14 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr45337_2.f90 | 18 |
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 } |