aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
Diffstat (limited to 'validation')
-rw-r--r--validation/eval/array-quals-node.c29
-rw-r--r--validation/eval/array-quals0.c6
-rw-r--r--validation/eval/array-quals1.c49
-rw-r--r--validation/linear/bug-assign-op0.c115
-rw-r--r--validation/static_assert.c5
5 files changed, 204 insertions, 0 deletions
diff --git a/validation/eval/array-quals-node.c b/validation/eval/array-quals-node.c
new file mode 100644
index 00000000..99a4db13
--- /dev/null
+++ b/validation/eval/array-quals-node.c
@@ -0,0 +1,29 @@
+struct s {
+ int a;
+ int b[3];
+ int c[2][3];
+};
+
+struct c {
+ const struct s s;
+};
+
+extern struct c v;
+
+void f(void)
+{
+ v.s.a = 0;
+ *v.s.b = 0;
+ **v.s.c = 0;
+}
+
+/*
+ * check-name: array-quals-node
+ * check-known-to-fail
+ *
+ * check-error-start
+eval/array-quals-node.c:15:14: error: assignment to const expression
+eval/array-quals-node.c:16:14: error: assignment to const expression
+eval/array-quals-node.c:17:14: error: assignment to const expression
+ * check-error-end
+ */
diff --git a/validation/eval/array-quals0.c b/validation/eval/array-quals0.c
new file mode 100644
index 00000000..30727490
--- /dev/null
+++ b/validation/eval/array-quals0.c
@@ -0,0 +1,6 @@
+static int a[2][3];
+static const int (*p)[3] = a;
+
+/*
+ * check-name: array-quals0
+ */
diff --git a/validation/eval/array-quals1.c b/validation/eval/array-quals1.c
new file mode 100644
index 00000000..d3e54f3e
--- /dev/null
+++ b/validation/eval/array-quals1.c
@@ -0,0 +1,49 @@
+typedef const int ci_t;
+typedef int ia_t[2];
+typedef const int cia_t[2];
+
+static const int ci__a[2];
+static ci_t cit_a[2];
+static const ia_t c_iat;
+static cia_t ciat_;
+static cia_t ciata[2];
+
+static const void *const ok_ci__a = &ci__a;
+static void *const ko_ci__a = &ci__a;
+static const void *const ok_cit_a = &cit_a;
+static void *const ko_cit_a = &cit_a;
+static const void *const ok_c_iat = &c_iat;
+static void *const ko_c_iat = &c_iat;
+static const void *const ok_ciat_ = &ciat_;
+static void *const ko_ciat_ = &ciat_;
+static const void *const ok_ciata = &ciata;
+static void *const ko_ciata = &ciata;
+
+static volatile int vi__a[2];
+static volatile void *const ok_vi__a = &vi__a;
+static void *const ko_vi__a = &vi__a;
+
+/*
+ * check-name: array-quals1
+ *
+ * check-error-start
+eval/array-quals1.c:12:38: warning: incorrect type in initializer (different modifiers)
+eval/array-quals1.c:12:38: expected void *static const [toplevel] ko_ci__a
+eval/array-quals1.c:12:38: got int const ( * )[2]
+eval/array-quals1.c:14:38: warning: incorrect type in initializer (different modifiers)
+eval/array-quals1.c:14:38: expected void *static const [toplevel] ko_cit_a
+eval/array-quals1.c:14:38: got int const [usertype] ( * )[2]
+eval/array-quals1.c:16:38: warning: incorrect type in initializer (different modifiers)
+eval/array-quals1.c:16:38: expected void *static const [toplevel] ko_c_iat
+eval/array-quals1.c:16:38: got int const ( * )[2]
+eval/array-quals1.c:18:38: warning: incorrect type in initializer (different modifiers)
+eval/array-quals1.c:18:38: expected void *static const [toplevel] ko_ciat_
+eval/array-quals1.c:18:38: got int const ( * )[2]
+eval/array-quals1.c:20:38: warning: incorrect type in initializer (different modifiers)
+eval/array-quals1.c:20:38: expected void *static const [toplevel] ko_ciata
+eval/array-quals1.c:20:38: got int const [usertype] ( * )[2][2]
+eval/array-quals1.c:24:41: warning: incorrect type in initializer (different modifiers)
+eval/array-quals1.c:24:41: expected void *static const [toplevel] ko_vi__a
+eval/array-quals1.c:24:41: got int volatile ( * )[2]
+ * check-error-end
+ */
diff --git a/validation/linear/bug-assign-op0.c b/validation/linear/bug-assign-op0.c
new file mode 100644
index 00000000..0cabc622
--- /dev/null
+++ b/validation/linear/bug-assign-op0.c
@@ -0,0 +1,115 @@
+int asr(int s)
+{
+ s >>= 11U;
+ return s;
+}
+
+unsigned int lsr(unsigned int u)
+{
+ u >>= 11;
+ return u;
+}
+
+int divr(int s, unsigned long u)
+{
+ extern int use(int, unsigned);
+ int t = s;
+ s = s / u;
+ u = u / t;
+ return use(s, u);
+}
+
+int sdivul(int s, unsigned long u)
+{
+ s /= u; // divu
+ return s;
+}
+
+unsigned int udivsl(unsigned int u, long s)
+{
+ u /= s; // divs
+ return u;
+}
+
+int uldivs(int s, unsigned long u)
+{
+ u /= s; // divu
+ return u;
+}
+
+unsigned int sldivu(unsigned int u, long s)
+{
+ s /= u; // divs
+ return s;
+}
+
+/*
+ * check-name: bug-assign-op0
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-start
+asr:
+.L0:
+ <entry-point>
+ asr.32 %r2 <- %arg1, $11
+ ret.32 %r2
+
+
+lsr:
+.L2:
+ <entry-point>
+ lsr.32 %r6 <- %arg1, $11
+ ret.32 %r6
+
+
+divr:
+.L4:
+ <entry-point>
+ sext.64 %r11 <- (32) %arg1
+ divu.64 %r13 <- %r11, %arg2
+ trunc.32 %r14 <- (64) %r13
+ divu.64 %r18 <- %arg2, %r11
+ trunc.32 %r21 <- (64) %r18
+ call.32 %r22 <- use, %r14, %r21
+ ret.32 %r22
+
+
+sdivul:
+.L6:
+ <entry-point>
+ sext.64 %r26 <- (32) %arg1
+ divu.64 %r27 <- %r26, %arg2
+ trunc.32 %r28 <- (64) %r27
+ ret.32 %r28
+
+
+udivsl:
+.L8:
+ <entry-point>
+ zext.64 %r33 <- (32) %arg1
+ divs.64 %r34 <- %r33, %arg2
+ trunc.32 %r35 <- (64) %r34
+ ret.32 %r35
+
+
+uldivs:
+.L10:
+ <entry-point>
+ sext.64 %r39 <- (32) %arg1
+ divu.64 %r41 <- %arg2, %r39
+ trunc.32 %r43 <- (64) %r41
+ ret.32 %r43
+
+
+sldivu:
+.L12:
+ <entry-point>
+ zext.64 %r46 <- (32) %arg1
+ divs.64 %r48 <- %arg2, %r46
+ trunc.32 %r50 <- (64) %r48
+ ret.32 %r50
+
+
+ * check-output-end
+ */
diff --git a/validation/static_assert.c b/validation/static_assert.c
index dd5e0c08..0ab5844e 100644
--- a/validation/static_assert.c
+++ b/validation/static_assert.c
@@ -53,6 +53,10 @@ _Static_assert(1, );
_Static_assert(, "");
_Static_assert(,);
+// C2x's version: without message
+_Static_assert(1);
+_Static_assert(0);
+
/*
* check-name: static assertion
*
@@ -67,5 +71,6 @@ static_assert.c:52:19: error: string literal expected for _Static_assert()
static_assert.c:53:16: error: Expected constant expression
static_assert.c:54:16: error: Expected constant expression
static_assert.c:54:17: error: string literal expected for _Static_assert()
+static_assert.c:58:16: error: static assertion failed
* check-error-end
*/