diff options
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/eval/array-quals-node.c | 29 | ||||
| -rw-r--r-- | validation/eval/array-quals0.c | 6 | ||||
| -rw-r--r-- | validation/eval/array-quals1.c | 49 | ||||
| -rw-r--r-- | validation/linear/bug-assign-op0.c | 115 | ||||
| -rw-r--r-- | validation/static_assert.c | 5 |
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 */ |
