&& (sym->ns->proc_name->backend_decl == current_function_decl
|| sym->result == sym))
gfc_add_decl_to_function (decl);
+ else if (sym->ns->omp_affinity_iterators)
+ {
+ /* Iterator variables are block-local; other variables in the
+ iterator namespace (e.g. implicitly typed host-associated
+ ones used in locator expressions) belong in the enclosing
+ function. */
+ gfc_symbol *iter;
+ for (iter = sym->ns->omp_affinity_iterators; iter;
+ iter = iter->tlink)
+ if (iter == sym)
+ break;
+ if (iter)
+ add_decl_as_local (decl);
+ else
+ gfc_add_decl_to_function (decl);
+ }
else if (sym->ns->proc_name
&& sym->ns->proc_name->attr.flavor == FL_LABEL)
/* This is a BLOCK construct. */
add_decl_as_local (decl);
- else if (sym->ns->omp_affinity_iterators)
- /* This is a block-local iterator. */
- add_decl_as_local (decl);
else
gfc_add_decl_to_parent_function (decl);
}
--- /dev/null
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+!
+! PR fortran/107425
+! ICE in gimplify_var_or_parm_decl when an implicitly typed variable
+! is used as a subscript in an iterator depend clause.
+
+program p
+ integer :: x(8)
+ !$omp taskwait depend(iterator(i=1:8), in:x(j))
+end