re PR fortran/59440 (ICE in force_decl_die, at dwarf2out.c:20111 with -g)
PR fortran/59440 * tree-nested.c (convert_nonlocal_reference_stmt, convert_local_reference_stmt): For NAMELIST_DECLs in gimple_bind_vars of GIMPLE_BIND stmts, adjust associated decls. * gfortran.dg/pr59440-1.f90: New test. * gfortran.dg/pr59440-2.f90: New test. * gfortran.dg/pr59440-3.f90: New test. From-SVN: r206711
This commit is contained in:
parent
dfc7b927f3
commit
f7d594d251
@ -1,3 +1,10 @@
|
||||
2014-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/59440
|
||||
* tree-nested.c (convert_nonlocal_reference_stmt,
|
||||
convert_local_reference_stmt): For NAMELIST_DECLs in gimple_bind_vars
|
||||
of GIMPLE_BIND stmts, adjust associated decls.
|
||||
|
||||
2014-01-17 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/46590
|
||||
|
@ -1,5 +1,10 @@
|
||||
2014-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/59440
|
||||
* gfortran.dg/pr59440-1.f90: New test.
|
||||
* gfortran.dg/pr59440-2.f90: New test.
|
||||
* gfortran.dg/pr59440-3.f90: New test.
|
||||
|
||||
PR testsuite/59064
|
||||
* gcc.dg/vect/vect-ivdep-1.c: Replace two dg-bogus lines separately
|
||||
testing for " version" and " alias" with one testing for
|
||||
|
23
gcc/testsuite/gfortran.dg/pr59440-1.f90
Normal file
23
gcc/testsuite/gfortran.dg/pr59440-1.f90
Normal file
@ -0,0 +1,23 @@
|
||||
! PR fortran/59440
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O2 -g" }
|
||||
|
||||
module pr59440
|
||||
implicit none
|
||||
type t
|
||||
integer :: grid = 0
|
||||
end type t
|
||||
contains
|
||||
subroutine read_nml (nnml, s)
|
||||
integer, intent(in) :: nnml
|
||||
type(t), intent(out) :: s
|
||||
integer :: grid
|
||||
namelist /N/ grid
|
||||
call read_nml_type_2
|
||||
s%grid = grid
|
||||
contains
|
||||
subroutine read_nml_type_2
|
||||
read (nnml, nml=N)
|
||||
end subroutine read_nml_type_2
|
||||
end subroutine read_nml
|
||||
end module pr59440
|
16
gcc/testsuite/gfortran.dg/pr59440-2.f90
Normal file
16
gcc/testsuite/gfortran.dg/pr59440-2.f90
Normal file
@ -0,0 +1,16 @@
|
||||
! PR fortran/59440
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O2 -g" }
|
||||
|
||||
subroutine foo (nnml, outv)
|
||||
integer, intent(in) :: nnml
|
||||
integer, intent(out) :: outv
|
||||
integer :: grid
|
||||
namelist /N/ grid
|
||||
read (nnml, nml=N)
|
||||
call bar
|
||||
contains
|
||||
subroutine bar
|
||||
outv = grid
|
||||
end subroutine bar
|
||||
end subroutine foo
|
16
gcc/testsuite/gfortran.dg/pr59440-3.f90
Normal file
16
gcc/testsuite/gfortran.dg/pr59440-3.f90
Normal file
@ -0,0 +1,16 @@
|
||||
! PR fortran/59440
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O2 -g" }
|
||||
|
||||
subroutine foo (nnml, outv)
|
||||
integer, intent(in) :: nnml
|
||||
integer, intent(out) :: outv
|
||||
integer :: grid
|
||||
call bar
|
||||
outv = grid
|
||||
contains
|
||||
subroutine bar
|
||||
namelist /N/ grid
|
||||
read (nnml, nml=N)
|
||||
end subroutine bar
|
||||
end subroutine foo
|
@ -1331,6 +1331,25 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
|
||||
if (!optimize && gimple_bind_block (stmt))
|
||||
note_nonlocal_block_vlas (info, gimple_bind_block (stmt));
|
||||
|
||||
for (tree var = gimple_bind_vars (stmt); var; var = DECL_CHAIN (var))
|
||||
if (TREE_CODE (var) == NAMELIST_DECL)
|
||||
{
|
||||
/* Adjust decls mentioned in NAMELIST_DECL. */
|
||||
tree decls = NAMELIST_DECL_ASSOCIATED_DECL (var);
|
||||
tree decl;
|
||||
unsigned int i;
|
||||
|
||||
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (decls), i, decl)
|
||||
{
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
&& (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
|
||||
continue;
|
||||
if (decl_function_context (decl) != info->context)
|
||||
CONSTRUCTOR_ELT (decls, i)->value
|
||||
= get_nonlocal_debug_decl (info, decl);
|
||||
}
|
||||
}
|
||||
|
||||
*handled_ops_p = false;
|
||||
return NULL_TREE;
|
||||
|
||||
@ -1787,6 +1806,36 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
|
||||
*handled_ops_p = false;
|
||||
return NULL_TREE;
|
||||
|
||||
case GIMPLE_BIND:
|
||||
for (tree var = gimple_bind_vars (stmt); var; var = DECL_CHAIN (var))
|
||||
if (TREE_CODE (var) == NAMELIST_DECL)
|
||||
{
|
||||
/* Adjust decls mentioned in NAMELIST_DECL. */
|
||||
tree decls = NAMELIST_DECL_ASSOCIATED_DECL (var);
|
||||
tree decl;
|
||||
unsigned int i;
|
||||
|
||||
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (decls), i, decl)
|
||||
{
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
&& (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
|
||||
continue;
|
||||
if (decl_function_context (decl) == info->context
|
||||
&& !use_pointer_in_frame (decl))
|
||||
{
|
||||
tree field = lookup_field_for_decl (info, decl, NO_INSERT);
|
||||
if (field)
|
||||
{
|
||||
CONSTRUCTOR_ELT (decls, i)->value
|
||||
= get_local_debug_decl (info, decl, field);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*handled_ops_p = false;
|
||||
return NULL_TREE;
|
||||
|
||||
default:
|
||||
/* For every other statement that we are not interested in
|
||||
handling here, let the walker traverse the operands. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user