brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · 7ddc48c Raw
370 lines · cpp
1// RUN: %clang_cc1 %s -verify -fopenacc -fcxx-exceptions2 3 4void ReturnTest() {5#pragma acc parallel6  {7    (void)[]() { return; };8  }9 10#pragma acc parallel loop11  for (int i = 0; i < 5; ++i) {12    (void)[]() { return; };13  }14 15 16#pragma acc parallel17  {18    try {}19    catch(...){20      return; // expected-error{{invalid return out of OpenACC Compute/Combined Construct}}21    }22  }23#pragma acc parallel loop24  for (int i = 0; i < 5; ++i) {25    try {}26    catch(...){27      return; // expected-error{{invalid return out of OpenACC Compute/Combined Construct}}28    }29  }30}31 32template<typename T>33void BreakContinue() {34#pragma acc parallel35  for(int i =0; i < 5; ++i) {36    switch(i) {37      case 0:38      break; // leaves switch, not 'for'.39      default:40      i +=2;41      break;42    }43    if (i == 2)44      continue;45 46    break;  // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}47  }48#pragma acc parallel loop49  for(int i =0; i < 5; ++i) {50    switch(i) {51      case 0:52      break; // leaves switch, not 'for'.53      default:54      i +=2;55      break;56    }57    if (i == 2)58      continue;59 60    break;  // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}61  }62 63  int j;64  switch(j) {65    case 0:66#pragma acc parallel67    {68      break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}69    }70    case 1:71#pragma acc parallel72    {73    }74    break;75  }76  switch(j) {77    case 0:78#pragma acc parallel loop79    for (int i = 0; i < 5; ++i) {80      break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}81    }82    case 1:83#pragma acc parallel loop84    for (int i = 0; i < 5; ++i) {85    }86    break;87  }88 89#pragma acc parallel90  for(int i = 0; i < 5; ++i) {91    if (i > 1)92      break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}93  }94 95#pragma acc parallel loop96  for(int i = 0; i < 5; ++i) {97    if (i > 1)98      break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}99  }100 101#pragma acc parallel102  switch(j) {103    case 1:104      break;105  }106 107#pragma acc parallel loop108  for (int i = 0; i < 5; ++i)109    switch(j) {110      case 1:111        break;112    }113 114#pragma acc parallel115  {116    for(int i = 1; i < 100; i++) {117      if (i > 4)118        break;119    }120  }121 122  for (int i =0; i < 5; ++i) {123#pragma acc parallel124    {125      continue; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}126    }127  }128 129#pragma acc parallel130  for (int i =0; i < 5; ++i) {131    continue;132  }133 134#pragma acc parallel loop135  for (int i =0; i < 5; ++i) {136    continue;137  }138 139#pragma acc parallel140  for (int i =0; i < 5; ++i) {141    {142      continue;143    }144  }145 146#pragma acc parallel loop147  for (int i =0; i < 5; ++i) {148    {149      continue;150    }151  }152 153  for (int i =0; i < 5; ++i) {154#pragma acc parallel155    {156      break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}157    }158  }159 160#pragma acc parallel161  while (j) {162    --j;163    if (j > 4)164      break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}165  }166 167#pragma acc parallel168  do {169    --j;170    if (j > 4)171      break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}172  } while (j );173}174 175template<typename T>176void DuffsDevice() {177  int j;178  switch (j) {179#pragma acc parallel180  for(int i =0; i < 5; ++i) {181    case 0: // expected-error{{invalid branch into OpenACC Compute/Combined Construct}}182      {}183  }184  }185 186  switch (j) {187#pragma acc parallel loop188  for(int i =0; i < 5; ++i) {189    case 0: // expected-error{{invalid branch into OpenACC Compute/Combined Construct}}190      {}191  }192  }193 194  switch (j) {195#pragma acc parallel196  for(int i =0; i < 5; ++i) {197    default: // expected-error{{invalid branch into OpenACC Compute/Combined Construct}}198      {}199  }200  }201 202  switch (j) {203#pragma acc parallel loop204  for(int i =0; i < 5; ++i) {205    default: // expected-error{{invalid branch into OpenACC Compute/Combined Construct}}206      {}207  }208  }209 210  switch (j) {211#pragma acc parallel212  for(int i =0; i < 5; ++i) {213    case 'a' ... 'z': // expected-error{{invalid branch into OpenACC Compute/Combined Construct}}214      {}215  }216  }217 218  switch (j) {219#pragma acc parallel loop220  for(int i =0; i < 5; ++i) {221    case 'a' ... 'z': // expected-error{{invalid branch into OpenACC Compute/Combined Construct}}222      {}223  }224  }225}226 227void Exceptions() {228#pragma acc parallel229  for(int i = 0; i < 5; ++i) {230    throw 5; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}231  }232 233#pragma acc parallel loop234  for(int i = 0; i < 5; ++i) {235    throw 5; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}236  }237 238#pragma acc parallel239  for(int i = 0; i < 5; ++i) {240    throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}241  }242 243#pragma acc parallel loop244  for(int i = 0; i < 5; ++i) {245    throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}246  }247 248#pragma acc serial249  for(int i = 0; i < 5; ++i) {250    throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}251  }252 253#pragma acc serial loop254  for(int i = 0; i < 5; ++i) {255    throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}256  }257 258#pragma acc kernels259  for(int i = 0; i < 5; ++i) {260    throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}261  }262 263#pragma acc kernels loop264  for(int i = 0; i < 5; ++i) {265    throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}266  }267 268#pragma acc parallel269  for(int i = 0; i < 5; ++i) {270    try {271    throw 5;272    } catch(float f) {273    }274  }275 276#pragma acc parallel loop277  for(int i = 0; i < 5; ++i) {278    try {279    throw 5;280    } catch(float f) {281    }282  }283 284#pragma acc parallel285  for(int i = 0; i < 5; ++i) {286    try {287    throw 5;288    } catch(int f) {289    }290  }291 292#pragma acc parallel loop293  for(int i = 0; i < 5; ++i) {294    try {295    throw 5;296    } catch(int f) {297    }298  }299 300#pragma acc parallel301  for(int i = 0; i < 5; ++i) {302    try {303    throw 5;304    } catch(...) {305    }306  }307 308#pragma acc parallel loop309  for(int i = 0; i < 5; ++i) {310    try {311    throw 5;312    } catch(...) {313    }314  }315 316#pragma acc parallel317  for(int i = 0; i < 5; ++i) {318    try {319    throw;320    } catch(...) {321    }322  }323 324#pragma acc parallel loop325  for(int i = 0; i < 5; ++i) {326    try {327    throw;328    } catch(...) {329    }330  }331 332#pragma acc parallel333  for(int i = 0; i < 5; ++i) {334    try {335    throw;336    } catch(...) {337      throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}338    }339  }340#pragma acc parallel loop341  for(int i = 0; i < 5; ++i) {342    try {343    throw;344    } catch(...) {345      throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}346    }347  }348#pragma acc parallel349  for(int i = 0; i < 5; ++i) {350    try {351    throw;352    } catch(int f) {353      throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}354    }355  }356#pragma acc parallel loop357  for(int i = 0; i < 5; ++i) {358    try {359    throw;360    } catch(int f) {361      throw; // expected-error{{invalid throw out of OpenACC Compute/Combined Construct}}362    }363  }364}365 366void Instantiate() {367  BreakContinue<int>();368  DuffsDevice<int>();369}370