1 // expected-no-diagnostics 2 #ifndef HEADER 3 #define HEADER 4 5 // RUN: %clang_cc1 -DOMP45 -verify -fopenmp -fopenmp-version=45 -ast-print %s | FileCheck %s --check-prefix=OMP45 6 // RUN: %clang_cc1 -DOMP45 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s 7 // RUN: %clang_cc1 -DOMP45 -fopenmp -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix=OMP45 8 9 // RUN: %clang_cc1 -DOMP45 -verify -fopenmp-simd -fopenmp-version=45 -ast-print %s | FileCheck %s --check-prefix=OMP45 10 // RUN: %clang_cc1 -DOMP45 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s 11 // RUN: %clang_cc1 -DOMP45 -fopenmp-simd -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix=OMP45 12 #ifdef OMP45 13 14 void foo() {} 15 16 template <typename T, int C> 17 T tmain(T argc, T *argv) { 18 T i, j, a[20], always, close; 19 #pragma omp target 20 foo(); 21 #pragma omp target if (target:argc > 0) 22 foo(); 23 #pragma omp target if (C) 24 foo(); 25 #pragma omp target map(i) 26 foo(); 27 #pragma omp target map(a[0:10], i) 28 foo(); 29 #pragma omp target map(to: i) map(from: j) 30 foo(); 31 #pragma omp target map(always,alloc: i) 32 foo(); 33 #pragma omp target map(always from: i) 34 foo(); 35 #pragma omp target map(always) 36 {always++;} 37 #pragma omp target map(always,i) 38 {always++;i++;} 39 #pragma omp target map(close,alloc: i) 40 foo(); 41 #pragma omp target map(close from: i) 42 foo(); 43 #pragma omp target map(close) 44 {close++;} 45 #pragma omp target map(close,i) 46 {close++;i++;} 47 #pragma omp target nowait 48 foo(); 49 #pragma omp target depend(in : argc, argv[i:argc], a[:]) 50 foo(); 51 #pragma omp target defaultmap(tofrom: scalar) 52 foo(); 53 return 0; 54 } 55 56 // OMP45: template <typename T, int C> T tmain(T argc, T *argv) { 57 // OMP45-NEXT: T i, j, a[20] 58 // OMP45-NEXT: #pragma omp target{{$}} 59 // OMP45-NEXT: foo(); 60 // OMP45-NEXT: #pragma omp target if(target: argc > 0) 61 // OMP45-NEXT: foo() 62 // OMP45-NEXT: #pragma omp target if(C) 63 // OMP45-NEXT: foo() 64 // OMP45-NEXT: #pragma omp target map(tofrom: i) 65 // OMP45-NEXT: foo() 66 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i) 67 // OMP45-NEXT: foo() 68 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j) 69 // OMP45-NEXT: foo() 70 // OMP45-NEXT: #pragma omp target map(always,alloc: i) 71 // OMP45-NEXT: foo() 72 // OMP45-NEXT: #pragma omp target map(always,from: i) 73 // OMP45-NEXT: foo() 74 // OMP45-NEXT: #pragma omp target map(tofrom: always) 75 // OMP45-NEXT: { 76 // OMP45-NEXT: always++; 77 // OMP45-NEXT: } 78 // OMP45-NEXT: #pragma omp target map(tofrom: always,i) 79 // OMP45-NEXT: { 80 // OMP45-NEXT: always++; 81 // OMP45-NEXT: i++; 82 // OMP45-NEXT: } 83 // OMP45-NEXT: #pragma omp target map(close,alloc: i) 84 // OMP45-NEXT: foo() 85 // OMP45-NEXT: #pragma omp target map(close,from: i) 86 // OMP45-NEXT: foo() 87 // OMP45-NEXT: #pragma omp target map(tofrom: close) 88 // OMP45-NEXT: { 89 // OMP45-NEXT: close++; 90 // OMP45-NEXT: } 91 // OMP45-NEXT: #pragma omp target map(tofrom: close,i) 92 // OMP45-NEXT: { 93 // OMP45-NEXT: close++; 94 // OMP45-NEXT: i++; 95 // OMP45-NEXT: } 96 // OMP45-NEXT: #pragma omp target nowait 97 // OMP45-NEXT: foo() 98 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 99 // OMP45-NEXT: foo() 100 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar) 101 // OMP45-NEXT: foo() 102 // OMP45: template<> int tmain<int, 5>(int argc, int *argv) { 103 // OMP45-NEXT: int i, j, a[20] 104 // OMP45-NEXT: #pragma omp target 105 // OMP45-NEXT: foo(); 106 // OMP45-NEXT: #pragma omp target if(target: argc > 0) 107 // OMP45-NEXT: foo() 108 // OMP45-NEXT: #pragma omp target if(5) 109 // OMP45-NEXT: foo() 110 // OMP45-NEXT: #pragma omp target map(tofrom: i) 111 // OMP45-NEXT: foo() 112 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i) 113 // OMP45-NEXT: foo() 114 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j) 115 // OMP45-NEXT: foo() 116 // OMP45-NEXT: #pragma omp target map(always,alloc: i) 117 // OMP45-NEXT: foo() 118 // OMP45-NEXT: #pragma omp target map(always,from: i) 119 // OMP45-NEXT: foo() 120 // OMP45-NEXT: #pragma omp target map(tofrom: always) 121 // OMP45-NEXT: { 122 // OMP45-NEXT: always++; 123 // OMP45-NEXT: } 124 // OMP45-NEXT: #pragma omp target map(tofrom: always,i) 125 // OMP45-NEXT: { 126 // OMP45-NEXT: always++; 127 // OMP45-NEXT: i++; 128 // OMP45-NEXT: } 129 // OMP45-NEXT: #pragma omp target map(close,alloc: i) 130 // OMP45-NEXT: foo() 131 // OMP45-NEXT: #pragma omp target map(close,from: i) 132 // OMP45-NEXT: foo() 133 // OMP45-NEXT: #pragma omp target map(tofrom: close) 134 // OMP45-NEXT: { 135 // OMP45-NEXT: close++; 136 // OMP45-NEXT: } 137 // OMP45-NEXT: #pragma omp target map(tofrom: close,i) 138 // OMP45-NEXT: { 139 // OMP45-NEXT: close++; 140 // OMP45-NEXT: i++; 141 // OMP45-NEXT: } 142 // OMP45-NEXT: #pragma omp target nowait 143 // OMP45-NEXT: foo() 144 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 145 // OMP45-NEXT: foo() 146 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar) 147 // OMP45-NEXT: foo() 148 // OMP45: template<> char tmain<char, 1>(char argc, char *argv) { 149 // OMP45-NEXT: char i, j, a[20] 150 // OMP45-NEXT: #pragma omp target 151 // OMP45-NEXT: foo(); 152 // OMP45-NEXT: #pragma omp target if(target: argc > 0) 153 // OMP45-NEXT: foo() 154 // OMP45-NEXT: #pragma omp target if(1) 155 // OMP45-NEXT: foo() 156 // OMP45-NEXT: #pragma omp target map(tofrom: i) 157 // OMP45-NEXT: foo() 158 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i) 159 // OMP45-NEXT: foo() 160 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j) 161 // OMP45-NEXT: foo() 162 // OMP45-NEXT: #pragma omp target map(always,alloc: i) 163 // OMP45-NEXT: foo() 164 // OMP45-NEXT: #pragma omp target map(always,from: i) 165 // OMP45-NEXT: foo() 166 // OMP45-NEXT: #pragma omp target map(tofrom: always) 167 // OMP45-NEXT: { 168 // OMP45-NEXT: always++; 169 // OMP45-NEXT: } 170 // OMP45-NEXT: #pragma omp target map(tofrom: always,i) 171 // OMP45-NEXT: { 172 // OMP45-NEXT: always++; 173 // OMP45-NEXT: i++; 174 // OMP45-NEXT: } 175 // OMP45-NEXT: #pragma omp target map(close,alloc: i) 176 // OMP45-NEXT: foo() 177 // OMP45-NEXT: #pragma omp target map(close,from: i) 178 // OMP45-NEXT: foo() 179 // OMP45-NEXT: #pragma omp target map(tofrom: close) 180 // OMP45-NEXT: { 181 // OMP45-NEXT: close++; 182 // OMP45-NEXT: } 183 // OMP45-NEXT: #pragma omp target map(tofrom: close,i) 184 // OMP45-NEXT: { 185 // OMP45-NEXT: close++; 186 // OMP45-NEXT: i++; 187 // OMP45-NEXT: } 188 // OMP45-NEXT: #pragma omp target nowait 189 // OMP45-NEXT: foo() 190 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 191 // OMP45-NEXT: foo() 192 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar) 193 // OMP45-NEXT: foo() 194 195 // OMP45-LABEL: class S { 196 class S { 197 void foo() { 198 // OMP45-NEXT: void foo() { 199 int a = 0; 200 // OMP45-NEXT: int a = 0; 201 #pragma omp target map(this[0]) 202 // OMP45-NEXT: #pragma omp target map(tofrom: this[0]) 203 a++; 204 // OMP45-NEXT: a++; 205 #pragma omp target map(this[:1]) 206 // OMP45-NEXT: #pragma omp target map(tofrom: this[:1]) 207 a++; 208 // OMP45-NEXT: a++; 209 #pragma omp target map((this)[0]) 210 // OMP45-NEXT: #pragma omp target map(tofrom: (this)[0]) 211 a++; 212 // OMP45-NEXT: a++; 213 #pragma omp target map(this[:a]) 214 // OMP45-NEXT: #pragma omp target map(tofrom: this[:a]) 215 a++; 216 // OMP45-NEXT: a++; 217 #pragma omp target map(this[a:1]) 218 // OMP45-NEXT: #pragma omp target map(tofrom: this[a:1]) 219 a++; 220 // OMP45-NEXT: a++; 221 #pragma omp target map(this[a]) 222 // OMP45-NEXT: #pragma omp target map(tofrom: this[a]) 223 a++; 224 // OMP45-NEXT: a++; 225 } 226 // OMP45-NEXT: } 227 }; 228 // OMP45-NEXT: }; 229 230 // OMP45-LABEL: int main(int argc, char **argv) { 231 int main (int argc, char **argv) { 232 int i, j, a[20], always, close; 233 // OMP45-NEXT: int i, j, a[20] 234 #pragma omp target 235 // OMP45-NEXT: #pragma omp target 236 foo(); 237 // OMP45-NEXT: foo(); 238 #pragma omp target if (argc > 0) 239 // OMP45-NEXT: #pragma omp target if(argc > 0) 240 foo(); 241 // OMP45-NEXT: foo(); 242 243 #pragma omp target map(i) if(argc>0) 244 // OMP45-NEXT: #pragma omp target map(tofrom: i) if(argc > 0) 245 foo(); 246 // OMP45-NEXT: foo(); 247 248 #pragma omp target map(i) 249 // OMP45-NEXT: #pragma omp target map(tofrom: i) 250 foo(); 251 // OMP45-NEXT: foo(); 252 253 #pragma omp target map(a[0:10], i) 254 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i) 255 foo(); 256 // OMP45-NEXT: foo(); 257 258 #pragma omp target map(to: i) map(from: j) 259 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j) 260 foo(); 261 // OMP45-NEXT: foo(); 262 263 #pragma omp target map(always,alloc: i) 264 // OMP45-NEXT: #pragma omp target map(always,alloc: i) 265 foo(); 266 // OMP45-NEXT: foo(); 267 268 #pragma omp target map(always from: i) 269 // OMP45-NEXT: #pragma omp target map(always,from: i) 270 foo(); 271 // OMP45-NEXT: foo(); 272 273 #pragma omp target map(always) 274 // OMP45-NEXT: #pragma omp target map(tofrom: always) 275 {always++;} 276 // OMP45-NEXT: { 277 // OMP45-NEXT: always++; 278 // OMP45-NEXT: } 279 280 #pragma omp target map(always,i) 281 // OMP45-NEXT: #pragma omp target map(tofrom: always,i) 282 {always++;i++;} 283 // OMP45-NEXT: { 284 // OMP45-NEXT: always++; 285 // OMP45-NEXT: i++; 286 // OMP45-NEXT: } 287 288 #pragma omp target map(close,alloc: i) 289 // OMP45-NEXT: #pragma omp target map(close,alloc: i) 290 foo(); 291 // OMP45-NEXT: foo(); 292 293 #pragma omp target map(close from: i) 294 // OMP45-NEXT: #pragma omp target map(close,from: i) 295 foo(); 296 // OMP45-NEXT: foo(); 297 298 #pragma omp target map(close) 299 // OMP45-NEXT: #pragma omp target map(tofrom: close) 300 {close++;} 301 // OMP45-NEXT: { 302 // OMP45-NEXT: close++; 303 // OMP45-NEXT: } 304 305 #pragma omp target map(close,i) 306 // OMP45-NEXT: #pragma omp target map(tofrom: close,i) 307 {close++;i++;} 308 // OMP45-NEXT: { 309 // OMP45-NEXT: close++; 310 // OMP45-NEXT: i++; 311 // OMP45-NEXT: } 312 313 #pragma omp target nowait 314 // OMP45-NEXT: #pragma omp target nowait 315 foo(); 316 // OMP45-NEXT: foo(); 317 318 #pragma omp target depend(in : argc, argv[i:argc], a[:]) 319 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 320 foo(); 321 // OMP45-NEXT: foo(); 322 323 #pragma omp target defaultmap(tofrom: scalar) 324 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar) 325 foo(); 326 // OMP45-NEXT: foo(); 327 328 return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]); 329 } 330 331 #endif 332 333 #ifdef OMP5 334 335 ///==========================================================================/// 336 // RUN: %clang_cc1 -DOMP5 -verify -fopenmp -fopenmp-version=50 -ast-print %s | FileCheck %s --check-prefix OMP5 337 // RUN: %clang_cc1 -DOMP5 -fopenmp -fopenmp-version=50 -x c++ -std=c++11 -emit-pch -o %t %s 338 // RUN: %clang_cc1 -DOMP5 -fopenmp -fopenmp-version=50 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix OMP5 339 340 // RUN: %clang_cc1 -DOMP5 -verify -fopenmp-simd -fopenmp-version=50 -ast-print %s | FileCheck %s --check-prefix OMP5 341 // RUN: %clang_cc1 -DOMP5 -fopenmp-simd -fopenmp-version=50 -x c++ -std=c++11 -emit-pch -o %t %s 342 // RUN: %clang_cc1 -DOMP5 -fopenmp-simd -fopenmp-version=50 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix OMP5 343 344 void foo() {} 345 346 #pragma omp declare target 347 void bar() {} 348 #pragma omp end declare target 349 350 int a; 351 #pragma omp declare target link(a) 352 353 template <typename T, int C> 354 T tmain(T argc, T *argv) { 355 T i, j, a[20], always, close; 356 #pragma omp target 357 foo(); 358 #pragma omp target if (target:argc > 0) 359 foo(); 360 #pragma omp target if (C) 361 foo(); 362 #pragma omp target map(i) 363 foo(); 364 #pragma omp target map(a[0:10], i) 365 foo(); 366 #pragma omp target map(to: i) map(from: j) 367 foo(); 368 #pragma omp target map(always,alloc: i) 369 foo(); 370 #pragma omp target map(always from: i) 371 foo(); 372 #pragma omp target map(always) 373 {always++;} 374 #pragma omp target map(always,i) 375 {always++;i++;} 376 #pragma omp target map(close,alloc: i) 377 foo(); 378 #pragma omp target map(close from: i) 379 foo(); 380 #pragma omp target map(close) 381 {close++;} 382 #pragma omp target map(close,i) 383 {close++;i++;} 384 #pragma omp target nowait 385 foo(); 386 #pragma omp target depend(in : argc, argv[i:argc], a[:]) 387 foo(); 388 #pragma omp target defaultmap(alloc: scalar) 389 foo(); 390 #pragma omp target defaultmap(to: scalar) 391 foo(); 392 #pragma omp target defaultmap(from: scalar) 393 foo(); 394 #pragma omp target defaultmap(tofrom: scalar) 395 foo(); 396 #pragma omp target defaultmap(firstprivate: scalar) 397 foo(); 398 #pragma omp target defaultmap(none: scalar) 399 foo(); 400 #pragma omp target defaultmap(default: scalar) 401 foo(); 402 #pragma omp target defaultmap(alloc: aggregate) 403 foo(); 404 #pragma omp target defaultmap(to: aggregate) 405 foo(); 406 #pragma omp target defaultmap(from: aggregate) 407 foo(); 408 #pragma omp target defaultmap(tofrom: aggregate) 409 foo(); 410 #pragma omp target defaultmap(firstprivate: aggregate) 411 foo(); 412 #pragma omp target defaultmap(none: aggregate) 413 foo(); 414 #pragma omp target defaultmap(default: aggregate) 415 foo(); 416 #pragma omp target defaultmap(alloc: pointer) 417 foo(); 418 #pragma omp target defaultmap(to: pointer) 419 foo(); 420 #pragma omp target defaultmap(from: pointer) 421 foo(); 422 #pragma omp target defaultmap(tofrom: pointer) 423 foo(); 424 #pragma omp target defaultmap(firstprivate: pointer) 425 foo(); 426 #pragma omp target defaultmap(none: pointer) 427 foo(); 428 #pragma omp target defaultmap(default: pointer) 429 foo(); 430 #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer) 431 foo(); 432 #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate) 433 foo(); 434 #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar) 435 foo(); 436 #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer) 437 foo(); 438 #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar) 439 foo(); 440 441 int *g; 442 443 #pragma omp target is_device_ptr(g) defaultmap(none: pointer) 444 g++; 445 #pragma omp target private(g) defaultmap(none: pointer) 446 g++; 447 #pragma omp target firstprivate(g) defaultmap(none: pointer) 448 g++; 449 #pragma omp target defaultmap(none: scalar) map(to: i) 450 i++; 451 #pragma omp target defaultmap(none: aggregate) map(to: a) 452 a[3]++; 453 #pragma omp target defaultmap(none: scalar) 454 bar(); 455 456 return 0; 457 } 458 459 // OMP5: template <typename T, int C> T tmain(T argc, T *argv) { 460 // OMP5-NEXT: T i, j, a[20] 461 // OMP5-NEXT: #pragma omp target{{$}} 462 // OMP5-NEXT: foo(); 463 // OMP5-NEXT: #pragma omp target if(target: argc > 0) 464 // OMP5-NEXT: foo() 465 // OMP5-NEXT: #pragma omp target if(C) 466 // OMP5-NEXT: foo() 467 // OMP5-NEXT: #pragma omp target map(tofrom: i) 468 // OMP5-NEXT: foo() 469 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i) 470 // OMP5-NEXT: foo() 471 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j) 472 // OMP5-NEXT: foo() 473 // OMP5-NEXT: #pragma omp target map(always,alloc: i) 474 // OMP5-NEXT: foo() 475 // OMP5-NEXT: #pragma omp target map(always,from: i) 476 // OMP5-NEXT: foo() 477 // OMP5-NEXT: #pragma omp target map(tofrom: always) 478 // OMP5-NEXT: { 479 // OMP5-NEXT: always++; 480 // OMP5-NEXT: } 481 // OMP5-NEXT: #pragma omp target map(tofrom: always,i) 482 // OMP5-NEXT: { 483 // OMP5-NEXT: always++; 484 // OMP5-NEXT: i++; 485 // OMP5-NEXT: } 486 // OMP5-NEXT: #pragma omp target map(close,alloc: i) 487 // OMP5-NEXT: foo() 488 // OMP5-NEXT: #pragma omp target map(close,from: i) 489 // OMP5-NEXT: foo() 490 // OMP5-NEXT: #pragma omp target map(tofrom: close) 491 // OMP5-NEXT: { 492 // OMP5-NEXT: close++; 493 // OMP5-NEXT: } 494 // OMP5-NEXT: #pragma omp target map(tofrom: close,i) 495 // OMP5-NEXT: { 496 // OMP5-NEXT: close++; 497 // OMP5-NEXT: i++; 498 // OMP5-NEXT: } 499 // OMP5-NEXT: #pragma omp target nowait 500 // OMP5-NEXT: foo() 501 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 502 // OMP5-NEXT: foo() 503 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar) 504 // OMP5-NEXT: foo() 505 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) 506 // OMP5-NEXT: foo() 507 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar) 508 // OMP5-NEXT: foo() 509 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar) 510 // OMP5-NEXT: foo() 511 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar) 512 // OMP5-NEXT: foo() 513 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) 514 // OMP5-NEXT: foo() 515 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar) 516 // OMP5-NEXT: foo() 517 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) 518 // OMP5-NEXT: foo() 519 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate) 520 // OMP5-NEXT: foo() 521 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate) 522 // OMP5-NEXT: foo() 523 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) 524 // OMP5-NEXT: foo() 525 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate) 526 // OMP5-NEXT: foo() 527 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) 528 // OMP5-NEXT: foo() 529 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) 530 // OMP5-NEXT: foo() 531 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer) 532 // OMP5-NEXT: foo() 533 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer) 534 // OMP5-NEXT: foo() 535 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) 536 // OMP5-NEXT: foo() 537 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer) 538 // OMP5-NEXT: foo() 539 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer) 540 // OMP5-NEXT: foo() 541 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer) 542 // OMP5-NEXT: foo() 543 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer) 544 // OMP5-NEXT: foo() 545 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer) 546 // OMP5-NEXT: foo() 547 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate) 548 // OMP5-NEXT: foo() 549 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar) 550 // OMP5-NEXT: foo() 551 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer) 552 // OMP5-NEXT: foo() 553 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar) 554 // OMP5-NEXT: foo() 555 // OMP5: template<> int tmain<int, 5>(int argc, int *argv) { 556 // OMP5-NEXT: int i, j, a[20] 557 // OMP5-NEXT: #pragma omp target 558 // OMP5-NEXT: foo(); 559 // OMP5-NEXT: #pragma omp target if(target: argc > 0) 560 // OMP5-NEXT: foo() 561 // OMP5-NEXT: #pragma omp target if(5) 562 // OMP5-NEXT: foo() 563 // OMP5-NEXT: #pragma omp target map(tofrom: i) 564 // OMP5-NEXT: foo() 565 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i) 566 // OMP5-NEXT: foo() 567 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j) 568 // OMP5-NEXT: foo() 569 // OMP5-NEXT: #pragma omp target map(always,alloc: i) 570 // OMP5-NEXT: foo() 571 // OMP5-NEXT: #pragma omp target map(always,from: i) 572 // OMP5-NEXT: foo() 573 // OMP5-NEXT: #pragma omp target map(tofrom: always) 574 // OMP5-NEXT: { 575 // OMP5-NEXT: always++; 576 // OMP5-NEXT: } 577 // OMP5-NEXT: #pragma omp target map(tofrom: always,i) 578 // OMP5-NEXT: { 579 // OMP5-NEXT: always++; 580 // OMP5-NEXT: i++; 581 // OMP5-NEXT: } 582 // OMP5-NEXT: #pragma omp target map(close,alloc: i) 583 // OMP5-NEXT: foo() 584 // OMP5-NEXT: #pragma omp target map(close,from: i) 585 // OMP5-NEXT: foo() 586 // OMP5-NEXT: #pragma omp target map(tofrom: close) 587 // OMP5-NEXT: { 588 // OMP5-NEXT: close++; 589 // OMP5-NEXT: } 590 // OMP5-NEXT: #pragma omp target map(tofrom: close,i) 591 // OMP5-NEXT: { 592 // OMP5-NEXT: close++; 593 // OMP5-NEXT: i++; 594 // OMP5-NEXT: } 595 // OMP5-NEXT: #pragma omp target nowait 596 // OMP5-NEXT: foo() 597 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 598 // OMP5-NEXT: foo() 599 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar) 600 // OMP5-NEXT: foo() 601 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) 602 // OMP5-NEXT: foo() 603 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar) 604 // OMP5-NEXT: foo() 605 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar) 606 // OMP5-NEXT: foo() 607 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar) 608 // OMP5-NEXT: foo() 609 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) 610 // OMP5-NEXT: foo() 611 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar) 612 // OMP5-NEXT: foo() 613 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) 614 // OMP5-NEXT: foo() 615 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate) 616 // OMP5-NEXT: foo() 617 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate) 618 // OMP5-NEXT: foo() 619 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) 620 // OMP5-NEXT: foo() 621 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate) 622 // OMP5-NEXT: foo() 623 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) 624 // OMP5-NEXT: foo() 625 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) 626 // OMP5-NEXT: foo() 627 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer) 628 // OMP5-NEXT: foo() 629 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer) 630 // OMP5-NEXT: foo() 631 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) 632 // OMP5-NEXT: foo() 633 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer) 634 // OMP5-NEXT: foo() 635 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer) 636 // OMP5-NEXT: foo() 637 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer) 638 // OMP5-NEXT: foo() 639 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer) 640 // OMP5-NEXT: foo() 641 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer) 642 // OMP5-NEXT: foo() 643 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate) 644 // OMP5-NEXT: foo() 645 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar) 646 // OMP5-NEXT: foo() 647 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer) 648 // OMP5-NEXT: foo() 649 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar) 650 // OMP5-NEXT: foo() 651 // OMP5: template<> char tmain<char, 1>(char argc, char *argv) { 652 // OMP5-NEXT: char i, j, a[20] 653 // OMP5-NEXT: #pragma omp target 654 // OMP5-NEXT: foo(); 655 // OMP5-NEXT: #pragma omp target if(target: argc > 0) 656 // OMP5-NEXT: foo() 657 // OMP5-NEXT: #pragma omp target if(1) 658 // OMP5-NEXT: foo() 659 // OMP5-NEXT: #pragma omp target map(tofrom: i) 660 // OMP5-NEXT: foo() 661 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i) 662 // OMP5-NEXT: foo() 663 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j) 664 // OMP5-NEXT: foo() 665 // OMP5-NEXT: #pragma omp target map(always,alloc: i) 666 // OMP5-NEXT: foo() 667 // OMP5-NEXT: #pragma omp target map(always,from: i) 668 // OMP5-NEXT: foo() 669 // OMP5-NEXT: #pragma omp target map(tofrom: always) 670 // OMP5-NEXT: { 671 // OMP5-NEXT: always++; 672 // OMP5-NEXT: } 673 // OMP5-NEXT: #pragma omp target map(tofrom: always,i) 674 // OMP5-NEXT: { 675 // OMP5-NEXT: always++; 676 // OMP5-NEXT: i++; 677 // OMP5-NEXT: } 678 // OMP5-NEXT: #pragma omp target map(close,alloc: i) 679 // OMP5-NEXT: foo() 680 // OMP5-NEXT: #pragma omp target map(close,from: i) 681 // OMP5-NEXT: foo() 682 // OMP5-NEXT: #pragma omp target map(tofrom: close) 683 // OMP5-NEXT: { 684 // OMP5-NEXT: close++; 685 // OMP5-NEXT: } 686 // OMP5-NEXT: #pragma omp target map(tofrom: close,i) 687 // OMP5-NEXT: { 688 // OMP5-NEXT: close++; 689 // OMP5-NEXT: i++; 690 // OMP5-NEXT: } 691 // OMP5-NEXT: #pragma omp target nowait 692 // OMP5-NEXT: foo() 693 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 694 // OMP5-NEXT: foo() 695 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar) 696 // OMP5-NEXT: foo() 697 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) 698 // OMP5-NEXT: foo() 699 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar) 700 // OMP5-NEXT: foo() 701 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar) 702 // OMP5-NEXT: foo() 703 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar) 704 // OMP5-NEXT: foo() 705 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) 706 // OMP5-NEXT: foo() 707 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar) 708 // OMP5-NEXT: foo() 709 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) 710 // OMP5-NEXT: foo() 711 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate) 712 // OMP5-NEXT: foo() 713 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate) 714 // OMP5-NEXT: foo() 715 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) 716 // OMP5-NEXT: foo() 717 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate) 718 // OMP5-NEXT: foo() 719 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) 720 // OMP5-NEXT: foo() 721 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) 722 // OMP5-NEXT: foo() 723 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer) 724 // OMP5-NEXT: foo() 725 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer) 726 // OMP5-NEXT: foo() 727 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) 728 // OMP5-NEXT: foo() 729 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer) 730 // OMP5-NEXT: foo() 731 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer) 732 // OMP5-NEXT: foo() 733 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer) 734 // OMP5-NEXT: foo() 735 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer) 736 // OMP5-NEXT: foo() 737 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer) 738 // OMP5-NEXT: foo() 739 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate) 740 // OMP5-NEXT: foo() 741 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar) 742 // OMP5-NEXT: foo() 743 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer) 744 // OMP5-NEXT: foo() 745 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar) 746 // OMP5-NEXT: foo() 747 // OMP5-NEXT: int *g; 748 // OMP5-NEXT: #pragma omp target is_device_ptr(g) defaultmap(none: pointer) 749 // OMP5-NEXT: g++; 750 // OMP5-NEXT: #pragma omp target private(g) defaultmap(none: pointer) 751 // OMP5-NEXT: g++; 752 // OMP5-NEXT: #pragma omp target firstprivate(g) defaultmap(none: pointer) 753 // OMP5-NEXT: g++; 754 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) map(to: i) 755 // OMP5-NEXT: i++; 756 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) map(to: a) 757 // OMP5-NEXT: a[3]++; 758 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) 759 // OMP5-NEXT: bar(); 760 761 // OMP5-LABEL: class S { 762 class S { 763 void foo() { 764 // OMP5-NEXT: void foo() { 765 int a = 0; 766 // OMP5-NEXT: int a = 0; 767 #pragma omp target map(this[0]) 768 // OMP5-NEXT: #pragma omp target map(tofrom: this[0]) 769 a++; 770 // OMP5-NEXT: a++; 771 #pragma omp target map(this[:1]) 772 // OMP5-NEXT: #pragma omp target map(tofrom: this[:1]) 773 a++; 774 // OMP5-NEXT: a++; 775 #pragma omp target map((this)[0]) 776 // OMP5-NEXT: #pragma omp target map(tofrom: (this)[0]) 777 a++; 778 // OMP5-NEXT: a++; 779 #pragma omp target map(this[:a]) 780 // OMP5-NEXT: #pragma omp target map(tofrom: this[:a]) 781 a++; 782 // OMP5-NEXT: a++; 783 #pragma omp target map(this[a:1]) 784 // OMP5-NEXT: #pragma omp target map(tofrom: this[a:1]) 785 a++; 786 // OMP5-NEXT: a++; 787 #pragma omp target map(this[a]) 788 // OMP5-NEXT: #pragma omp target map(tofrom: this[a]) 789 a++; 790 // OMP5-NEXT: a++; 791 } 792 // OMP5-NEXT: } 793 }; 794 // OMP5-NEXT: }; 795 796 // OMP5-LABEL: int main(int argc, char **argv) { 797 int main (int argc, char **argv) { 798 int i, j, a[20], always, close; 799 // OMP5-NEXT: int i, j, a[20] 800 #pragma omp target 801 // OMP5-NEXT: #pragma omp target 802 foo(); 803 // OMP5-NEXT: foo(); 804 #pragma omp target if (argc > 0) 805 // OMP5-NEXT: #pragma omp target if(argc > 0) 806 foo(); 807 // OMP5-NEXT: foo(); 808 809 #pragma omp target map(i) if(argc>0) 810 // OMP5-NEXT: #pragma omp target map(tofrom: i) if(argc > 0) 811 foo(); 812 // OMP5-NEXT: foo(); 813 814 #pragma omp target map(i) 815 // OMP5-NEXT: #pragma omp target map(tofrom: i) 816 foo(); 817 // OMP5-NEXT: foo(); 818 819 #pragma omp target map(a[0:10], i) 820 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i) 821 foo(); 822 // OMP5-NEXT: foo(); 823 824 #pragma omp target map(to: i) map(from: j) 825 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j) 826 foo(); 827 // OMP5-NEXT: foo(); 828 829 #pragma omp target map(always,alloc: i) 830 // OMP5-NEXT: #pragma omp target map(always,alloc: i) 831 foo(); 832 // OMP5-NEXT: foo(); 833 834 #pragma omp target map(always from: i) 835 // OMP5-NEXT: #pragma omp target map(always,from: i) 836 foo(); 837 // OMP5-NEXT: foo(); 838 839 #pragma omp target map(always) 840 // OMP5-NEXT: #pragma omp target map(tofrom: always) 841 {always++;} 842 // OMP5-NEXT: { 843 // OMP5-NEXT: always++; 844 // OMP5-NEXT: } 845 846 #pragma omp target map(always,i) 847 // OMP5-NEXT: #pragma omp target map(tofrom: always,i) 848 {always++;i++;} 849 // OMP5-NEXT: { 850 // OMP5-NEXT: always++; 851 // OMP5-NEXT: i++; 852 // OMP5-NEXT: } 853 854 #pragma omp target map(close,alloc: i) 855 // OMP5-NEXT: #pragma omp target map(close,alloc: i) 856 foo(); 857 // OMP5-NEXT: foo(); 858 859 #pragma omp target map(close from: i) 860 // OMP5-NEXT: #pragma omp target map(close,from: i) 861 foo(); 862 // OMP5-NEXT: foo(); 863 864 #pragma omp target map(close) 865 // OMP5-NEXT: #pragma omp target map(tofrom: close) 866 {close++;} 867 // OMP5-NEXT: { 868 // OMP5-NEXT: close++; 869 // OMP5-NEXT: } 870 871 #pragma omp target map(close,i) 872 // OMP5-NEXT: #pragma omp target map(tofrom: close,i) 873 {close++;i++;} 874 // OMP5-NEXT: { 875 // OMP5-NEXT: close++; 876 // OMP5-NEXT: i++; 877 // OMP5-NEXT: } 878 879 #pragma omp target nowait 880 // OMP5-NEXT: #pragma omp target nowait 881 foo(); 882 // OMP5-NEXT: foo(); 883 884 #pragma omp target depend(in : argc, argv[i:argc], a[:]) 885 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:]) 886 foo(); 887 // OMP5-NEXT: foo(); 888 889 #pragma omp target defaultmap(alloc: scalar) 890 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar) 891 foo(); 892 // OMP5-NEXT: foo(); 893 894 #pragma omp target defaultmap(to: scalar) 895 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) 896 foo(); 897 // OMP5-NEXT: foo(); 898 899 #pragma omp target defaultmap(from: scalar) 900 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar) 901 foo(); 902 // OMP5-NEXT: foo(); 903 904 #pragma omp target defaultmap(tofrom: scalar) 905 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar) 906 foo(); 907 // OMP5-NEXT: foo(); 908 909 #pragma omp target defaultmap(firstprivate: scalar) 910 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar) 911 foo(); 912 // OMP5-NEXT: foo(); 913 914 #pragma omp target defaultmap(none: scalar) 915 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) 916 foo(); 917 // OMP5-NEXT: foo(); 918 919 #pragma omp target defaultmap(default: scalar) 920 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar) 921 foo(); 922 // OMP5-NEXT: foo(); 923 924 #pragma omp target defaultmap(alloc: aggregate) 925 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) 926 foo(); 927 // OMP5-NEXT: foo(); 928 929 #pragma omp target defaultmap(to: aggregate) 930 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate) 931 foo(); 932 // OMP5-NEXT: foo(); 933 934 #pragma omp target defaultmap(from: aggregate) 935 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate) 936 foo(); 937 // OMP5-NEXT: foo(); 938 939 #pragma omp target defaultmap(tofrom: aggregate) 940 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) 941 foo(); 942 // OMP5-NEXT: foo(); 943 944 #pragma omp target defaultmap(firstprivate: aggregate) 945 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate) 946 foo(); 947 // OMP5-NEXT: foo(); 948 949 #pragma omp target defaultmap(none: aggregate) 950 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) 951 foo(); 952 // OMP5-NEXT: foo(); 953 954 #pragma omp target defaultmap(default: aggregate) 955 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) 956 foo(); 957 // OMP5-NEXT: foo(); 958 959 #pragma omp target defaultmap(alloc: pointer) 960 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer) 961 foo(); 962 // OMP5-NEXT: foo(); 963 964 #pragma omp target defaultmap(to: pointer) 965 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer) 966 foo(); 967 // OMP5-NEXT: foo(); 968 969 #pragma omp target defaultmap(from: pointer) 970 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) 971 foo(); 972 // OMP5-NEXT: foo(); 973 974 #pragma omp target defaultmap(tofrom: pointer) 975 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer) 976 foo(); 977 // OMP5-NEXT: foo(); 978 979 #pragma omp target defaultmap(firstprivate: pointer) 980 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer) 981 foo(); 982 // OMP5-NEXT: foo(); 983 984 #pragma omp target defaultmap(none: pointer) 985 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer) 986 foo(); 987 // OMP5-NEXT: foo(); 988 989 #pragma omp target defaultmap(default: pointer) 990 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer) 991 foo(); 992 // OMP5-NEXT: foo(); 993 994 #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer) 995 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer) 996 foo(); 997 // OMP5-NEXT: foo(); 998 999 #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate) 1000 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate) 1001 foo(); 1002 // OMP5-NEXT: foo(); 1003 1004 #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar) 1005 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar) 1006 foo(); 1007 // OMP5-NEXT: foo(); 1008 1009 #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer) 1010 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer) 1011 foo(); 1012 // OMP5-NEXT: foo(); 1013 1014 #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar) 1015 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar) 1016 foo(); 1017 // OMP5-NEXT: foo(); 1018 1019 int *g; 1020 // OMP5-NEXT: int *g; 1021 1022 #pragma omp target is_device_ptr(g) defaultmap(none: pointer) 1023 // OMP5-NEXT: #pragma omp target is_device_ptr(g) defaultmap(none: pointer) 1024 g++; 1025 // OMP5-NEXT: g++; 1026 1027 #pragma omp target private(g) defaultmap(none: pointer) 1028 // OMP5-NEXT: #pragma omp target private(g) defaultmap(none: pointer) 1029 g++; 1030 // OMP5-NEXT: g++; 1031 1032 #pragma omp target firstprivate(g) defaultmap(none: pointer) 1033 // OMP5-NEXT: #pragma omp target firstprivate(g) defaultmap(none: pointer) 1034 g++; 1035 // OMP5-NEXT: g++; 1036 1037 #pragma omp target defaultmap(none: scalar) map(to: i) 1038 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) map(to: i) 1039 i++; 1040 // OMP5-NEXT: i++; 1041 1042 #pragma omp target defaultmap(none: aggregate) map(to: a) 1043 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) map(to: a) 1044 a[3]++; 1045 // OMP5-NEXT: a[3]++; 1046 1047 #pragma omp target defaultmap(none: scalar) 1048 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) 1049 bar(); 1050 // OMP5-NEXT: bar(); 1051 return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]); 1052 } 1053 1054 #endif //OMP5 1055 #endif 1056