]> granicus.if.org Git - php/commitdiff
Error on multiple default blocks in a switch
authorLevi Morrison <levim@php.net>
Fri, 5 Sep 2014 22:07:07 +0000 (16:07 -0600)
committerLevi Morrison <levim@php.net>
Fri, 5 Sep 2014 22:07:07 +0000 (16:07 -0600)
Part of RFC: https://wiki.php.net/rfc/switch.default.multiple

Zend/tests/034.phpt
Zend/zend_compile.c

index 6e46f2645e4fcb8844dede0f2c66c7aa80fbfa7c..0bcfa23f19f959b7ab0a4ba486b6d28c8693ca9e 100644 (file)
@@ -22,5 +22,5 @@ switch (1) {
 }
 
 ?>
---EXPECT--
-3
+--EXPECTF--
+Fatal error: Switch statements may only contain one default clause in %s on line 13
index a5a32298d584a7fa8d8473da86aede243ba33b8e..3af97ccc02e859fd0111ffbe6edd7dc6badbc9ad 100644 (file)
@@ -5091,6 +5091,11 @@ void zend_compile_switch(zend_ast *ast TSRMLS_DC) /* {{{ */
                znode cond_node;
 
                if (!cond_ast) {
+                       if (has_default_case) {
+                               CG(zend_lineno) = case_ast->lineno;
+                               zend_error_noreturn(E_COMPILE_ERROR,
+                                       "Switch statements may only contain one default clause");
+                       }
                        has_default_case = 1;
                        continue;
                }