diff options
| -rw-r--r-- | linearize.c | 2 | ||||
| -rw-r--r-- | validation/discarded-label-statement.c | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/linearize.c b/linearize.c index 1309c7dd..6acf5187 100644 --- a/linearize.c +++ b/linearize.c @@ -2030,8 +2030,8 @@ pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stmt) if (label->used) { add_label(ep, label); - linearize_statement(ep, stmt->label_statement); } + linearize_statement(ep, stmt->label_statement); break; } diff --git a/validation/discarded-label-statement.c b/validation/discarded-label-statement.c new file mode 100644 index 00000000..b4e58ac6 --- /dev/null +++ b/validation/discarded-label-statement.c @@ -0,0 +1,24 @@ +/* + * Verify that the statement following an unused label + * is not discarded with the label. + */ + +static int bad(int a, int b) +{ + int r = 0; + +start: + r += a; + r += b; + + return r; +} + +/* + * check-name: discarded-label-statement + * check-command: test-linearize $file + * + * check-output-ignore + * check-output-contains: add + * check-output-contains: %arg1 + */ |
