--- /dev/null
+/* Test C2Y complex increment and decrement. */
+/* { dg-do run } */
+/* { dg-options "-std=c2y -pedantic-errors" } */
+
+extern void abort (void);
+extern void exit (int);
+
+_Complex float a, ax;
+_Complex double b, bx;
+_Complex long double c, cx;
+
+int
+main ()
+{
+ ax = a++;
+ if (ax != 0
+ || a != 1
+ || __builtin_signbit (__builtin_crealf (ax))
+ || __builtin_signbit (__builtin_cimagf (ax))
+ || __builtin_signbit (__builtin_crealf (a))
+ || __builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+ a = __builtin_complex (0.0f, -0.0f);
+ ax = a++;
+ if (ax != 0
+ || a != 1
+ || __builtin_signbit (__builtin_crealf (ax))
+ || !__builtin_signbit (__builtin_cimagf (ax))
+ || __builtin_signbit (__builtin_crealf (a))
+ || !__builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+ a = 0;
+ ax = ++a;
+ if (ax != 1
+ || a != 1
+ || __builtin_signbit (__builtin_crealf (ax))
+ || __builtin_signbit (__builtin_cimagf (ax))
+ || __builtin_signbit (__builtin_crealf (a))
+ || __builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+ a = __builtin_complex (0.0f, -0.0f);
+ ax = ++a;
+ if (ax != 1
+ || a != 1
+ || __builtin_signbit (__builtin_crealf (ax))
+ || !__builtin_signbit (__builtin_cimagf (ax))
+ || __builtin_signbit (__builtin_crealf (a))
+ || !__builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+ a = 0;
+ ax = a--;
+ if (ax != 0
+ || a != -1
+ || __builtin_signbit (__builtin_crealf (ax))
+ || __builtin_signbit (__builtin_cimagf (ax))
+ || !__builtin_signbit (__builtin_crealf (a))
+ || __builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+ a = __builtin_complex (0.0f, -0.0f);
+ ax = a--;
+ if (ax != 0
+ || a != -1
+ || __builtin_signbit (__builtin_crealf (ax))
+ || !__builtin_signbit (__builtin_cimagf (ax))
+ || !__builtin_signbit (__builtin_crealf (a))
+ || !__builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+ a = 0;
+ ax = --a;
+ if (ax != -1
+ || a != -1
+ || !__builtin_signbit (__builtin_crealf (ax))
+ || __builtin_signbit (__builtin_cimagf (ax))
+ || !__builtin_signbit (__builtin_crealf (a))
+ || __builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+ a = __builtin_complex (0.0f, -0.0f);
+ ax = --a;
+ if (ax != -1
+ || a != -1
+ || !__builtin_signbit (__builtin_crealf (ax))
+ || !__builtin_signbit (__builtin_cimagf (ax))
+ || !__builtin_signbit (__builtin_crealf (a))
+ || !__builtin_signbit (__builtin_cimagf (a)))
+ abort ();
+
+ bx = b++;
+ if (bx != 0
+ || b != 1
+ || __builtin_signbit (__builtin_creal (bx))
+ || __builtin_signbit (__builtin_cimag (bx))
+ || __builtin_signbit (__builtin_creal (b))
+ || __builtin_signbit (__builtin_cimag (b)))
+ abort ();
+ b = __builtin_complex (0.0, -0.0);
+ bx = b++;
+ if (bx != 0
+ || b != 1
+ || __builtin_signbit (__builtin_creal (bx))
+ || !__builtin_signbit (__builtin_cimag (bx))
+ || __builtin_signbit (__builtin_creal (b))
+ || !__builtin_signbit (__builtin_cimag (b)))
+ abort ();
+ b = 0;
+ bx = ++b;
+ if (bx != 1
+ || b != 1
+ || __builtin_signbit (__builtin_creal (bx))
+ || __builtin_signbit (__builtin_cimag (bx))
+ || __builtin_signbit (__builtin_creal (b))
+ || __builtin_signbit (__builtin_cimag (b)))
+ abort ();
+ b = __builtin_complex (0.0, -0.0);
+ bx = ++b;
+ if (bx != 1
+ || b != 1
+ || __builtin_signbit (__builtin_creal (bx))
+ || !__builtin_signbit (__builtin_cimag (bx))
+ || __builtin_signbit (__builtin_creal (b))
+ || !__builtin_signbit (__builtin_cimag (b)))
+ abort ();
+ b = 0;
+ bx = b--;
+ if (bx != 0
+ || b != -1
+ || __builtin_signbit (__builtin_creal (bx))
+ || __builtin_signbit (__builtin_cimag (bx))
+ || !__builtin_signbit (__builtin_creal (b))
+ || __builtin_signbit (__builtin_cimag (b)))
+ abort ();
+ b = __builtin_complex (0.0f, -0.0f);
+ bx = b--;
+ if (bx != 0
+ || b != -1
+ || __builtin_signbit (__builtin_creal (bx))
+ || !__builtin_signbit (__builtin_cimag (bx))
+ || !__builtin_signbit (__builtin_creal (b))
+ || !__builtin_signbit (__builtin_cimag (b)))
+ abort ();
+ b = 0;
+ bx = --b;
+ if (bx != -1
+ || b != -1
+ || !__builtin_signbit (__builtin_creal (bx))
+ || __builtin_signbit (__builtin_cimag (bx))
+ || !__builtin_signbit (__builtin_creal (b))
+ || __builtin_signbit (__builtin_cimag (b)))
+ abort ();
+ b = __builtin_complex (0.0f, -0.0f);
+ bx = --b;
+ if (bx != -1
+ || b != -1
+ || !__builtin_signbit (__builtin_creal (bx))
+ || !__builtin_signbit (__builtin_cimag (bx))
+ || !__builtin_signbit (__builtin_creal (b))
+ || !__builtin_signbit (__builtin_cimag (b)))
+ abort ();
+
+ cx = c++;
+ if (cx != 0
+ || c != 1
+ || __builtin_signbit (__builtin_creall (cx))
+ || __builtin_signbit (__builtin_cimagl (cx))
+ || __builtin_signbit (__builtin_creall (c))
+ || __builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+ c = __builtin_complex (0.0L, -0.0L);
+ cx = c++;
+ if (cx != 0
+ || c != 1
+ || __builtin_signbit (__builtin_creall (cx))
+ || !__builtin_signbit (__builtin_cimagl (cx))
+ || __builtin_signbit (__builtin_creall (c))
+ || !__builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+ c = 0;
+ cx = ++c;
+ if (cx != 1
+ || c != 1
+ || __builtin_signbit (__builtin_creall (cx))
+ || __builtin_signbit (__builtin_cimagl (cx))
+ || __builtin_signbit (__builtin_creall (c))
+ || __builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+ c = __builtin_complex (0.0L, -0.0L);
+ cx = ++c;
+ if (cx != 1
+ || c != 1
+ || __builtin_signbit (__builtin_creall (cx))
+ || !__builtin_signbit (__builtin_cimagl (cx))
+ || __builtin_signbit (__builtin_creall (c))
+ || !__builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+ c = 0;
+ cx = c--;
+ if (cx != 0
+ || c != -1
+ || __builtin_signbit (__builtin_creall (cx))
+ || __builtin_signbit (__builtin_cimagl (cx))
+ || !__builtin_signbit (__builtin_creall (c))
+ || __builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+ c = __builtin_complex (0.0L, -0.0L);
+ cx = c--;
+ if (cx != 0
+ || c != -1
+ || __builtin_signbit (__builtin_creall (cx))
+ || !__builtin_signbit (__builtin_cimagl (cx))
+ || !__builtin_signbit (__builtin_creall (c))
+ || !__builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+ c = 0;
+ cx = --c;
+ if (cx != -1
+ || c != -1
+ || !__builtin_signbit (__builtin_creall (cx))
+ || __builtin_signbit (__builtin_cimagl (cx))
+ || !__builtin_signbit (__builtin_creall (c))
+ || __builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+ c = __builtin_complex (0.0L, -0.0L);
+ cx = --c;
+ if (cx != -1
+ || c != -1
+ || !__builtin_signbit (__builtin_creall (cx))
+ || !__builtin_signbit (__builtin_cimagl (cx))
+ || !__builtin_signbit (__builtin_creall (c))
+ || !__builtin_signbit (__builtin_cimagl (c)))
+ abort ();
+
+ exit (0);
+}