// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s

template <class T>
T tmain(T argc) {
#pragma omp barrier
  ;
#pragma omp barrier untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp barrier'}}
#pragma omp barrier unknown // expected-warning {{extra tokens at the end of '#pragma omp barrier' are ignored}}
  if (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    if (argc) {
#pragma omp barrier
    }
  while (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    while (argc) {
#pragma omp barrier
    }
  do
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    while (argc)
      ;
  do {
#pragma omp barrier
  } while (argc);
  switch (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    switch (argc)
    case 1:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
  switch (argc)
  case 1: {
#pragma omp barrier
  }
  switch (argc) {
#pragma omp barrier
  case 1:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    break;
  default: {
#pragma omp barrier
  } break;
  }
  for (;;)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    for (;;) {
#pragma omp barrier
    }
label:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
label1 : {
#pragma omp barrier
}

  return T();
}

int main(int argc, char **argv) {
#pragma omp barrier
  ;
#pragma omp barrier untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp barrier'}}
#pragma omp barrier unknown // expected-warning {{extra tokens at the end of '#pragma omp barrier' are ignored}}
  if (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    if (argc) {
#pragma omp barrier
    }
  while (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    while (argc) {
#pragma omp barrier
    }
  do
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    while (argc)
      ;
  do {
#pragma omp barrier
  } while (argc);
  switch (argc)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    switch (argc)
    case 1:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
  switch (argc)
  case 1: {
#pragma omp barrier
  }
  switch (argc) {
#pragma omp barrier
  case 1:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    break;
  default: {
#pragma omp barrier
  } break;
  }
  for (;;)
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
    for (;;) {
#pragma omp barrier
    }
label:
#pragma omp barrier // expected-error {{'#pragma omp barrier' cannot be an immediate substatement}}
label1 : {
#pragma omp barrier
}

  return tmain(argc);
}
