Bug 35947 - [4.3, 4.4 regression] wrong answers with array constructor argument to IEOR
Summary: [4.3, 4.4 regression] wrong answers with array constructor argument to IEOR
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.4.0
: P4 normal
Target Milestone: 4.3.1
Assignee: Paul Thomas
URL:
Keywords: wrong-code
Depends on:
Blocks:
 
Reported: 2008-04-15 15:51 UTC by Dick Hendrickson
Modified: 2008-04-19 22:32 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2008-04-19 08:36:54


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dick Hendrickson 2008-04-15 15:51:02 UTC
The following program gives wrong answers when an array
is used in an array constructor as an argument to IEOR.

Dick Hendrickson

      program try_fa6077

! fails on Windows XP
! gcc version 4.4.0 20080312 (experimental) [trunk revision 133139]

      call       fa6077 (  10,  1, -1, (/1,2,3,4,5,6,7,8,9,10/))
      end

      subroutine FA6077 (nf10,nf1,mf1, ida)
      INTEGER IDA1(10)
      INTEGER IDA2(10), ida(10)


      IDA1 = IEOR((/1,2,3,4,5,6,7,8,9,10/),
     $            (/(IDA(J1),J1=10,1,-1)/) )

      IDA2 = IEOR ((/1,2,3,4,5,6,7,8,9,10/), (/10,9,8,7,6,5,4,3,2,1/) )

      print '(10i3)', (/1,2,3,4,5,6,7,8,9,10/), 
     $                (/10,9,8,7,6,5,4,3,2,1/),ida1,ida2
      END SUBROUTINE
c:\gfortran:gfortran fa6077.f

c:\gfortran:a
  1  2  3  4  5  6  7  8  9 10
 10  9  8  7  6  5  4  3  2  1
  8 10  4  2  0  2  4 10  8 10
 11 11 11  3  3  3  3 11 11 11
Comment 1 Thomas Koenig 2008-04-16 18:19:41 UTC
Confirmed, a regression:

$ gfortran foo.f
$ ./a.out
  1  2  3  4  5  6  7  8  9 10
 10  9  8  7  6  5  4  3  2  1
  8 10  4  2  0  2  4 10  8***
 11 11 11  3  3  3  3 11 11 11
$ ifort foo.f   
$ ./a.out
  1  2  3  4  5  6  7  8  9 10
 10  9  8  7  6  5  4  3  2  1
 11 11 11  3  3  3  3 11 11 11
 11 11 11  3  3  3  3 11 11 11
$ gfortran-4.2 foo.f
$ ./a.out
  1  2  3  4  5  6  7  8  9 10
 10  9  8  7  6  5  4  3  2  1
 11 11 11  3  3  3  3 11 11 11
 11 11 11  3  3  3  3 11 11 11
$ gfortran-4.3 -static foo.f
$ ./a.out
  1  2  3  4  5  6  7  8  9 10
 10  9  8  7  6  5  4  3  2  1
  8 10  4  2  0  2  4 10  8 10
 11 11 11  3  3  3  3 11 11 11
Comment 2 Jerry DeLisle 2008-04-19 07:58:54 UTC
I have started a regression hunt on this one.  If any one finds the problem, let me know, the hunt could take a while.
Comment 3 Paul Thomas 2008-04-19 08:36:54 UTC
(In reply to comment #2)
> I have started a regression hunt on this one.  If any one finds the problem,
> let me know, the hunt could take a while.
> 

Jerry,

In fixing PR35946, I have fixed this fella too:)

Call off the hounds!

Cheers

Paul
Comment 4 Paul Thomas 2008-04-19 21:56:18 UTC
Subject: Bug 35947

Author: pault
Date: Sat Apr 19 21:55:24 2008
New Revision: 134472

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=134472
Log:
2008-04-19  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/35944
	PR fortran/35946
	PR fortran/35947
	* trans_array.c (gfc_trans_array_constructor): Temporarily
	realign loop, if loop->from is not zero, before creating
	the temporary array and provide an offset.

	PR fortran/35959
	* trans-decl.c (gfc_init_default_dt): Add gfc_ prefix to name
	and allow for NULL body.  Change all references from
	init_default_dt to gfc_init_default_dt.
	* trans.h : Add prototype for gfc_init_default_dt.
	* trans-array.c (gfc_trans_deferred_vars): After nullification
	call gfc_init_default_dt for derived types with allocatable
	components.

2008-04-19  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/35944
	PR fortran/35946
	PR fortran/35947
	* gfortran.dg/array_constructor_23.f: New test.

	PR fortran/35959
	* gfortran.dg/alloc_comp_default_init_2.f90: New test.
	* gfortran.dg/alloc_comp_basics_1.f90: Change occurrences of
	"builtin_free" to 27.
	* gfortran.dg/alloc_comp_constructor_1.f90: Change occurrences
	of "builtin_free" to 21.

Added:
    trunk/gcc/testsuite/gfortran.dg/alloc_comp_default_init_2.f90
    trunk/gcc/testsuite/gfortran.dg/array_constructor_23.f
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/trans-array.c
    trunk/gcc/fortran/trans-decl.c
    trunk/gcc/fortran/trans.h
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
    trunk/gcc/testsuite/gfortran.dg/alloc_comp_constructor_1.f90

Comment 5 Paul Thomas 2008-04-19 22:31:02 UTC
Subject: Bug 35947

Author: pault
Date: Sat Apr 19 22:30:03 2008
New Revision: 134475

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=134475
Log:
2008-04-19  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/35944
	PR fortran/35946
	PR fortran/35947
	* trans_array.c (gfc_trans_array_constructor): Temporarily
	realign loop, if loop->from is not zero, before creating
	the temporary array and provide an offset.

	PR fortran/35959
	* trans-decl.c (gfc_init_default_dt): Add gfc_ prefix to name
	and allow for NULL body.  Change all references from
	init_default_dt to gfc_init_default_dt.
	* trans.h : Add prototype for gfc_init_default_dt.
	* trans-array.c (gfc_trans_deferred_vars): After nullification
	call gfc_init_default_dt for derived types with allocatable
	components.

2008-04-19  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/35944
	PR fortran/35946
	PR fortran/35947
	* gfortran.dg/array_constructor_23.f: New test.

	PR fortran/35959
	* gfortran.dg/alloc_comp_default_init_2.f90: New test.
	* gfortran.dg/alloc_comp_basics_1.f90: Change occurrences of
	"builtin_free" to 27.
	* gfortran.dg/alloc_comp_constructor_1.f90: Change occurrences
	of "builtin_free" to 21.

Added:
    branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/alloc_comp_default_init_2.f90
    branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/array_constructor_23.f
Modified:
    branches/gcc-4_3-branch/gcc/fortran/ChangeLog
    branches/gcc-4_3-branch/gcc/fortran/trans-array.c
    branches/gcc-4_3-branch/gcc/fortran/trans-decl.c
    branches/gcc-4_3-branch/gcc/fortran/trans.h
    branches/gcc-4_3-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
    branches/gcc-4_3-branch/gcc/testsuite/gfortran.dg/alloc_comp_constructor_1.f90

Comment 6 Paul Thomas 2008-04-19 22:32:22 UTC
Fixed on trunk and 4.3.

Thanks for the report.

Paul