// { dg-do compile { target c++11 } }
void
foo (int x)
{
  [[omp::directive (parallel)]]
  #pragma omp for						// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  for (int i = 0; i < 16; i++)
    ;
  [[omp::directive (barrier)]]					// { dg-error "standalone OpenMP directives in 'omp::directive' attribute can only appear on an empty statement" }
  #pragma omp flush
  ;
  #pragma omp parallel
  [[omp::directive (master)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp teams
  [[omp::sequence (directive (parallel), directive (master))]]	// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp task
  [[omp::directive (flush)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp master
  [[omp::directive (flush)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp for ordered
  for (int i = 0; i < 16; i++)
    #pragma omp ordered
    [[omp::directive (flush)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
    ;
  #pragma omp single
  [[omp::directive (flush)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp taskgroup
  [[omp::directive (taskyield)]]				// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp target data map (tofrom: x)
  [[omp::directive (flush)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp target
  [[omp::directive (teams)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  [[omp::directive (parallel)]]
  #pragma omp master						// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  [[omp::sequence (omp::directive (taskloop))]]			// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  for (int i = 0; i < 16; i++)
    ;
  #pragma omp parallel
  [[omp::directive (for)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  for (int i = 0; i < 16; i++)
    ;
  #pragma omp for
  [[omp::directive (master)]]					// { dg-error "for statement expected before '\\\[' token" }
  ;
  #pragma omp target teams
  [[omp::directive (parallel)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  ;
  #pragma omp parallel master
  [[omp::directive (taskloop)]]					// { dg-error "mixing OpenMP directives with attribute and pragma syntax on the same statement" }
  for (int i = 0; i < 16; i++)
    ;
}