aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--evaluate.c2
-rw-r--r--validation/goto-reserved.c12
2 files changed, 13 insertions, 1 deletions
diff --git a/evaluate.c b/evaluate.c
index edace120..c9ed663d 100644
--- a/evaluate.c
+++ b/evaluate.c
@@ -3593,7 +3593,7 @@ static void evaluate_goto_statement(struct statement *stmt)
{
struct symbol *label = stmt->goto_label;
- if (label && !label->stmt && !lookup_keyword(label->ident, NS_KEYWORD))
+ if (label && !label->stmt && label->ident && !lookup_keyword(label->ident, NS_KEYWORD))
sparse_error(stmt->pos, "label '%s' was not declared", show_ident(label->ident));
evaluate_expression(stmt->goto_expression);
diff --git a/validation/goto-reserved.c b/validation/goto-reserved.c
new file mode 100644
index 00000000..fbaf03e1
--- /dev/null
+++ b/validation/goto-reserved.c
@@ -0,0 +1,12 @@
+static void foo(void)
+{
+ goto return;
+}
+
+/*
+ * check-name: goto-reserved
+ *
+ * check-error-start
+goto-reserved.c:3:14: error: Trying to use reserved word 'return' as identifier
+ * check-error-end
+ */