浏览代码

Fix 'unreachable-code' false-positive, fixes #55154

Pawel Lampe 3 年之前
父节点
当前提交
86c0e38e8f

+ 1 - 5
modules/gdscript/gdscript_parser.cpp

@@ -1813,7 +1813,6 @@ GDScriptParser::MatchNode *GDScriptParser::parse_match() {
 #ifdef DEBUG_ENABLED
 	bool all_have_return = true;
 	bool have_wildcard = false;
-	bool wildcard_has_return = false;
 	bool have_wildcard_without_continue = false;
 #endif
 
@@ -1831,9 +1830,6 @@ GDScriptParser::MatchNode *GDScriptParser::parse_match() {
 
 		if (branch->has_wildcard) {
 			have_wildcard = true;
-			if (branch->block->has_return) {
-				wildcard_has_return = true;
-			}
 			if (!branch->block->has_continue) {
 				have_wildcard_without_continue = true;
 			}
@@ -1848,7 +1844,7 @@ GDScriptParser::MatchNode *GDScriptParser::parse_match() {
 	consume(GDScriptTokenizer::Token::DEDENT, R"(Expected an indented block after "match" statement.)");
 
 #ifdef DEBUG_ENABLED
-	if (wildcard_has_return || (all_have_return && have_wildcard)) {
+	if (all_have_return && have_wildcard) {
 		current_suite->has_return = true;
 	}
 #endif

+ 16 - 0
modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.gd

@@ -0,0 +1,16 @@
+func test():
+	var foo := "bar"
+	match foo:
+		"baz":
+			return
+		_:
+			pass
+	match foo:
+		"baz":
+			return
+	match foo:
+		"bar":
+			pass
+		_:
+			return
+	print("reached")

+ 2 - 0
modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.out

@@ -0,0 +1,2 @@
+GDTEST_OK
+reached