re PR fortran/80668 (wrong error message with -finit-derived)

2017-05-17  Fritz Reese <fritzoreese@gmail.com>

    PR fortran/80668

    gcc/fortran/ChangeLog:

	PR fortran/80668
	* expr.c (component_initializer): Don't generate initializers for
	pointer components.
	* invoke.texi (-finit-derived): Document.

    gcc/testsuite/ChangeLog:

	PR fortran/80668
	* gfortran.dg/pr80668.f90: New.

From-SVN: r248158
This commit is contained in:
Fritz Reese 2017-05-17 15:13:58 +00:00 committed by Fritz Reese
parent 3ca8120f64
commit e5b1f5a1d1
5 changed files with 49 additions and 2 deletions

View file

@ -1,3 +1,10 @@
2017-05-17 Fritz Reese <fritzoreese@gmail.com>
PR fortran/80668
* expr.c (component_initializer): Don't generate initializers for
pointer components.
* invoke.texi (-finit-derived): Document.
2017-05-16 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80554

View file

@ -4280,9 +4280,13 @@ component_initializer (gfc_typespec *ts, gfc_component *c, bool generate)
{
gfc_expr *init = NULL;
/* See if we can find the initializer immediately. */
/* See if we can find the initializer immediately.
Some components should never get initializers. */
if (c->initializer || !generate
|| (ts->type == BT_CLASS && !c->attr.allocatable))
|| (ts->type == BT_CLASS && !c->attr.allocatable)
|| c->attr.pointer
|| c->attr.class_pointer
|| c->attr.proc_pointer)
return c->initializer;
/* Recursively handle derived type components. */

View file

@ -1665,6 +1665,8 @@ according to these flags only with @option{-finit-derived}. These options do
not initialize
@itemize @bullet
@item
objects with the POINTER attribute
@item
allocatable arrays
@item
variables that appear in an @code{EQUIVALENCE} statement.

View file

@ -1,3 +1,8 @@
2017-05-17 Fritz Reese <fritzoreese@gmail.com>
PR fortran/80668
* gfortran.dg/pr80668.f90: New.
2017-05-17 Peter Bergner <bergner@vnet.ibm.com>
PR middle-end/80775

View file

@ -0,0 +1,29 @@
! { dg-do compile }
! { dg-options "-finit-derived -finit-integer=12345678" }
!
! PR fortran/80668
!
! Test a regression where structure constructor expressions were created for
! POINTER components with -finit-derived.
!
MODULE pr80668
IMPLICIT NONE
TYPE :: dist_t
INTEGER :: TYPE,nblks_loc,nblks
INTEGER,DIMENSION(:),POINTER :: dist
END TYPE dist_t
CONTAINS
SUBROUTINE hfx_new()
TYPE(dist_t) :: dist
integer,pointer :: bob
CALL release_dist(dist, bob)
END SUBROUTINE hfx_new
SUBROUTINE release_dist(dist,p)
TYPE(dist_t) :: dist
integer, pointer, intent(in) :: p
END SUBROUTINE release_dist
END MODULE