- merge functions entities declared in lokal scope
Missing Errors:
-- label: declaration; is no valid C99 but we parse it anyway
- check switches for double cases
Missing Warnings:
"case label not within a switch statement");
}
}
- statement->case_label.statement = parse_statement();
+
+ statement_t *const inner_stmt = parse_statement();
+ statement->case_label.statement = inner_stmt;
+ if (inner_stmt->kind == STATEMENT_DECLARATION) {
+ errorf(&inner_stmt->base.source_position, "declaration after case label");
+ }
return statement;
end_error:
errorf(&statement->base.source_position,
"'default' label not within a switch statement");
}
- statement->case_label.statement = parse_statement();
+
+ statement_t *const inner_stmt = parse_statement();
+ statement->case_label.statement = inner_stmt;
+ if (inner_stmt->kind == STATEMENT_DECLARATION) {
+ errorf(&inner_stmt->base.source_position, "declaration after default label");
+ }
return statement;
end_error:
statement->label.statement = create_empty_statement();
next_token();
} else {
- statement->label.statement = parse_statement();
+ statement_t *const inner_stmt = parse_statement();
+ statement->label.statement = inner_stmt;
+ if (inner_stmt->kind == STATEMENT_DECLARATION) {
+ errorf(&inner_stmt->base.source_position, "declaration after label");
+ }
}
/* remember the labels in a list for later checking */