1  /* { dg-do compile { target c } } */
       2  /* { dg-additional-options "-fdump-tree-gimple" } */
       3  
       4  void f01 (void);
       5  #pragma omp declare variant (f01) match (user={condition(6 == 7)},implementation={vendor(gnu)})
       6  void f02 (void);
       7  void f03 (void);
       8  #pragma omp declare variant (f03) match (user={condition(6 == 6)},implementation={atomic_default_mem_order(seq_cst)})
       9  void f04 (void);
      10  void f05 (void);
      11  #pragma omp declare variant (f05) match (user={condition(1)},implementation={atomic_default_mem_order(relaxed)})
      12  void f06 (void);
      13  #pragma omp requires atomic_default_mem_order(seq_cst)
      14  void f07 (void);
      15  #pragma omp declare variant (f07) match (construct={parallel,for},device={kind("any")})
      16  void f08 (void);
      17  void f09 (void);
      18  #pragma omp declare variant (f09) match (construct={parallel,for},implementation={vendor("gnu")})
      19  void f10 (void);
      20  void f11 (void);
      21  #pragma omp declare variant (f11) match (construct={parallel,for})
      22  void f12 (void);
      23  void f13 (void);
      24  #pragma omp declare variant (f13) match (construct={parallel,for})
      25  void f14 (void);
      26  #pragma omp declare target to (f13, f14)
      27  void f15 (void);
      28  #pragma omp declare variant (f15) match (implementation={vendor(llvm)})
      29  void f16 (void);
      30  void f17 (void);
      31  #pragma omp declare variant (f17) match (construct={target,parallel})
      32  void f18 (void);
      33  void f19 (void);
      34  #pragma omp declare variant (f19) match (construct={target,parallel})
      35  void f20 (void);
      36  void f21 (void);
      37  #pragma omp declare variant (f21) match (construct={teams,parallel})
      38  void f22 (void);
      39  void f23 (void);
      40  #pragma omp declare variant (f23) match (construct={teams,parallel,for})
      41  void f24 (void);
      42  void f25 (void);
      43  #pragma omp declare variant (f25) match (construct={teams,parallel})
      44  void f26 (void);
      45  void f27 (void);
      46  #pragma omp declare variant (f27) match (construct={teams,parallel,for})
      47  void f28 (void);
      48  void f29 (void);
      49  #pragma omp declare variant (f29) match (implementation={vendor(gnu)})
      50  void f30 (void);
      51  void f31 (void);
      52  #pragma omp declare variant (f31) match (construct={teams,parallel,for})
      53  void f32 (void);
      54  void f33 (void);
      55  #pragma omp declare variant (f33) match (device={kind("any\0any")})	/* { dg-warning "unknown property '.any.000any.' of 'kind' selector" } */
      56  void f34 (void);
      57  void f35 (void);
      58  #pragma omp declare variant (f35) match (implementation={vendor("gnu\0")})	/* { dg-warning "unknown property '.gnu.000.' of 'vendor' selector" } */
      59  void f36 (void);
      60  
      61  void
      62  test1 (void)
      63  {
      64    int i;
      65    f02 ();	/* { dg-final { scan-tree-dump-times "f02 \\\(\\\);" 1 "gimple" } } */
      66    f04 ();	/* { dg-final { scan-tree-dump-times "f03 \\\(\\\);" 1 "gimple" } } */
      67    f06 ();	/* { dg-final { scan-tree-dump-times "f06 \\\(\\\);" 1 "gimple" } } */
      68    #pragma omp parallel
      69    #pragma omp for
      70    for (i = 0; i < 1; i++)
      71      f08 ();	/* { dg-final { scan-tree-dump-times "f07 \\\(\\\);" 1 "gimple" } } */
      72    #pragma omp parallel for
      73    for (i = 0; i < 1; i++)
      74      f10 ();	/* { dg-final { scan-tree-dump-times "f09 \\\(\\\);" 1 "gimple" } } */
      75    #pragma omp for
      76    for (i = 0; i < 1; i++)
      77      #pragma omp parallel
      78      f12 ();	/* { dg-final { scan-tree-dump-times "f12 \\\(\\\);" 1 "gimple" } } */
      79    #pragma omp parallel
      80    #pragma omp target
      81    #pragma omp for
      82    for (i = 0; i < 1; i++)
      83      f14 ();	/* { dg-final { scan-tree-dump-times "f14 \\\(\\\);" 1 "gimple" } } */
      84    f16 ();	/* { dg-final { scan-tree-dump-times "f16 \\\(\\\);" 1 "gimple" } } */
      85    f34 ();	/* { dg-final { scan-tree-dump-times "f34 \\\(\\\);" 1 "gimple" } } */
      86    f36 ();	/* { dg-final { scan-tree-dump-times "f36 \\\(\\\);" 1 "gimple" } } */
      87  }
      88  
      89  #pragma omp declare target
      90  void
      91  test2 (void)
      92  {
      93    #pragma omp parallel
      94    f18 ();	/* { dg-final { scan-tree-dump-times "f17 \\\(\\\);" 1 "gimple" } } */
      95  }
      96  #pragma omp end declare target
      97  
      98  void test3 (void);
      99  #pragma omp declare target to (test3)
     100  
     101  void
     102  test3 (void)
     103  {
     104    #pragma omp parallel
     105    f20 ();	/* { dg-final { scan-tree-dump-times "f20 \\\(\\\);" 1 "gimple" } } */
     106  }
     107  
     108  void
     109  f21 (void)
     110  {
     111    int i;
     112    #pragma omp for
     113    for (i = 0; i < 1; i++)
     114      f24 ();	/* { dg-final { scan-tree-dump-times "f23 \\\(\\\);" 1 "gimple" } } */
     115  }
     116  
     117  void
     118  f26 (void)
     119  {
     120    int i;
     121    #pragma omp for
     122    for (i = 0; i < 1; i++)
     123      f28 ();	/* { dg-final { scan-tree-dump-times "f28 \\\(\\\);" 1 "gimple" } } */
     124  }
     125  
     126  void
     127  f29 (void)
     128  {
     129    int i;
     130    #pragma omp for
     131    for (i = 0; i < 1; i++)
     132      f32 ();	/* { dg-final { scan-tree-dump-times "f32 \\\(\\\);" 1 "gimple" } } */
     133  }