Bug 17737 - ICE when variable appears in two data statements
Summary: ICE when variable appears in two data statements
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.0.0
: P2 normal
Target Milestone: 4.0.3
Assignee: Not yet assigned to anyone
URL:
Keywords: accepts-invalid, monitored
: 23884 25312 (view as bug list)
Depends on:
Blocks: 19292
  Show dependency treegraph
 
Reported: 2004-09-29 20:21 UTC by Erik Schnetter
Modified: 2005-12-08 18:14 UTC (History)
5 users (show)

See Also:
Host: i686-pc-linux-gnu
Target: i686-pc-linux-gnu
Build: i686-pc-linux-gnu
Known to work: 3.4.2
Known to fail: 4.0.0 4.1.0
Last reconfirmed: 2005-10-23 21:37:44


Attachments
failing source code (4.18 KB, text/plain)
2004-09-29 20:22 UTC, Erik Schnetter
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Erik Schnetter 2004-09-29 20:21:49 UTC
The attached code leads to an ICE when compiled with 
 
GNU Fortran 95 (GCC 4.0.0 20040928 (experimental)) 
 
with the options 
 
-ffixed-line-length-none -c -march=pentium4 -malign-double -g3 
 
The error message is 
 
city3s.f:0: internal compiler error: in gfc_assign_data_value, at 
fortran/data.c:319 
 
Note that the source code contains a data statement that is supposed to fill a 
character variable, and the value given is longer than the variable.
Comment 1 Erik Schnetter 2004-09-29 20:22:35 UTC
Created attachment 7241 [details]
failing source code
Comment 2 Volker Reichelt 2004-09-30 15:07:48 UTC
Confirmed.

The problem is that the same variable appears in two data statements.
Just compile the following testcase without command-line parameters:

====================
	integer	i
	data i/0/
	data i/0/
	end
====================

