The attached patch removes one error message and updates several test cases.
I split alloc_comp_constraint_1.f90 into two cases with the addition of alloc_comp_constraint_7.f90. One gets different error messages depending on which standard is invoked, f95 or f2003.
I will do an appropriate Changelog for testsuite. Regression tested on linux-x86_64, OK for trunk? Regards, Jerry 2016-12-05 Jerry DeLisle <jvdeli...@gcc.gnu.org> PR fortran/78659 * resolve.c (resolve_fl_namelist): Remove unneeded error.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 7bc9f5f5..e4ea10f2 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -13900,15 +13900,7 @@ resolve_fl_namelist (gfc_symbol *sym) "or POINTER components", nl->sym->name, sym->name, &sym->declared_at)) return false; - - if (!dtio) - { - gfc_error ("NAMELIST object %qs in namelist %qs at %L has " - "ALLOCATABLE or POINTER components and thus requires " - "a defined input/output procedure", nl->sym->name, - sym->name, &sym->declared_at); - return false; - } + return true; } } diff --git a/gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90 b/gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90 index eb1b1058..e1715256 100644 --- a/gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90 +++ b/gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90 @@ -1,5 +1,6 @@ ! { dg-do compile } -! Check that we don't allow IO or NAMELISTs with types with allocatable +! { dg-options -std=f2003 } +! Check that we don't allow IO of NAMELISTs with types with allocatable ! components (PR 20541) program main @@ -13,8 +14,8 @@ program main type(foo) :: a type(bar) :: b - namelist /blah/ a ! { dg-error "has ALLOCATABLE or POINTER components and thus requires a defined input/output" } - + namelist /blah/ a ! This is allowed under F2003, but not F95 + ! The following require User Defined Derived Type I/O procedures. write (*, *) a ! { dg-error "cannot have ALLOCATABLE components" } read (*, *) b ! { dg-error "cannot have ALLOCATABLE components" } diff --git a/gcc/testsuite/gfortran.dg/alloc_comp_constraint_7.f90 b/gcc/testsuite/gfortran.dg/alloc_comp_constraint_7.f90 new file mode 100644 index 00000000..35b8e1f0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/alloc_comp_constraint_7.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! { dg-options -std=f95 } +! Check that we don't allow types with allocatable +program main + + type :: foo + integer :: k + integer, allocatable :: x(:) ! { dg-error "Fortran 2003: ALLOCATABLE" } + end type foo + + type :: bar + type(foo) :: x + end type bar + + type(foo) :: a + type(bar) :: b + namelist /blah/ a + +end program main diff --git a/gcc/testsuite/gfortran.dg/namelist_34.f90 b/gcc/testsuite/gfortran.dg/namelist_34.f90 index 94327710..be8f49f7 100644 --- a/gcc/testsuite/gfortran.dg/namelist_34.f90 +++ b/gcc/testsuite/gfortran.dg/namelist_34.f90 @@ -1,7 +1,7 @@ ! { dg-do compile } -! +! { dg-options -std=f95 } ! PR fortran/32905 - accepts types with ultimate POINTER components -! +! updated for PR78659 MODULE types type :: tp3 real :: x @@ -22,7 +22,7 @@ MODULE nml USE types type(tp1) :: t1 type(tp3) :: t3 - - namelist /a/ t1 ! { dg-error "has ALLOCATABLE or POINTER components and thus requires a defined input/output" } - namelist /b/ t3 ! { dg-error "has ALLOCATABLE or POINTER components and thus requires a defined input/output" } +! The following are allowed under f2003. + namelist /a/ t1 ! { dg-error "with ALLOCATABLE or POINTER components" } + namelist /b/ t3 ! { dg-error "with ALLOCATABLE or POINTER components" } END MODULE diff --git a/gcc/testsuite/gfortran.dg/namelist_63.f90 b/gcc/testsuite/gfortran.dg/namelist_63.f90 index 02101740..de27b82d 100644 --- a/gcc/testsuite/gfortran.dg/namelist_63.f90 +++ b/gcc/testsuite/gfortran.dg/namelist_63.f90 @@ -1,6 +1,6 @@ ! { dg-do compile } -! -! PR fortran/45530 +! { dg-options -std=f95 } +! PR fortran/45530, updated for PR78659 ! ! Contributed by david.sa...@gmail.com ! @@ -24,5 +24,6 @@ type region_struct end type type (c_struct) curve(10) -namelist / params / curve ! { dg-error "ALLOCATABLE or POINTER components and thus requires a defined input/output" } +! The following is allowed with f2003. +namelist / params / curve ! { dg-error "ALLOCATABLE or POINTER components" } end program