https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102854
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> --- For the non-template case (with int / IndexType reversed, (ups!)): finish_omp_for's vec<tree> *orig_inits is an empty vector but for the template, it isn't (it contains '0' and 'i'); thus, the following check is run and fails: FOR_EACH_VEC_ELT (*orig_inits, i, orig_init) if (orig_init && !c_omp_check_loop_iv_exprs (locus, The reason is that type_dependent_expression_p (decl) == true in cp_parser_omp_for_loop_init.