1*00ab44eeSKrzysztof Parzyszek! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=51 23323a4bdSKiran Chandramohan! Check OpenMP clause validity for the following directives: 33323a4bdSKiran Chandramohan! 2.10 Device constructs 43323a4bdSKiran Chandramohanprogram main 5cf8fc53aSagozillon use iso_c_binding 63323a4bdSKiran Chandramohan 73323a4bdSKiran Chandramohan real(8) :: arrayA(256), arrayB(256) 83323a4bdSKiran Chandramohan integer :: N 9cf8fc53aSagozillon type(c_ptr) :: cptr 103323a4bdSKiran Chandramohan 113323a4bdSKiran Chandramohan arrayA = 1.414 123323a4bdSKiran Chandramohan arrayB = 3.14 133323a4bdSKiran Chandramohan N = 256 143323a4bdSKiran Chandramohan 153323a4bdSKiran Chandramohan !$omp target map(arrayA) 163323a4bdSKiran Chandramohan do i = 1, N 173323a4bdSKiran Chandramohan a = 3.14 183323a4bdSKiran Chandramohan enddo 193323a4bdSKiran Chandramohan !$omp end target 203323a4bdSKiran Chandramohan 213323a4bdSKiran Chandramohan !$omp target device(0) 223323a4bdSKiran Chandramohan do i = 1, N 233323a4bdSKiran Chandramohan a = 3.14 243323a4bdSKiran Chandramohan enddo 253323a4bdSKiran Chandramohan !$omp end target 263323a4bdSKiran Chandramohan 273323a4bdSKiran Chandramohan !ERROR: At most one DEVICE clause can appear on the TARGET directive 283323a4bdSKiran Chandramohan !$omp target device(0) device(1) 293323a4bdSKiran Chandramohan do i = 1, N 303323a4bdSKiran Chandramohan a = 3.14 313323a4bdSKiran Chandramohan enddo 323323a4bdSKiran Chandramohan !$omp end target 333323a4bdSKiran Chandramohan 343323a4bdSKiran Chandramohan !ERROR: SCHEDULE clause is not allowed on the TARGET directive 353323a4bdSKiran Chandramohan !$omp target schedule(static) 363323a4bdSKiran Chandramohan do i = 1, N 373323a4bdSKiran Chandramohan a = 3.14 383323a4bdSKiran Chandramohan enddo 393323a4bdSKiran Chandramohan !$omp end target 403323a4bdSKiran Chandramohan 413323a4bdSKiran Chandramohan !$omp target defaultmap(tofrom:scalar) 423323a4bdSKiran Chandramohan do i = 1, N 433323a4bdSKiran Chandramohan a = 3.14 443323a4bdSKiran Chandramohan enddo 453323a4bdSKiran Chandramohan !$omp end target 463323a4bdSKiran Chandramohan 473323a4bdSKiran Chandramohan !$omp target defaultmap(tofrom) 483323a4bdSKiran Chandramohan do i = 1, N 493323a4bdSKiran Chandramohan a = 3.14 503323a4bdSKiran Chandramohan enddo 513323a4bdSKiran Chandramohan !$omp end target 523323a4bdSKiran Chandramohan 533323a4bdSKiran Chandramohan !ERROR: At most one DEFAULTMAP clause can appear on the TARGET directive 543323a4bdSKiran Chandramohan !$omp target defaultmap(tofrom:scalar) defaultmap(tofrom:scalar) 553323a4bdSKiran Chandramohan do i = 1, N 563323a4bdSKiran Chandramohan a = 3.14 573323a4bdSKiran Chandramohan enddo 583323a4bdSKiran Chandramohan !$omp end target 593323a4bdSKiran Chandramohan 603323a4bdSKiran Chandramohan !$omp target thread_limit(4) 613323a4bdSKiran Chandramohan do i = 1, N 623323a4bdSKiran Chandramohan a = 3.14 633323a4bdSKiran Chandramohan enddo 643323a4bdSKiran Chandramohan !$omp end target 653323a4bdSKiran Chandramohan 663323a4bdSKiran Chandramohan !ERROR: At most one THREAD_LIMIT clause can appear on the TARGET directive 673323a4bdSKiran Chandramohan !$omp target thread_limit(4) thread_limit(8) 683323a4bdSKiran Chandramohan do i = 1, N 693323a4bdSKiran Chandramohan a = 3.14 703323a4bdSKiran Chandramohan enddo 713323a4bdSKiran Chandramohan !$omp end target 723323a4bdSKiran Chandramohan 733323a4bdSKiran Chandramohan !$omp teams num_teams(3) thread_limit(10) default(shared) private(i) shared(a) 743323a4bdSKiran Chandramohan do i = 1, N 753323a4bdSKiran Chandramohan a = 3.14 763323a4bdSKiran Chandramohan enddo 773323a4bdSKiran Chandramohan !$omp end teams 783323a4bdSKiran Chandramohan 793323a4bdSKiran Chandramohan !ERROR: At most one NUM_TEAMS clause can appear on the TEAMS directive 803323a4bdSKiran Chandramohan !$omp teams num_teams(2) num_teams(3) 813323a4bdSKiran Chandramohan do i = 1, N 823323a4bdSKiran Chandramohan a = 3.14 833323a4bdSKiran Chandramohan enddo 843323a4bdSKiran Chandramohan !$omp end teams 853323a4bdSKiran Chandramohan 863323a4bdSKiran Chandramohan !ERROR: The parameter of the NUM_TEAMS clause must be a positive integer expression 873323a4bdSKiran Chandramohan !$omp teams num_teams(-1) 883323a4bdSKiran Chandramohan do i = 1, N 893323a4bdSKiran Chandramohan a = 3.14 903323a4bdSKiran Chandramohan enddo 913323a4bdSKiran Chandramohan !$omp end teams 923323a4bdSKiran Chandramohan 933323a4bdSKiran Chandramohan !ERROR: At most one THREAD_LIMIT clause can appear on the TEAMS directive 943323a4bdSKiran Chandramohan !$omp teams thread_limit(2) thread_limit(3) 953323a4bdSKiran Chandramohan do i = 1, N 963323a4bdSKiran Chandramohan a = 3.14 973323a4bdSKiran Chandramohan enddo 983323a4bdSKiran Chandramohan !$omp end teams 993323a4bdSKiran Chandramohan 1003323a4bdSKiran Chandramohan !ERROR: The parameter of the THREAD_LIMIT clause must be a positive integer expression 1013323a4bdSKiran Chandramohan !$omp teams thread_limit(-1) 1023323a4bdSKiran Chandramohan do i = 1, N 1033323a4bdSKiran Chandramohan a = 3.14 1043323a4bdSKiran Chandramohan enddo 1053323a4bdSKiran Chandramohan !$omp end teams 1063323a4bdSKiran Chandramohan 1073323a4bdSKiran Chandramohan !ERROR: At most one DEFAULT clause can appear on the TEAMS directive 1083323a4bdSKiran Chandramohan !$omp teams default(shared) default(private) 1093323a4bdSKiran Chandramohan do i = 1, N 1103323a4bdSKiran Chandramohan a = 3.14 1113323a4bdSKiran Chandramohan enddo 1123323a4bdSKiran Chandramohan !$omp end teams 1133323a4bdSKiran Chandramohan 1143323a4bdSKiran Chandramohan !$omp target teams num_teams(2) defaultmap(tofrom:scalar) 1153323a4bdSKiran Chandramohan do i = 1, N 1163323a4bdSKiran Chandramohan a = 3.14 1173323a4bdSKiran Chandramohan enddo 1183323a4bdSKiran Chandramohan !$omp end target teams 1193323a4bdSKiran Chandramohan 1203323a4bdSKiran Chandramohan !$omp target map(tofrom:a) 1213323a4bdSKiran Chandramohan do i = 1, N 1223323a4bdSKiran Chandramohan a = 3.14 1233323a4bdSKiran Chandramohan enddo 1243323a4bdSKiran Chandramohan !$omp end target 1253323a4bdSKiran Chandramohan 1263323a4bdSKiran Chandramohan !ERROR: Only the TO, FROM, TOFROM, ALLOC map types are permitted for MAP clauses on the TARGET directive 1273323a4bdSKiran Chandramohan !$omp target map(delete:a) 1283323a4bdSKiran Chandramohan do i = 1, N 1293323a4bdSKiran Chandramohan a = 3.14 1303323a4bdSKiran Chandramohan enddo 1313323a4bdSKiran Chandramohan !$omp end target 1323323a4bdSKiran Chandramohan 1333323a4bdSKiran Chandramohan !$omp target data device(0) map(to:a) 1343323a4bdSKiran Chandramohan do i = 1, N 1353323a4bdSKiran Chandramohan a = 3.14 1363323a4bdSKiran Chandramohan enddo 1373323a4bdSKiran Chandramohan !$omp end target data 1383323a4bdSKiran Chandramohan 139cf8fc53aSagozillon !$omp target data device(0) use_device_addr(cptr) 140cf8fc53aSagozillon cptr = c_null_ptr 141cf8fc53aSagozillon !$omp end target data 142cf8fc53aSagozillon 143cf8fc53aSagozillon !$omp target data device(0) use_device_addr(cptr) 144cf8fc53aSagozillon cptr = c_null_ptr 145cf8fc53aSagozillon !$omp end target data 146cf8fc53aSagozillon 147cf8fc53aSagozillon !ERROR: At least one of MAP, USE_DEVICE_ADDR, USE_DEVICE_PTR clause must appear on the TARGET DATA directive 1483323a4bdSKiran Chandramohan !$omp target data device(0) 1493323a4bdSKiran Chandramohan do i = 1, N 1503323a4bdSKiran Chandramohan a = 3.14 1513323a4bdSKiran Chandramohan enddo 1523323a4bdSKiran Chandramohan !$omp end target data 1533323a4bdSKiran Chandramohan 1543323a4bdSKiran Chandramohan !ERROR: The device expression of the DEVICE clause must be a positive integer expression 1553323a4bdSKiran Chandramohan !$omp target enter data map(alloc:A) device(-2) 1563323a4bdSKiran Chandramohan 1573323a4bdSKiran Chandramohan !ERROR: The device expression of the DEVICE clause must be a positive integer expression 1583323a4bdSKiran Chandramohan !$omp target exit data map(delete:A) device(-2) 1593323a4bdSKiran Chandramohan 1603323a4bdSKiran Chandramohan !ERROR: At most one IF clause can appear on the TARGET ENTER DATA directive 1613323a4bdSKiran Chandramohan !$omp target enter data map(to:a) if(.true.) if(.false.) 1623323a4bdSKiran Chandramohan 1633323a4bdSKiran Chandramohan !ERROR: Only the TO, ALLOC map types are permitted for MAP clauses on the TARGET ENTER DATA directive 1643323a4bdSKiran Chandramohan !$omp target enter data map(from:a) 1653323a4bdSKiran Chandramohan 1663323a4bdSKiran Chandramohan !$omp target exit data map(delete:a) 1673323a4bdSKiran Chandramohan 1683323a4bdSKiran Chandramohan !ERROR: At most one DEVICE clause can appear on the TARGET EXIT DATA directive 1693323a4bdSKiran Chandramohan !$omp target exit data map(from:a) device(0) device(1) 1703323a4bdSKiran Chandramohan 1713323a4bdSKiran Chandramohan !ERROR: Only the FROM, RELEASE, DELETE map types are permitted for MAP clauses on the TARGET EXIT DATA directive 1723323a4bdSKiran Chandramohan !$omp target exit data map(to:a) 1733323a4bdSKiran Chandramohan 1743323a4bdSKiran Chandramohan !$omp target update if(.true.) device(1) to(a) from(b) depend(inout:c) nowait 1753323a4bdSKiran Chandramohan 1763323a4bdSKiran Chandramohan !ERROR: At most one IF clause can appear on the TARGET UPDATE directive 1773323a4bdSKiran Chandramohan !$omp target update to(a) if(.true.) if(.false.) 1783323a4bdSKiran Chandramohan 1793323a4bdSKiran Chandramohan !ERROR: At most one DEVICE clause can appear on the TARGET UPDATE directive 1803323a4bdSKiran Chandramohan !$omp target update device(0) device(1) from(b) 1813323a4bdSKiran Chandramohan 1823323a4bdSKiran Chandramohan !$omp target 1833323a4bdSKiran Chandramohan !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 1843323a4bdSKiran Chandramohan !$omp distribute 1853323a4bdSKiran Chandramohan do i = 1, N 1863323a4bdSKiran Chandramohan a = 3.14 1873323a4bdSKiran Chandramohan enddo 1883323a4bdSKiran Chandramohan !$omp end distribute 1893323a4bdSKiran Chandramohan !$omp end target 1903323a4bdSKiran Chandramohan 1913323a4bdSKiran Chandramohan !$omp target 1923323a4bdSKiran Chandramohan !$omp teams 1933323a4bdSKiran Chandramohan !$omp distribute 1943323a4bdSKiran Chandramohan do i = 1, N 1953323a4bdSKiran Chandramohan a = 3.14 1963323a4bdSKiran Chandramohan enddo 1973323a4bdSKiran Chandramohan !$omp end distribute 1983323a4bdSKiran Chandramohan !$omp end teams 1993323a4bdSKiran Chandramohan !$omp end target 2003323a4bdSKiran Chandramohan 2013323a4bdSKiran Chandramohan !$omp target 2023323a4bdSKiran Chandramohan !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 2033323a4bdSKiran Chandramohan !ERROR: At most one COLLAPSE clause can appear on the DISTRIBUTE directive 2043323a4bdSKiran Chandramohan !$omp distribute collapse(2) collapse(3) 2053323a4bdSKiran Chandramohan do i = 1, N 2063323a4bdSKiran Chandramohan do j = 1, N 2073323a4bdSKiran Chandramohan do k = 1, N 2083323a4bdSKiran Chandramohan a = 3.14 2093323a4bdSKiran Chandramohan enddo 2103323a4bdSKiran Chandramohan enddo 2113323a4bdSKiran Chandramohan enddo 2123323a4bdSKiran Chandramohan !$omp end distribute 2133323a4bdSKiran Chandramohan !$omp end target 2143323a4bdSKiran Chandramohan 2153323a4bdSKiran Chandramohan !$omp target 2163323a4bdSKiran Chandramohan !$omp teams 2173323a4bdSKiran Chandramohan !ERROR: At most one COLLAPSE clause can appear on the DISTRIBUTE directive 2183323a4bdSKiran Chandramohan !$omp distribute collapse(2) collapse(3) 2193323a4bdSKiran Chandramohan do i = 1, N 2203323a4bdSKiran Chandramohan do j = 1, N 2213323a4bdSKiran Chandramohan do k = 1, N 2223323a4bdSKiran Chandramohan a = 3.14 2233323a4bdSKiran Chandramohan enddo 2243323a4bdSKiran Chandramohan enddo 2253323a4bdSKiran Chandramohan enddo 2263323a4bdSKiran Chandramohan !$omp end distribute 2273323a4bdSKiran Chandramohan !$omp end teams 2283323a4bdSKiran Chandramohan !$omp end target 2293323a4bdSKiran Chandramohan 2303323a4bdSKiran Chandramohan !$omp target 2313323a4bdSKiran Chandramohan !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 2323323a4bdSKiran Chandramohan !$omp distribute dist_schedule(static, 2) 2333323a4bdSKiran Chandramohan do i = 1, N 2343323a4bdSKiran Chandramohan a = 3.14 2353323a4bdSKiran Chandramohan enddo 2363323a4bdSKiran Chandramohan !$omp end distribute 2373323a4bdSKiran Chandramohan !$omp end target 2383323a4bdSKiran Chandramohan 2393323a4bdSKiran Chandramohan !$omp target 2403323a4bdSKiran Chandramohan !$omp teams 2413323a4bdSKiran Chandramohan !$omp distribute dist_schedule(static, 2) 2423323a4bdSKiran Chandramohan do i = 1, N 2433323a4bdSKiran Chandramohan a = 3.14 2443323a4bdSKiran Chandramohan enddo 2453323a4bdSKiran Chandramohan !$omp end distribute 2463323a4bdSKiran Chandramohan !$omp end teams 2473323a4bdSKiran Chandramohan !$omp end target 2483323a4bdSKiran Chandramohan 2493323a4bdSKiran Chandramohan !$omp target 2503323a4bdSKiran Chandramohan !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 2513323a4bdSKiran Chandramohan !ERROR: At most one DIST_SCHEDULE clause can appear on the DISTRIBUTE directive 2523323a4bdSKiran Chandramohan !$omp distribute dist_schedule(static, 2) dist_schedule(static, 3) 2533323a4bdSKiran Chandramohan do i = 1, N 2543323a4bdSKiran Chandramohan a = 3.14 2553323a4bdSKiran Chandramohan enddo 2563323a4bdSKiran Chandramohan !$omp end distribute 2573323a4bdSKiran Chandramohan !$omp end target 2583323a4bdSKiran Chandramohan 2593323a4bdSKiran Chandramohan !$omp target 2603323a4bdSKiran Chandramohan !$omp teams 2613323a4bdSKiran Chandramohan !ERROR: At most one DIST_SCHEDULE clause can appear on the DISTRIBUTE directive 2623323a4bdSKiran Chandramohan !$omp distribute dist_schedule(static, 2) dist_schedule(static, 3) 2633323a4bdSKiran Chandramohan do i = 1, N 2643323a4bdSKiran Chandramohan a = 3.14 2653323a4bdSKiran Chandramohan enddo 2663323a4bdSKiran Chandramohan !$omp end distribute 2673323a4bdSKiran Chandramohan !$omp end teams 2683323a4bdSKiran Chandramohan !$omp end target 2693323a4bdSKiran Chandramohan 2703323a4bdSKiran Chandramohanend program main 271