Bladeren bron

Fix `match` bug when no `case` matches (#677)

Geoff Romer 4 jaren geleden
bovenliggende
commit
fb0c0b63bf

+ 1 - 1
executable_semantics/interpreter/interpreter.cpp

@@ -854,7 +854,7 @@ void StepStmt() {
             clause_num = (act->pos - 1) / 2;
             if (clause_num ==
                 static_cast<int>(stmt->GetMatch().clauses->size())) {
-              frame->todo.Pop(2);
+              frame->todo.Pop(1);
             }
           }
         }

+ 1 - 0
executable_semantics/test_list.bzl

@@ -59,6 +59,7 @@ TEST_LIST = [
     "match_placeholder",
     "match_type",
     "next",
+    "no_match",
     "pattern_init",
     "pattern_variable_fail",
     "placeholder_variable",

+ 12 - 0
executable_semantics/testdata/no_match.carbon

@@ -0,0 +1,12 @@
+// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+fn main() -> Int {
+  var x: Int = 0;
+  match (x) {
+    case 1 =>
+      return 1;
+  }
+  return 0;
+}

+ 1 - 0
executable_semantics/testdata/no_match.golden

@@ -0,0 +1 @@
+result: 0