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.

Reply via email to