diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-04-09 23:58:10 +0200 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-05-21 17:27:45 +0200 |
commit | aa42800cc4aca57bb29cdc90fcace6c352449078 (patch) | |
tree | a223493fc2f407bcfe5603e01cc92b9a65913e9e | |
parent | 154278d4e26d9d48fbb5f2668533a4c4e598b564 (diff) | |
download | sparse-aa42800cc4aca57bb29cdc90fcace6c352449078.tar.gz |
bad-goto: add testcase for 'jump inside discarded expression statement'
A goto done into an piece of code discarded at expand or
linearize time will produce an invalid IR.
Add a testcase for it.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r-- | validation/label-stmt-expr1.c | 29 | ||||
-rw-r--r-- | validation/linear/goto-and-expr-stmt0.c | 28 |
2 files changed, 57 insertions, 0 deletions
diff --git a/validation/label-stmt-expr1.c b/validation/label-stmt-expr1.c new file mode 100644 index 00000000..339217dc --- /dev/null +++ b/validation/label-stmt-expr1.c @@ -0,0 +1,29 @@ +static int foo(void) +{ + goto l; + ({ +l: + 0; + }); +} + +static void bar(void) +{ + ({ +l: + 0; + }); + goto l; +} + +/* + * check-name: label-stmt-expr1 + * check-known-to-fail + * + * check-error-start +label-stmt-expr1.c:3:9: error: label 'l' used outside statement expression +label-stmt-expr1.c:5:1: label 'l' defined here +label-stmt-expr1.c:16:9: error: label 'l' used outside statement expression +label-stmt-expr1.c:13:1: label 'l' defined here + * check-error-end + */ diff --git a/validation/linear/goto-and-expr-stmt0.c b/validation/linear/goto-and-expr-stmt0.c new file mode 100644 index 00000000..54881353 --- /dev/null +++ b/validation/linear/goto-and-expr-stmt0.c @@ -0,0 +1,28 @@ +int t(void) +{ + goto inside; + return 1 ? 2 : ({ +inside: + return 3; + 4; + }); +} + +void f(int x, int y) +{ + 1 ? x : ({ +a: + y; + }); + goto a; +} + +/* + * check-name: goto-and-expr-stmt0 + * check-command: test-linearize -Wno-decl $file + * check-known-to-fail + * + * check-output-ignore + * check-output-excludes: END + * check-error-ignore + */ |