This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, Fortran] PR 80668: wrong error message with -finit-derived
- From: Fritz Reese <fritzoreese at gmail dot com>
- To: Dominique d'Humières <dominiq at lps dot ens dot fr>
- Cc: gfortran <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 9 May 2017 12:15:32 -0400
- Subject: Re: [PATCH, Fortran] PR 80668: wrong error message with -finit-derived
- Authentication-results: sourceware.org; auth=none
- References: <2F06A1FC-E134-4468-9EFA-CDCFFD46C44D@lps.ens.fr>
> (1) you don’t need the lines (as in "please don’t use them")
>
> +
> +! { dg-final { cleanup-modules "pr80668" } }
I will remove the "dg-final" lines.
>
> (2) I don’t understand the comments after 'INTEGER,DIMENSION(:),POINTER :: dist’.
(2) Sorry, the comments were meant to show the error that would appear
if the testcase is regressed; i.e., the error that appeared in the
original PR report. If it is too esoteric I can just remove the
comments.
Version 2 attached. OK?
---
Fritz Reese
2017-05-09 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 10a0bdcf222db45208242d0530bc2c69530787c0 Mon Sep 17 00:00:00 2001
From: Fritz Reese <fritzoreese@gmail.com>
Date: Tue, 9 May 2017 12:13:06 -0400
Subject: [PATCH] 2017-05-09 Fritz Reese <fritzoreese@gmail.com>
PR fortran/80668
gcc/fortran/
* expr.c (component_initializer): Don't generate initializers for
pointer components.
* invoke.texi (-finit-derived): Document.
PR fortran/80668
* gcc/testsuite/gfortran.dg/pr80668.f90: New.
---
gcc/fortran/expr.c | 8 ++++++--
gcc/fortran/invoke.texi | 2 ++
gcc/testsuite/gfortran.dg/pr80668.f90 | 29 +++++++++++++++++++++++++++++
3 files changed, 37 insertions(+), 2 deletions(-)
create mode 100644 gcc/testsuite/gfortran.dg/pr80668.f90
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index c8be9513af5..7ea9d8233a9 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -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. */
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 636432fead8..8a1d09dd5e5 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -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.
diff --git a/gcc/testsuite/gfortran.dg/pr80668.f90 b/gcc/testsuite/gfortran.dg/pr80668.f90
new file mode 100644
index 00000000000..63bd0d3d5cd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr80668.f90
@@ -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
--
2.12.2