Commit 8e9218f2 by Andre Vehreschild

re PR fortran/70524 (ICE when using -frepack-arrays -Warray-temporaries)

gcc/testsuite/ChangeLog:

2016-08-08  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70524
	* gfortran.dg/dependency_48.f90: New test.


gcc/fortran/ChangeLog:

2016-08-08  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70524
	* trans-array.c (gfc_trans_dummy_array_bias): Ensure that the
	location information is correctly set.
	* trans-decl.c (gfc_trans_deferred_vars): Set the locus of the
	current construct early.

From-SVN: r239230
parent 1b8256df
2016-08-08 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70524
* trans-array.c (gfc_trans_dummy_array_bias): Ensure that the
location information is correctly set.
* trans-decl.c (gfc_trans_deferred_vars): Set the locus of the
current construct early.
2016-08-03 Fritz Reese <fritzoreese@gmail.com> 2016-08-03 Fritz Reese <fritzoreese@gmail.com>
* lang.opt: New option -fdec-intrinsic-ints. * lang.opt: New option -fdec-intrinsic-ints.
......
...@@ -6103,7 +6103,12 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc, ...@@ -6103,7 +6103,12 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc,
return; return;
} }
loc.nextc = NULL;
gfc_save_backend_locus (&loc); gfc_save_backend_locus (&loc);
/* loc.nextc is not set by save_backend_locus but the location routines
depend on it. */
if (loc.nextc == NULL)
loc.nextc = loc.lb->line;
gfc_set_backend_locus (&sym->declared_at); gfc_set_backend_locus (&sym->declared_at);
/* Descriptor type. */ /* Descriptor type. */
......
...@@ -4087,6 +4087,8 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) ...@@ -4087,6 +4087,8 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
else if (proc_sym->as) else if (proc_sym->as)
{ {
tree result = TREE_VALUE (current_fake_result_decl); tree result = TREE_VALUE (current_fake_result_decl);
gfc_save_backend_locus (&loc);
gfc_set_backend_locus (&proc_sym->declared_at);
gfc_trans_dummy_array_bias (proc_sym, result, block); gfc_trans_dummy_array_bias (proc_sym, result, block);
/* An automatic character length, pointer array result. */ /* An automatic character length, pointer array result. */
...@@ -4096,8 +4098,6 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) ...@@ -4096,8 +4098,6 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
tmp = NULL; tmp = NULL;
if (proc_sym->ts.deferred) if (proc_sym->ts.deferred)
{ {
gfc_save_backend_locus (&loc);
gfc_set_backend_locus (&proc_sym->declared_at);
gfc_start_block (&init); gfc_start_block (&init);
tmp = gfc_null_and_pass_deferred_len (proc_sym, &init, &loc); tmp = gfc_null_and_pass_deferred_len (proc_sym, &init, &loc);
gfc_add_init_cleanup (block, gfc_finish_block (&init), tmp); gfc_add_init_cleanup (block, gfc_finish_block (&init), tmp);
......
2016-08-08 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70524
* gfortran.dg/dependency_48.f90: New test.
2016-08-07 Thomas Koenig <tkoenig@gcc.gnu.org> 2016-08-07 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/70040 PR fortran/70040
......
! { dg-do compile }
! { dg-options "-frepack-arrays -Warray-temporaries -O" }
! Same as dependency_35 but with repack-arrays
module foo
implicit none
contains
pure function bar(i,j) ! { dg-warning "Creating array temporary at \\(1\\)" }
integer, intent(in) :: i,j
integer, dimension(2,2) :: bar
bar = 33
end function bar
end module foo
program main
use foo
implicit none
integer a(2,2), b(2,2),c(2,2), d(2,2), e(2)
read (*,*) b, c, d
a = matmul(b,c) + d
a = b + bar(3,4)
a = bar(3,4)*5 + b
e = sum(b,1) + 3
end program main
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment