166 lines
4.1 KiB
C
166 lines
4.1 KiB
C
/* Test for _Atomic in C11. Test of valid assignment cases for
|
|
arithmetic types. */
|
|
/* { dg-do compile } */
|
|
/* { dg-options "-std=c11 -pedantic-errors" } */
|
|
|
|
#define TEST_ASSIGN(TYPE1, OP, TYPE2) \
|
|
do \
|
|
{ \
|
|
_Atomic TYPE1 a = 0; \
|
|
TYPE2 b = 0; \
|
|
_Atomic TYPE2 c = 0; \
|
|
a OP b; \
|
|
a OP c; \
|
|
} \
|
|
while (0)
|
|
|
|
#define TEST_ASSIGN_ARITHR(TYPE1, OP) \
|
|
do \
|
|
{ \
|
|
TEST_ASSIGN (TYPE1, OP, _Bool); \
|
|
TEST_ASSIGN (TYPE1, OP, char); \
|
|
TEST_ASSIGN (TYPE1, OP, signed char); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned char); \
|
|
TEST_ASSIGN (TYPE1, OP, signed short); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned short); \
|
|
TEST_ASSIGN (TYPE1, OP, signed int); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned int); \
|
|
TEST_ASSIGN (TYPE1, OP, signed long); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned long); \
|
|
TEST_ASSIGN (TYPE1, OP, signed long long); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned long long); \
|
|
TEST_ASSIGN (TYPE1, OP, float); \
|
|
TEST_ASSIGN (TYPE1, OP, double); \
|
|
TEST_ASSIGN (TYPE1, OP, long double); \
|
|
TEST_ASSIGN (TYPE1, OP, _Complex float); \
|
|
TEST_ASSIGN (TYPE1, OP, _Complex double); \
|
|
TEST_ASSIGN (TYPE1, OP, _Complex long double); \
|
|
} \
|
|
while (0)
|
|
|
|
#define TEST_ASSIGN_ARITHBOTH(OP) \
|
|
do \
|
|
{ \
|
|
TEST_ASSIGN_ARITHR (_Bool, OP); \
|
|
TEST_ASSIGN_ARITHR (char, OP); \
|
|
TEST_ASSIGN_ARITHR (signed char, OP); \
|
|
TEST_ASSIGN_ARITHR (unsigned char, OP); \
|
|
TEST_ASSIGN_ARITHR (signed short, OP); \
|
|
TEST_ASSIGN_ARITHR (unsigned short, OP); \
|
|
TEST_ASSIGN_ARITHR (signed int, OP); \
|
|
TEST_ASSIGN_ARITHR (unsigned int, OP); \
|
|
TEST_ASSIGN_ARITHR (signed long, OP); \
|
|
TEST_ASSIGN_ARITHR (unsigned long, OP); \
|
|
TEST_ASSIGN_ARITHR (signed long long, OP); \
|
|
TEST_ASSIGN_ARITHR (unsigned long long, OP); \
|
|
TEST_ASSIGN_ARITHR (float, OP); \
|
|
TEST_ASSIGN_ARITHR (double, OP); \
|
|
TEST_ASSIGN_ARITHR (long double, OP); \
|
|
TEST_ASSIGN_ARITHR (_Complex float, OP); \
|
|
TEST_ASSIGN_ARITHR (_Complex double, OP); \
|
|
TEST_ASSIGN_ARITHR (_Complex long double, OP); \
|
|
} \
|
|
while (0)
|
|
|
|
#define TEST_ASSIGN_INTR(TYPE1, OP) \
|
|
do \
|
|
{ \
|
|
TEST_ASSIGN (TYPE1, OP, _Bool); \
|
|
TEST_ASSIGN (TYPE1, OP, char); \
|
|
TEST_ASSIGN (TYPE1, OP, signed char); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned char); \
|
|
TEST_ASSIGN (TYPE1, OP, signed short); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned short); \
|
|
TEST_ASSIGN (TYPE1, OP, signed int); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned int); \
|
|
TEST_ASSIGN (TYPE1, OP, signed long); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned long); \
|
|
TEST_ASSIGN (TYPE1, OP, signed long long); \
|
|
TEST_ASSIGN (TYPE1, OP, unsigned long long); \
|
|
} \
|
|
while (0)
|
|
|
|
#define TEST_ASSIGN_INTBOTH(OP) \
|
|
do \
|
|
{ \
|
|
TEST_ASSIGN_INTR (_Bool, OP); \
|
|
TEST_ASSIGN_INTR (char, OP); \
|
|
TEST_ASSIGN_INTR (signed char, OP); \
|
|
TEST_ASSIGN_INTR (unsigned char, OP); \
|
|
TEST_ASSIGN_INTR (signed short, OP); \
|
|
TEST_ASSIGN_INTR (unsigned short, OP); \
|
|
TEST_ASSIGN_INTR (signed int, OP); \
|
|
TEST_ASSIGN_INTR (unsigned int, OP); \
|
|
TEST_ASSIGN_INTR (signed long, OP); \
|
|
TEST_ASSIGN_INTR (unsigned long, OP); \
|
|
TEST_ASSIGN_INTR (signed long long, OP); \
|
|
TEST_ASSIGN_INTR (unsigned long long, OP); \
|
|
} \
|
|
while (0)
|
|
|
|
void
|
|
test_simple (void)
|
|
{
|
|
TEST_ASSIGN_ARITHBOTH (=);
|
|
}
|
|
|
|
void
|
|
test_mult (void)
|
|
{
|
|
TEST_ASSIGN_ARITHBOTH (*=);
|
|
}
|
|
|
|
void
|
|
test_div (void)
|
|
{
|
|
TEST_ASSIGN_ARITHBOTH (/=);
|
|
}
|
|
|
|
void
|
|
test_mod (void)
|
|
{
|
|
TEST_ASSIGN_INTBOTH (%=);
|
|
}
|
|
|
|
void
|
|
test_plus (void)
|
|
{
|
|
TEST_ASSIGN_ARITHBOTH (+=);
|
|
}
|
|
|
|
void
|
|
test_minus (void)
|
|
{
|
|
TEST_ASSIGN_ARITHBOTH (-=);
|
|
}
|
|
|
|
void
|
|
test_lshift (void)
|
|
{
|
|
TEST_ASSIGN_INTBOTH (<<=);
|
|
}
|
|
|
|
void
|
|
test_rshift (void)
|
|
{
|
|
TEST_ASSIGN_INTBOTH (>>=);
|
|
}
|
|
|
|
void
|
|
test_and (void)
|
|
{
|
|
TEST_ASSIGN_INTBOTH (&=);
|
|
}
|
|
|
|
void
|
|
test_xor (void)
|
|
{
|
|
TEST_ASSIGN_INTBOTH (^=);
|
|
}
|
|
|
|
void
|
|
test_or (void)
|
|
{
|
|
TEST_ASSIGN_INTBOTH (|=);
|
|
}
|