aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2019-09-30 12:59:42 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2019-09-30 15:30:55 +0200
commitd33c85dfbe50039a64595829cdcdf0d641042dc6 (patch)
tree49cc8609b6fd2874b1eb03f18e7cc8811dcf280f
parent6b9699f0f2e48961af25843eea9b694d043bd352 (diff)
Diagnose `case` and `default` outside `switch`
-rw-r--r--libbuild2/parser.cxx3
-rw-r--r--tests/switch/testscript8
2 files changed, 10 insertions, 1 deletions
diff --git a/libbuild2/parser.cxx b/libbuild2/parser.cxx
index a8abbfb..a6a5a83 100644
--- a/libbuild2/parser.cxx
+++ b/libbuild2/parser.cxx
@@ -392,7 +392,8 @@ namespace build2
{
f = &parser::parse_switch;
}
- else if (n == "case")
+ else if (n == "case" ||
+ n == "default")
{
// Valid ones are handled in parse_switch().
//
diff --git a/tests/switch/testscript b/tests/switch/testscript
index f6c3753..e0ffe8e 100644
--- a/tests/switch/testscript
+++ b/tests/switch/testscript
@@ -204,6 +204,14 @@ EOI
1,d
EOO
+: case-outside
+:
+$* <<EOI 2>>EOE != 0
+case 1
+EOI
+<stdin>:1:1: error: case outside switch
+EOE
+
: default-before-case
:
$* <<EOI 2>>EOE != 0