diff gcc/testsuite/gcc.dg/c99-intprom-1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/gcc.dg/c99-intprom-1.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,77 @@
+/* Test for integer promotion rules: extended to long long by C99.  */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
+
+#include <limits.h>
+
+#define CHECK(T1, T2, TC)			\
+  do {						\
+    T1 a = 0;					\
+    T2 b = 0;					\
+    TC *c = 0;					\
+    __typeof__(a+b) *d = 0;			\
+    c = d;					\
+    d = c;					\
+  } while (0)
+
+void
+f (void)
+{
+  /* Same type.  */
+  CHECK(int, int, int);
+  CHECK(unsigned int, unsigned int, unsigned int);
+  CHECK(long, long, long);
+  CHECK(unsigned long, unsigned long, unsigned long);
+  CHECK(long long, long long, long long);
+  CHECK(unsigned long long, unsigned long long, unsigned long long);
+  /* Both signed.  */
+  CHECK(int, long, long);
+  CHECK(int, long long, long long);
+  CHECK(long, int, long);
+  CHECK(long, long long, long long);
+  CHECK(long long, int, long long);
+  CHECK(long long, long, long long);
+  /* Both unsigned.  */
+  CHECK(unsigned int, unsigned long, unsigned long);
+  CHECK(unsigned int, unsigned long long, unsigned long long);
+  CHECK(unsigned long, unsigned int, unsigned long);
+  CHECK(unsigned long, unsigned long long, unsigned long long);
+  CHECK(unsigned long long, unsigned int, unsigned long long);
+  CHECK(unsigned long long, unsigned long, unsigned long long);
+  /* Unsigned of greater or equal rank.  */
+  CHECK(int, unsigned int, unsigned int);
+  CHECK(int, unsigned long, unsigned long);
+  CHECK(int, unsigned long long, unsigned long long);
+  CHECK(unsigned int, int, unsigned int);
+  CHECK(long, unsigned long, unsigned long);
+  CHECK(long, unsigned long long, unsigned long long);
+  CHECK(unsigned long, int, unsigned long);
+  CHECK(unsigned long, long, unsigned long);
+  CHECK(long long, unsigned long long, unsigned long long);
+  CHECK(unsigned long long, int, unsigned long long);
+  CHECK(unsigned long long, long, unsigned long long);
+  CHECK(unsigned long long, long long, unsigned long long);
+  /* Signed of greater rank.  */
+#if LONG_MAX >= UINT_MAX
+  CHECK(unsigned int, long, long);
+  CHECK(long, unsigned int, long);
+#else
+  CHECK(unsigned int, long, unsigned long);
+  CHECK(long, unsigned int, unsigned long);
+#endif
+#if LLONG_MAX >= UINT_MAX
+  CHECK(unsigned int, long long, long long);
+  CHECK(long long, unsigned int, long long);
+#else
+  CHECK(unsigned int, long long, unsigned long long);
+  CHECK(long long, unsigned int, unsigned long long);
+#endif
+#if LLONG_MAX >= ULONG_MAX
+  CHECK(unsigned long, long long, long long);
+  CHECK(long long, unsigned long, long long);
+#else
+  CHECK(unsigned long, long long, unsigned long long);
+  CHECK(long long, unsigned long, unsigned long long);
+#endif
+}