re PR fortran/71795 (Two Bugs in array constructors (optimization))

2016-07-22  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/71795
	* frontend-passes.c (combine_array_constructor):  Don't
	do anything if the expression is inside an array iterator.

2016-07-22  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/71795
	* gfortran.dg/constructor_50.f90:  New test.

From-SVN: r238638
This commit is contained in:
Thomas Koenig 2016-07-22 10:38:32 +00:00
parent bc91c43615
commit 1603ebe016
4 changed files with 37 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2016-07-22 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/71795
* frontend-passes.c (combine_array_constructor): Don't
do anything if the expression is inside an array iterator.
2016-07-22 Andre Vehreschild <vehre@gcc.gnu.org>
* expr.c (gfc_find_stat_co): Fixed whitespaces.

View File

@ -1255,6 +1255,11 @@ combine_array_constructor (gfc_expr *e)
if (forall_level > 0)
return false;
/* Inside an iterator, things can get hairy; we are likely to create
an invalid temporary variable. */
if (iterator_level > 0)
return false;
op1 = e->value.op.op1;
op2 = e->value.op.op2;

View File

@ -1,3 +1,8 @@
2016-07-22 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/71795
* gfortran.dg/constructor_50.f90: New test.
2016-07-22 Martin Liska <mliska@suse.cz>
PR gcov-profile/69028

View File

@ -0,0 +1,21 @@
! { dg-do run }
! PR 71795 - wrong result when putting an array constructor
! instide an iterator.
program test
implicit none
integer :: i,n
logical, dimension(1) :: ra
logical :: rs
integer, allocatable :: a(:)
allocate ( a(1) )
n = 1
a = 2
ra = (/ (any(a(i).eq.(/1,2,3/)) ,i=1,n) /)
if (.not. all(ra)) call abort
rs = any ( (/ (any(a(i).eq.(/1,2,3/)) ,i=1,n) /) )
if (.not. rs) call abort
end program test