This works with the lno branch that was merged 20040718.
So I suppose this worked on mainline then, too.
It also worked with g77, so I'm rating this as a regression.
Comment 3 Tobias Schlüter 2004-10-02 20:48:21 UTC
This is invalid code. See page 49 of the draft standard. A variable shall not
have more than one explicit initialization. DATA statements count as explicit
initialization.
Comment 4 Tobias Schlüter 2004-10-02 20:48:53 UTC
(In reply to comment #3)
> This is invalid code. See page 49 of the draft standard. 
The draft fortran 95 standard.
Comment 5 Andrew Pinski 2005-09-14 19:29:58 UTC
*** Bug 23884 has been marked as a duplicate of this bug. ***
Comment 6 Sergio Emanuel Galembeck 2005-09-28 16:32:12 UTC
(In reply to comment #5)
> *** Bug 23884 has been marked as a duplicate of this bug. ***

Bug 23884 is not a duplicate of this bug, because there is no repeated
data statements in module.F
Comment 7 Steven Bosscher 2005-10-23 21:16:00 UTC
This doesn't ICE for me.

So this should be "accepts-invalid" now, or we could call it a GNU extension and only disallow it in stricter standard enforcement modes.  Or we could just close it.

Erik, your bug, so your call.  ;-)
Comment 8 Erik Schnetter 2005-10-23 21:35:31 UTC
I don't see the point of allowing a variable to be initialised twice.  This should be an error, or at least a warning by default.  That would make it an "accepts-invalid".
Comment 9 Steven Bosscher 2005-10-23 21:37:44 UTC
Alright, accepts-invalid it is for GCC 4.1.
Comment 10 Richard Biener 2005-10-27 11:18:45 UTC
*** Bug 24554 has been marked as a duplicate of this bug. ***
Comment 11 Paul Thomas 2005-11-06 20:05:20 UTC
Subject: Bug 17737

Author: pault
Date: Sun Nov  6 20:05:12 2005
New Revision: 106567

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=106567
Log:
2005-11-06  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/24534
	* resolve.c (resolve_symbol): Exclude case of PRIVATE declared
	within derived type from error associated with PRIVATE type
	components within derived type.

	PR fortran/20838
	PR fortran/20840
	* gfortran.h: Add prototype for gfc_has_vector_index.
	* io.c (gfc_resolve_dt): Error if internal unit has a vector index.
	* expr.c (gfc_has_vector_index): New function to check if any of
	the array references of an expression have vector inidices.
	(gfc_check_pointer_assign): Error if internal unit has a vector index.

	PR fortran/17737
	* data.c (gfc_assign_data_value): Remove gcc_assert that caused the ICE
	and replace by a standard dependent warning/error if overwriting an
	existing initialization.
	* decl.c (gfc_data_variable): Remove old error for already initialized
	variable and the unused error check for common block variables.  Add
	error for hots associated variable and standard dependent error for
	common block variables, outside of blockdata.
	* symbol.c (check_conflict): Add constraints for DATA statement.

2005-11-06  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/24534
	gfortran.dg/private_type_2.f90: Modified to check that case with
	PRIVATE declaration within derived type is accepted.

	PR fortran/20838
	gfortran.dg/pointer_assign_1.f90: New test.

	PR fortran/20840
	* gfortran.dg/arrayio_0.f90: New test.

	PR fortran/17737
	gfortran.dg/data_initialized.f90: New test.
	gfortran.dg/data_constraints_1.f90: New test.
	gfortran.dg/data_constraints_2.f90: New test.


Added:
    trunk/gcc/testsuite/gfortran.dg/arrayio_0.f90   (with props)
    trunk/gcc/testsuite/gfortran.dg/data_constraints_1.f90
    trunk/gcc/testsuite/gfortran.dg/data_constraints_2.f90
    trunk/gcc/testsuite/gfortran.dg/data_initialized.f90
    trunk/gcc/testsuite/gfortran.dg/pointer_assign_1.f90   (with props)
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/data.c
    trunk/gcc/fortran/decl.c
    trunk/gcc/fortran/expr.c
    trunk/gcc/fortran/gfortran.h
    trunk/gcc/fortran/io.c
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/symbol.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/private_type_2.f90

Added: trunk/gcc/testsuite/gfortran.dg/arrayio_0.f90
URL: http://gcc.gnu.org/viewcvs/trunk/gcc/testsuite/gfortran.dg/arrayio_0.f90?root=gcc&view=auto&rev=106567
==============================================================================
--- trunk/gcc/testsuite/gfortran.dg/arrayio_0.f90 (added)
+++ trunk/gcc/testsuite/gfortran.dg/arrayio_0.f90 Sun Nov  6 20:05:12 2005
@@ -1,0 +1,19 @@
+! { dg-do compile }
+! Tests fix for PR20840 - would ICE with vector subscript in 
+! internal unit.
+!
+! Contributed by Paul Thomas  <pault@gcc.gnu.org>
+!
+  character(len=12), dimension(4) :: iu, buff
+  character(len=48), dimension(2) :: iue
+  equivalence (iu, iue)
+  integer, dimension(4) :: v = (/2,1,4,3/)
+  iu = (/"Vector","subscripts","not","allowed!"/)
+  read (iu, '(a12/)') buff
+  read (iue(1), '(4a12)') buff
+  read (iu(4:1:-1), '(a12/)') buff
+  read (iu(v), '(a12/)') buff           ! { dg-error "with vector subscript" }
+  read (iu((/2,4,3,1/)), '(a12/)') buff ! { dg-error "with vector subscript" }
+  print *, buff
+  end
+

Propchange: trunk/gcc/testsuite/gfortran.dg/arrayio_0.f90
            ('svn:executable' added)

Added: trunk/gcc/testsuite/gfortran.dg/pointer_assign_1.f90
URL: http://gcc.gnu.org/viewcvs/trunk/gcc/testsuite/gfortran.dg/pointer_assign_1.f90?root=gcc&view=auto&rev=106567
==============================================================================
--- trunk/gcc/testsuite/gfortran.dg/pointer_assign_1.f90 (added)
+++ trunk/gcc/testsuite/gfortran.dg/pointer_assign_1.f90 Sun Nov  6 20:05:12 2005
@@ -1,0 +1,17 @@
+! { dg-do compile }
+! Tests fix for PR20838 - would ICE with vector subscript in 
+! pointer assignment.
+!
+! Contributed by Paul Thomas  <pault@gcc.gnu.org>
+!
+  integer, parameter, dimension(3) :: i = (/2,1,3/)
+  integer, dimension(3), target   :: tar
+  integer, dimension(2, 3), target   :: tar2
+  integer, dimension(:), pointer  :: ptr
+  ptr => tar
+  ptr => tar(3:1:-1)
+  ptr => tar(i)     ! { dg-error "with vector subscript" }
+  ptr => tar2(1, :)
+  ptr => tar2(2, i) ! { dg-error "with vector subscript" }
+  end
+

Propchange: trunk/gcc/testsuite/gfortran.dg/pointer_assign_1.f90
            ('svn:executable' added)


Comment 12 Paul Thomas 2005-11-06 22:50:51 UTC
Subject: Bug 17737

Author: pault
Date: Sun Nov  6 22:50:38 2005
New Revision: 106572

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=106572
Log:
2005-11-06  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/24534
	* resolve.c (resolve_symbol): Exclude case of PRIVATE declared
	within derived type from error associated with PRIVATE type
	components within derived type.

	PR fortran/20838
	PR fortran/20840
	* gfortran.h: Add prototype for gfc_has_vector_index.
	* io.c (gfc_resolve_dt): Error if internal unit has a vector index.
	* expr.c (gfc_has_vector_index): New function to check if any of
	the array references of an expression have vector inidices.
	(gfc_check_pointer_assign): Error if internal unit has a vector index.

	PR fortran/17737
	* data.c (gfc_assign_data_value): Remove gcc_assert that caused the ICE
	and replace by a standard dependent warning/error if overwriting an
	existing initialization.
	* decl.c (gfc_data_variable): Remove old error for already initialized
	variable and the unused error check for common block variables.  Add
	error for host associated variable and standard dependent error for
	common block variables, outside of blockdata.
	* symbol.c (check_conflict): Add constraints for DATA statement.

2005-11-06  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/24534
	gfortran.dg/private_type_2.f90: Modified to check that case with
	PRIVATE declaration within derived type is accepted.

	PR fortran/20838
	gfortran.dg/pointer_assign_1.f90: New test.

	PR fortran/20840
	* gfortran.dg/arrayio_0.f90: New test.

	PR fortran/17737
	gfortran.dg/data_initialized.f90: New test.
	gfortran.dg/data_constraints_1.f90: New test.
	gfortran.dg/data_constraints_2.f90: New test.


Added:
    branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/arrayio_0.f90   (with props)
    branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/data_constraints_1.f90
    branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/data_constraints_2.f90
    branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/data_initialized.f90
    branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/pointer_assign_1.f90   (with props)
Modified:
    branches/gcc-4_0-branch/gcc/fortran/ChangeLog
    branches/gcc-4_0-branch/gcc/fortran/data.c
    branches/gcc-4_0-branch/gcc/fortran/decl.c
    branches/gcc-4_0-branch/gcc/fortran/expr.c
    branches/gcc-4_0-branch/gcc/fortran/gfortran.h
    branches/gcc-4_0-branch/gcc/fortran/io.c
    branches/gcc-4_0-branch/gcc/fortran/resolve.c
    branches/gcc-4_0-branch/gcc/fortran/symbol.c
    branches/gcc-4_0-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/private_type_2.f90

Added: branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/arrayio_0.f90
URL: http://gcc.gnu.org/viewcvs/branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/arrayio_0.f90?root=gcc&view=auto&rev=106572
==============================================================================
--- branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/arrayio_0.f90 (added)
+++ branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/arrayio_0.f90 Sun Nov  6 22:50:38 2005
@@ -1,0 +1,19 @@
+! { dg-do compile }
+! Tests fix for PR20840 - would ICE with vector subscript in 
+! internal unit.
+!
+! Contributed by Paul Thomas  <pault@gcc.gnu.org>
+!
+  character(len=12), dimension(4) :: iu, buff
+  character(len=48), dimension(2) :: iue
+  equivalence (iu, iue)
+  integer, dimension(4) :: v = (/2,1,4,3/)
+  iu = (/"Vector","subscripts","not","allowed!"/)
+  read (iu, '(a12/)') buff
+  read (iue(1), '(4a12)') buff
+  read (iu(4:1:-1), '(a12/)') buff
+  read (iu(v), '(a12/)') buff           ! { dg-error "with vector subscript" }
+  read (iu((/2,4,3,1/)), '(a12/)') buff ! { dg-error "with vector subscript" }
+  print *, buff
+  end
+

Propchange: branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/arrayio_0.f90
            ('svn:executable' added)

Added: branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/pointer_assign_1.f90
URL: http://gcc.gnu.org/viewcvs/branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/pointer_assign_1.f90?root=gcc&view=auto&rev=106572
==============================================================================
--- branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/pointer_assign_1.f90 (added)
+++ branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/pointer_assign_1.f90 Sun Nov  6 22:50:38 2005
@@ -1,0 +1,17 @@
+! { dg-do compile }
+! Tests fix for PR20838 - would ICE with vector subscript in 
+! pointer assignment.
+!
+! Contributed by Paul Thomas  <pault@gcc.gnu.org>
+!
+  integer, parameter, dimension(3) :: i = (/2,1,3/)
+  integer, dimension(3), target   :: tar
+  integer, dimension(2, 3), target   :: tar2
+  integer, dimension(:), pointer  :: ptr
+  ptr => tar
+  ptr => tar(3:1:-1)
+  ptr => tar(i)     ! { dg-error "with vector subscript" }
+  ptr => tar2(1, :)
+  ptr => tar2(2, i) ! { dg-error "with vector subscript" }
+  end
+

Propchange: branches/gcc-4_0-branch/gcc/testsuite/gfortran.dg/pointer_assign_1.f90
            ('svn:executable' added)


Comment 13 Paul Thomas 2005-11-06 22:55:14 UTC
Fixed on mainline and 4.0
Comment 14 Andrew Pinski 2005-12-08 17:49:21 UTC
*** Bug 25312 has been marked as a duplicate of this bug. ***
Comment 15 Sergio Emanuel Galembeck 2005-12-08 18:10:50 UTC
Subject: Re:  ICE when variable appears in two data statements

This is not a duplicated bug, because I recently installed the 
last version of gcc and recompiled the operational system.
Why is this problem not solved?

       Best regards,

                            Sergio
Citando pinskia at gcc dot gnu dot org <gcc-bugzilla@gcc.gnu.org>:

> 
> 
> ------- Comment #14 from pinskia at gcc dot gnu dot org  2005-12-08 17:49
> -------
> *** Bug 25312 has been marked as a duplicate of this bug. ***
> 
> 
> -- 
> 
> 
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17737
> 
> ------- You are receiving this mail because: -------
> You are on the CC list for the bug, or are watching someone who is.
> 

Comment 16 Andrew Pinski 2005-12-08 18:14:35 UTC
(In reply to comment #15)
> Subject: Re:  ICE when variable appears in two data statements
> This is not a duplicated bug, because I recently installed the 
> last version of gcc and recompiled the operational system.
> Why is this problem not solved?

4.0.3 has not been released yet.  It has been fixed for 4.0.3 and 4.1.0 both of which are currently CVS/SVN versions only with a snapshot provided for both of them.