(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
gomp/
map-6.c
       1  /* { dg-do compile } */
       2  /* { dg-additional-options "-fdump-tree-original" } */
       3  
       4  void
       5  foo (void)
       6  {
       7    /* Test to ensure that the close modifier is parsed and ignored in map clauses. */
       8    int a, b, b1, b2, b3, b4, b5, b6, b7;
       9  
      10    #pragma omp target map (a)
      11    ;
      12  
      13    #pragma omp target map (to:a)
      14    ;
      15  
      16    #pragma omp target map (a to: b) /* { dg-error "'#pragma omp target' with modifier other than 'always' or 'close'" } */
      17    ;
      18  
      19    #pragma omp target map (close, a to: b) /* { dg-error "'#pragma omp target' with modifier other than 'always' or 'close'" } */
      20    ;
      21  
      22    #pragma omp target map (close a) /* { dg-error "'close' undeclared" "" { target c } } */ 
      23    /* { dg-error "'close' has not been declared" "" { target c++ } .-1 } */ 
      24    /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
      25    ;
      26  
      27    #pragma omp target map (always a) /* { dg-error "'always' undeclared" "" { target c } } */
      28    /* { dg-error "'always' has not been declared" "" { target c++ } .-1 } */ 
      29    /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
      30    ;
      31  
      32    #pragma omp target map (close to:a)
      33    ;
      34  
      35    #pragma omp target map (close, to:a)
      36    ;
      37  
      38    #pragma omp target map (close delete:a) /* { dg-error "'#pragma omp target' with map-type other than 'to', 'from', 'tofrom' or 'alloc' on 'map' clause" } */
      39    ;
      40  
      41    #pragma omp target map (close always to:b1)
      42    ;
      43  
      44    #pragma omp target map (close, always to:b2)
      45    ;
      46  
      47    #pragma omp target map (close, always, to:b3)
      48    ;
      49  
      50    #pragma omp target map (always close to:b4)
      51    ;
      52  
      53    #pragma omp target map (always, close to:b5)
      54    ;
      55  
      56    #pragma omp target map (always, close, to:b6)
      57    ;
      58  
      59    #pragma omp target map (always, always, to:a) /* { dg-error "too many 'always' modifiers" } */
      60    ;
      61  
      62    #pragma omp target map (always always, to:a) /* { dg-error "too many 'always' modifiers" } */
      63    ;
      64  
      65    #pragma omp target map (always, always to:a) /* { dg-error "too many 'always' modifiers" } */
      66    ;
      67  
      68    #pragma omp target map (always always to:a) /* { dg-error "too many 'always' modifiers" } */
      69    ;
      70  
      71    #pragma omp target map (close, close, to:a) /* { dg-error "too many 'close' modifiers" } */
      72    ;
      73  
      74    #pragma omp target map (close close, to:a) /* { dg-error "too many 'close' modifiers" } */
      75    ;
      76  
      77    #pragma omp target map (close, close to:a) /* { dg-error "too many 'close' modifiers" } */
      78    ;
      79  
      80    #pragma omp target map (close close to:a) /* { dg-error "too many 'close' modifiers" } */
      81    ;
      82  
      83    #pragma omp target map (always to : a) map (close to : b)
      84    ;
      85  
      86    int close = 0;
      87    #pragma omp target map (close) 
      88    ;
      89  
      90    #pragma omp target map (close a) /* { dg-error "expected '\\)' before 'a'" } */ 
      91    ;
      92  
      93    int always = 0;
      94    #pragma omp target map (always)
      95    ;
      96  
      97    #pragma omp target map (always a) /* { dg-error "expected '\\)' before 'a'" } */
      98    ;
      99  
     100    #pragma omp target map (always, close)
     101    ;
     102  
     103    #pragma omp target map (always, always)  /* { dg-error "'always' appears more than once in map clauses" } */
     104    ;
     105  
     106    #pragma omp target map (always, always, close)  /* { dg-error "'always' appears more than once in map clauses" } */
     107    ;
     108  
     109    #pragma omp target map (always, close, to: always, close, b7)
     110    ;
     111  
     112    int to = 0;
     113    #pragma omp target map (always, close, to)
     114    ;
     115  
     116    #pragma omp target map (to, always, close)
     117      {
     118        to = always = close = 1;
     119      }
     120    if (to != 1 || always != 1 || close != 1)
     121      __builtin_abort ();
     122    ;
     123  }
     124  
     125  /* { dg-final { scan-tree-dump-not "map\\(\[^\n\r)]*close\[^\n\r)]*to:" "original" } } */
     126  
     127  /* { dg-final { scan-tree-dump-times "pragma omp target map\\(always,to:" 7 "original" } } */
     128  
     129  /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b1" "original" } } */
     130  /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b2" "original" } } */
     131  /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b3" "original" } } */
     132  /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b4" "original" } } */
     133  /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b5" "original" } } */
     134  /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b6" "original" } } */
     135  /* { dg-final { scan-tree-dump "pragma omp target map\\(always,to:b7\\) map\\(always,to:close\\) map\\(always,to:always\\)" "original" } } */