(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
c11-atomic-2.c
       1  /* Test for _Atomic in C11.  Test of valid assignment cases for
       2     arithmetic types.  */
       3  /* { dg-do compile } */
       4  /* { dg-options "-std=c11 -pedantic-errors" } */
       5  
       6  #define TEST_ASSIGN(TYPE1, OP, TYPE2)		\
       7    do						\
       8      {						\
       9        _Atomic TYPE1 a = 0;			\
      10        TYPE2 b = 0;				\
      11        _Atomic TYPE2 c = 0;			\
      12        a OP b;					\
      13        a OP c;					\
      14      }						\
      15    while (0)
      16  
      17  #define TEST_ASSIGN_ARITHR(TYPE1, OP)			\
      18    do							\
      19      {							\
      20        TEST_ASSIGN (TYPE1, OP, _Bool);			\
      21        TEST_ASSIGN (TYPE1, OP, char);			\
      22        TEST_ASSIGN (TYPE1, OP, signed char);		\
      23        TEST_ASSIGN (TYPE1, OP, unsigned char);		\
      24        TEST_ASSIGN (TYPE1, OP, signed short);		\
      25        TEST_ASSIGN (TYPE1, OP, unsigned short);		\
      26        TEST_ASSIGN (TYPE1, OP, signed int);		\
      27        TEST_ASSIGN (TYPE1, OP, unsigned int);		\
      28        TEST_ASSIGN (TYPE1, OP, signed long);		\
      29        TEST_ASSIGN (TYPE1, OP, unsigned long);		\
      30        TEST_ASSIGN (TYPE1, OP, signed long long);	\
      31        TEST_ASSIGN (TYPE1, OP, unsigned long long);	\
      32        TEST_ASSIGN (TYPE1, OP, float);			\
      33        TEST_ASSIGN (TYPE1, OP, double);			\
      34        TEST_ASSIGN (TYPE1, OP, long double);		\
      35        TEST_ASSIGN (TYPE1, OP, _Complex float);		\
      36        TEST_ASSIGN (TYPE1, OP, _Complex double);		\
      37        TEST_ASSIGN (TYPE1, OP, _Complex long double);	\
      38      }							\
      39    while (0)
      40  
      41  #define TEST_ASSIGN_ARITHBOTH(OP)			\
      42    do							\
      43      {							\
      44        TEST_ASSIGN_ARITHR (_Bool, OP);			\
      45        TEST_ASSIGN_ARITHR (char, OP);			\
      46        TEST_ASSIGN_ARITHR (signed char, OP);		\
      47        TEST_ASSIGN_ARITHR (unsigned char, OP);		\
      48        TEST_ASSIGN_ARITHR (signed short, OP);		\
      49        TEST_ASSIGN_ARITHR (unsigned short, OP);		\
      50        TEST_ASSIGN_ARITHR (signed int, OP);		\
      51        TEST_ASSIGN_ARITHR (unsigned int, OP);		\
      52        TEST_ASSIGN_ARITHR (signed long, OP);		\
      53        TEST_ASSIGN_ARITHR (unsigned long, OP);		\
      54        TEST_ASSIGN_ARITHR (signed long long, OP);	\
      55        TEST_ASSIGN_ARITHR (unsigned long long, OP);	\
      56        TEST_ASSIGN_ARITHR (float, OP);			\
      57        TEST_ASSIGN_ARITHR (double, OP);			\
      58        TEST_ASSIGN_ARITHR (long double, OP);		\
      59        TEST_ASSIGN_ARITHR (_Complex float, OP);		\
      60        TEST_ASSIGN_ARITHR (_Complex double, OP);		\
      61        TEST_ASSIGN_ARITHR (_Complex long double, OP);	\
      62      }							\
      63    while (0)
      64  
      65  #define TEST_ASSIGN_INTR(TYPE1, OP)			\
      66    do							\
      67      {							\
      68        TEST_ASSIGN (TYPE1, OP, _Bool);			\
      69        TEST_ASSIGN (TYPE1, OP, char);			\
      70        TEST_ASSIGN (TYPE1, OP, signed char);		\
      71        TEST_ASSIGN (TYPE1, OP, unsigned char);		\
      72        TEST_ASSIGN (TYPE1, OP, signed short);		\
      73        TEST_ASSIGN (TYPE1, OP, unsigned short);		\
      74        TEST_ASSIGN (TYPE1, OP, signed int);		\
      75        TEST_ASSIGN (TYPE1, OP, unsigned int);		\
      76        TEST_ASSIGN (TYPE1, OP, signed long);		\
      77        TEST_ASSIGN (TYPE1, OP, unsigned long);		\
      78        TEST_ASSIGN (TYPE1, OP, signed long long);	\
      79        TEST_ASSIGN (TYPE1, OP, unsigned long long);	\
      80      }							\
      81    while (0)
      82  
      83  #define TEST_ASSIGN_INTBOTH(OP)				\
      84    do							\
      85      {							\
      86        TEST_ASSIGN_INTR (_Bool, OP);			\
      87        TEST_ASSIGN_INTR (char, OP);			\
      88        TEST_ASSIGN_INTR (signed char, OP);		\
      89        TEST_ASSIGN_INTR (unsigned char, OP);		\
      90        TEST_ASSIGN_INTR (signed short, OP);		\
      91        TEST_ASSIGN_INTR (unsigned short, OP);		\
      92        TEST_ASSIGN_INTR (signed int, OP);		\
      93        TEST_ASSIGN_INTR (unsigned int, OP);		\
      94        TEST_ASSIGN_INTR (signed long, OP);		\
      95        TEST_ASSIGN_INTR (unsigned long, OP);		\
      96        TEST_ASSIGN_INTR (signed long long, OP);		\
      97        TEST_ASSIGN_INTR (unsigned long long, OP);	\
      98      }							\
      99    while (0)
     100  
     101  void
     102  test_simple (void)
     103  {
     104    TEST_ASSIGN_ARITHBOTH (=);
     105  }
     106  
     107  void
     108  test_mult (void)
     109  {
     110    TEST_ASSIGN_ARITHBOTH (*=);
     111  }
     112  
     113  void
     114  test_div (void)
     115  {
     116    TEST_ASSIGN_ARITHBOTH (/=);
     117  }
     118  
     119  void
     120  test_mod (void)
     121  {
     122    TEST_ASSIGN_INTBOTH (%=);
     123  }
     124  
     125  void
     126  test_plus (void)
     127  {
     128    TEST_ASSIGN_ARITHBOTH (+=);
     129  }
     130  
     131  void
     132  test_minus (void)
     133  {
     134    TEST_ASSIGN_ARITHBOTH (-=);
     135  }
     136  
     137  void
     138  test_lshift (void)
     139  {
     140    TEST_ASSIGN_INTBOTH (<<=);
     141  }
     142  
     143  void
     144  test_rshift (void)
     145  {
     146    TEST_ASSIGN_INTBOTH (>>=);
     147  }
     148  
     149  void
     150  test_and (void)
     151  {
     152    TEST_ASSIGN_INTBOTH (&=);
     153  }
     154  
     155  void
     156  test_xor (void)
     157  {
     158    TEST_ASSIGN_INTBOTH (^=);
     159  }
     160  
     161  void
     162  test_or (void)
     163  {
     164    TEST_ASSIGN_INTBOTH (|=);
     165  }