PR fortran/70870 -- Reject data object with default initialization

Message ID 20180509223210.GC46292@troutmask.apl.washington.edu
State New
Headers show
Series
  • PR fortran/70870 -- Reject data object with default initialization
Related show

Commit Message

Steve Kargl May 9, 2018, 10:32 p.m.
I plan to commit the attach patch on Saturday unless someone objects.

2018-05-09  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/70870
	* data.c (gfc_assign_data_value): Check that a data object does
	not also have default initialization.

2018-05-09  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/70870
	* gfortran.dg/pr70870_1.f90: New test.

Comments

Andre Vehreschild May 10, 2018, 3:23 p.m. | #1
Hi Steve,

ok for trunk.

- Andre

On Wed, 9 May 2018 15:32:10 -0700
Steve Kargl <sgk@troutmask.apl.washington.edu> wrote:

> I plan to commit the attach patch on Saturday unless someone objects.
> 
> 2018-05-09  Steven G. Kargl  <kargl@gcc.gnu.org>
> 
> 	PR fortran/70870
> 	* data.c (gfc_assign_data_value): Check that a data object does
> 	not also have default initialization.
> 
> 2018-05-09  Steven G. Kargl  <kargl@gcc.gnu.org>
> 
> 	PR fortran/70870
> 	* gfortran.dg/pr70870_1.f90: New test.
>

Patch

Index: gcc/fortran/data.c
===================================================================
--- gcc/fortran/data.c	(revision 260000)
+++ gcc/fortran/data.c	(working copy)
@@ -491,6 +491,15 @@  gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rva
     }
   else
     {
+      if (lvalue->ts.type == BT_DERIVED
+	  && gfc_has_default_initializer (lvalue->ts.u.derived))
+	{
+	  gfc_error ("Nonpointer object %qs with default initialization "
+		     "shall not appear in a DATA statement at %L", 
+		     symbol->name, &lvalue->where);
+	  return false;
+	}
+
       /* Overwriting an existing initializer is non-standard but usually only
 	 provokes a warning from other compilers.  */
       if (init != NULL)
Index: gcc/testsuite/gfortran.dg/pr70870_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr70870_1.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr70870_1.f90	(working copy)
@@ -0,0 +1,9 @@ 
+! { dg-do compile }
+! PR fortran/70870
+! Contributed by Vittorio Zecca <zeccav at gmail dot com >
+      type t
+       integer :: g=0   ! default initialization
+      end type
+      type(t) :: v2
+      data v2/t(2)/     ! { dg-error "default initialization shall not" }
+      end