brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.5 KiB · 4551676 Raw
209 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 150 %s2 3// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 150 %s4 5// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ferror-limit 150 %s6 7// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ferror-limit 150 %s8 9template <class T>10T tfoobar(T ub[]) {11  static T argc;12  T *ptr;13#pragma omp for14  for (int i = 0; i < 10; ++i) {15#pragma omp scan // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}16    ;17  }18#pragma omp for19  for (int i = 0; i < 10; ++i) {20#pragma omp scan allocate(argc)  // expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp scan'}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}21#pragma omp scan untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp scan'}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}22#pragma omp scan unknown // expected-warning {{extra tokens at the end of '#pragma omp scan' are ignored}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}23  }24#pragma omp for simd reduction(inscan, +: argc)25  for (int i = 0; i < 10; ++i)26    if (argc)27#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}28    if (argc) {29#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}30    }31#pragma omp simd reduction(inscan, +: argc)32  for (int i = 0; i < 10; ++i)33  while (argc)34#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}35    while (argc) {36#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}37    }38#pragma omp simd reduction(inscan, +: argc)39  for (int i = 0; i < 10; ++i)40  do41#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}42    while (argc)43      ;44#pragma omp simd reduction(inscan, +: argc) // expected-error {{the inscan reduction list item must appear as a list item in an 'inclusive' or 'exclusive' clause on an inner 'omp scan' directive}}45  for (int i = 0; i < 10; ++i)46  do {47#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}48  } while (argc);49#pragma omp simd reduction(inscan, +: argc)50  for (int i = 0; i < 10; ++i)51  switch (argc)52#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}53    switch (argc)54    case 1:55#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}56  switch (argc)57  case 1: {58#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}59  }60#pragma omp simd reduction(inscan, +: argc) // expected-error {{the inscan reduction list item must appear as a list item in an 'inclusive' or 'exclusive' clause on an inner 'omp scan' directive}}61  for (int i = 0; i < 10; ++i)62  switch (argc) {63#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}64  case 1:65#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} \66                                    expected-error{{'#pragma omp scan' cannot be an immediate substatement}}67    break;68  default: {69#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}70  } break;71  }72#pragma omp simd reduction(inscan, +: argc)73  for (int i = 0; i < 10; ++i)74  for (;;)75#pragma omp scan exclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}76    for (;;) {77#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}78    }79#pragma omp simd reduction(inscan, +: argc)80  for (int i = 0; i < 10; ++i) {81label:82#pragma omp scan exclusive(argc) // expected-error{{'#pragma omp scan' cannot be an immediate substatement}}83  }84#pragma omp simd reduction(inscan, +: argc)85  for (int i = 0; i < 10; ++i) {86#pragma omp scan inclusive(argc) // expected-note {{previous 'scan' directive used here}}87#pragma omp scan inclusive(argc) // expected-error {{exactly one 'scan' directive must appear in the loop body of an enclosing directive}}88label1 : {89#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}90}}91#pragma omp simd reduction(inscan, +: argc)92  for (int i = 0; i < 10; ++i) {93  #pragma omp scan inclusive(ptr[0:], argc) // expected-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}94  ;95  }96#pragma omp simd reduction(inscan, +: argc)97  for (int i = 0; i < 10; ++i) {98  #pragma omp scan exclusive(argc, ub[:]) // expected-error {{section length is unspecified and cannot be inferred because subscripted value is an array of unknown bound}}99  ;100  }101 102  return T();103}104 105int foobar(int ub[]) {106  static int argc;107  int *ptr;108#pragma omp simd reduction(inscan, +: argc)109  for (int i = 0; i < 10; ++i) {110#pragma omp scan inclusive(argc) inclusive(argc) // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}111  ;112  }113#pragma omp simd reduction(inscan, +: argc)114  for (int i = 0; i < 10; ++i) {115#pragma omp scan exclusive(argc) inclusive(argc) // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}116  ;117  }118#pragma omp simd reduction(inscan, +: argc)119  for (int i = 0; i < 10; ++i) {120#pragma omp scan exclusive(argc) exclusive(argc) // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}121  ;122  }123#pragma omp simd reduction(inscan, +: argc) // expected-error {{the inscan reduction list item must appear as a list item in an 'inclusive' or 'exclusive' clause on an inner 'omp scan' directive}}124  for (int i = 0; i < 10; ++i) {125#pragma omp scan untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp scan'}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}126#pragma omp scan unknown // expected-warning {{extra tokens at the end of '#pragma omp scan' are ignored}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}127  }128#pragma omp simd reduction(inscan, +: argc)129  for (int i = 0; i < 10; ++i)130  if (argc)131#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}132    if (argc) {133#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}134    }135#pragma omp simd reduction(inscan, +: argc)136  for (int i = 0; i < 10; ++i)137  while (argc)138#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}139    while (argc) {140#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}141    }142#pragma omp simd reduction(inscan, +: argc)143  for (int i = 0; i < 10; ++i)144  do145#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}146    while (argc)147      ;148#pragma omp simd reduction(inscan, +: argc)149  for (int i = 0; i < 10; ++i)150  do {151#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}152  } while (argc);153#pragma omp simd reduction(inscan, +: argc)154  for (int i = 0; i < 10; ++i)155  switch (argc)156#pragma omp scan exclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}157    switch (argc)158    case 1:159#pragma omp scan exclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}160  switch (argc)161  case 1: {162#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}163  }164#pragma omp simd reduction(inscan, +: argc)165  for (int i = 0; i < 10; ++i)166  switch (argc) {167#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}168  case 1:169#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} \170                                    expected-error{{'#pragma omp scan' cannot be an immediate substatement}}171    break;172  default: {173#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}174  } break;175  }176#pragma omp simd reduction(inscan, +: argc)177  for (int i = 0; i < 10; ++i)178  for (;;)179#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}180    for (;;) {181#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}182    }183#pragma omp simd reduction(inscan, +: argc)184  for (int i = 0; i < 10; ++i) {185label:186#pragma omp scan inclusive(argc) // expected-error{{'#pragma omp scan' cannot be an immediate substatement}}187  }188#pragma omp simd reduction(inscan, +: argc)189  for (int i = 0; i < 10; ++i) {190#pragma omp scan inclusive(argc) // expected-note {{previous 'scan' directive used here}}191#pragma omp scan inclusive(argc) // expected-error {{exactly one 'scan' directive must appear in the loop body of an enclosing directive}}192label1 : {193#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}194}195}196#pragma omp simd reduction(inscan, +: argc)197  for (int i = 0; i < 10; ++i) {198  #pragma omp scan inclusive(ptr[0:], argc) // expected-error {{section length is unspecified and cannot be inferred because subscripted value is not an array}}199  ;200  }201#pragma omp simd reduction(inscan, +: argc)202  for (int i = 0; i < 10; ++i) {203  #pragma omp scan exclusive(argc, ub[:]) // expected-error {{section length is unspecified and cannot be inferred because subscripted value is an array of unknown bound}}204  ;205  }206 207  return tfoobar<int>(ub); // expected-note {{in instantiation of function template specialization 'tfoobar<int>' requested here}}208}209