+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
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
--- /dev/null
+! 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
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;
*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. */