]> granicus.if.org Git - php/commitdiff
Assert that EMPTY_SWITCH_DEFAULT_CASE() cannot be reached in debug
authorNikita Popov <nikic@php.net>
Fri, 16 May 2014 16:54:01 +0000 (18:54 +0200)
committerNikita Popov <nikic@php.net>
Thu, 22 May 2014 17:00:25 +0000 (19:00 +0200)
Zend/zend.h
Zend/zend_operators.c

index 278018154435a4fb75da21096b11867902e77551..1968d76c226c53941febdbb3458594e6a7ed5f80 100644 (file)
 # define ZEND_PATHS_SEPARATOR          ':'
 #endif
 
-#ifdef ZEND_WIN32
 /* Only use this macro if you know for sure that all of the switches values
    are covered by its case statements */
-#define EMPTY_SWITCH_DEFAULT_CASE() \
-                       default:                                \
-                               __assume(0);            \
-                               break;
+#if ZEND_DEBUG
+# define EMPTY_SWITCH_DEFAULT_CASE() default: ZEND_ASSERT(0); break;
+#elif defined(ZEND_WIN32)
+# define EMPTY_SWITCH_DEFAULT_CASE() default: __assume(0); break;
 #else
-#define EMPTY_SWITCH_DEFAULT_CASE()
+# define EMPTY_SWITCH_DEFAULT_CASE()
 #endif
 
 /* all HAVE_XXX test have to be after the include of zend_config above */
index 9e68df083dd0a98c14f6846529de79de67fcb0c8..5fb88b1ca85ebc6e559d96a8621d9b0d10ceaa1b 100644 (file)
@@ -431,11 +431,7 @@ ZEND_API void convert_to_long_base(zval *op, int base) /* {{{ */
                                }
                                return;
                        }
-               default:
-                       zend_error(E_WARNING, "Cannot convert to ordinal value");
-                       zval_dtor(op);
-                       ZVAL_LONG(op, 0);
-                       break;
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 }
 /* }}} */
@@ -493,11 +489,7 @@ ZEND_API void convert_to_double(zval *op) /* {{{ */
                                }
                                break;
                        }
-               default:
-                       zend_error(E_WARNING, "Cannot convert to real value (type=%d)", Z_TYPE_P(op));
-                       zval_dtor(op);
-                       ZVAL_DOUBLE(op, 0);
-                       break;
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 }
 /* }}} */
@@ -580,10 +572,7 @@ ZEND_API void convert_to_boolean(zval *op) /* {{{ */
                                }
                                break;
                        }
-               default:
-                       zval_dtor(op);
-                       ZVAL_BOOL(op, 0);
-                       break;
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 }
 /* }}} */
@@ -650,10 +639,7 @@ ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC) /* {{{ */
                        }
                        break;
                }
-               default:
-                       zval_dtor(op);
-                       ZVAL_BOOL(op, 0);
-                       break;
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 }
 /* }}} */
@@ -833,9 +819,7 @@ try_again:
                case IS_REFERENCE:
                        op = Z_REFVAL_P(op);
                        goto try_again;
-               default:
-                       zend_error(E_WARNING, "Cannot convert to ordinal value");
-                       return 0;
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 }
 /* }}} */
@@ -875,9 +859,7 @@ try_again:
                case IS_REFERENCE:
                        op = Z_REFVAL_P(op);
                        goto try_again;
-               default:
-                       zend_error(E_WARNING, "Cannot convert to real value (type=%d)", Z_TYPE_P(op));
-                       return 0.0;
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 }
 /* }}} */
@@ -934,9 +916,7 @@ try_again:
                case IS_REFERENCE:
                        op = Z_REFVAL_P(op);
                        goto try_again;
-               default:
-                       //??? original code returns bool(0)
-                       return STR_EMPTY_ALLOC();
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 }
 /* }}} */