https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67523
Bug ID: 67523 Summary: ICE with invalid combined simd inside of a template Product: gcc Version: 5.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jakub at gcc dot gnu.org Target Milestone: --- struct S { int s; }; template <typename T> void foo (T &x, T &y) { #pragma omp for simd for (T i = x; i < y; i++) // { dg-error "used with class iteration variable" } ; #pragma omp parallel for simd for (T i = x; i < y; i++) // { dg-error "used with class iteration variable" } ; #pragma omp target teams distribute parallel for simd for (T i = x; i < y; i++) // { dg-error "used with class iteration variable" } ; #pragma omp target teams distribute simd for (T i = x; i < y; i++) // { dg-error "used with class iteration variable" } ; } void bar () { S x, y; foo <S> (x, y); } ICEs because during instantiation it is harder to find out the inner stmt has been removed and remove the stmts combined/composited with it.