From 3d39479f4d7c86c66aa92fc5d0d97fb660109ee9 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 30 Jan 2019 17:16:09 +0100 Subject: [PATCH 1/2] Remove support for case-insensitive constants The only remaining case-insensitive constants are null, true and false, which are handled explicitly. In the future we may convert them from constants to reserved keywords. --- Zend/tests/008.phpt | 4 +- Zend/zend_builtin_functions.c | 2 +- Zend/zend_compile.c | 43 +---- Zend/zend_constants.c | 214 +++++++++-------------- Zend/zend_constants.h | 20 ++- Zend/zend_execute.c | 58 +----- ext/opcache/Optimizer/block_pass.c | 35 ++-- ext/opcache/Optimizer/compact_literals.c | 6 +- 8 files changed, 129 insertions(+), 253 deletions(-) diff --git a/Zend/tests/008.phpt b/Zend/tests/008.phpt index 0766c3e1a4b7a..cacba06370e9d 100644 --- a/Zend/tests/008.phpt +++ b/Zend/tests/008.phpt @@ -29,7 +29,9 @@ NULL Warning: define() expects at least 2 parameters, 1 given in %s on line %d NULL -bool(true) + +Notice: Constant TRUE already defined in %s on line %d +bool(false) Warning: define() expects parameter 3 to be bool, array given in %s on line %d NULL diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 786e6b48137fe..0cd3e0c0fe069 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -854,7 +854,7 @@ ZEND_FUNCTION(defined) Z_PARAM_STR(name) ZEND_PARSE_PARAMETERS_END(); - if (zend_get_constant_ex(name, zend_get_executed_scope(), ZEND_FETCH_CLASS_SILENT | ZEND_GET_CONSTANT_NO_DEPRECATION_CHECK)) { + if (zend_get_constant_ex(name, zend_get_executed_scope(), ZEND_FETCH_CLASS_SILENT)) { RETURN_TRUE; } else { RETURN_FALSE; diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 59ff42cc30e73..d153bf79f4dc1 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -585,10 +585,6 @@ static int zend_add_const_name_literal(zend_string *name, zend_bool unqualified) zend_str_tolower(ZSTR_VAL(tmp_name), ns_len); zend_add_literal_string(&tmp_name); - /* lowercased namespace name & lowercased constant name */ - tmp_name = zend_string_tolower(name); - zend_add_literal_string(&tmp_name); - if (!unqualified) { return ret; } @@ -600,11 +596,6 @@ static int zend_add_const_name_literal(zend_string *name, zend_bool unqualified) tmp_name = zend_string_init(after_ns, after_ns_len, 0); zend_add_literal_string(&tmp_name); - /* lowercased unqualified constant name */ - tmp_name = zend_string_alloc(after_ns_len, 0); - zend_str_tolower_copy(ZSTR_VAL(tmp_name), after_ns, after_ns_len); - zend_add_literal_string(&tmp_name); - return ret; } /* }}} */ @@ -1213,22 +1204,9 @@ ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char } /* }}} */ -static zend_constant *zend_lookup_reserved_const(const char *name, size_t len) /* {{{ */ -{ - zend_constant *c = zend_hash_find_ptr_lc(EG(zend_constants), name, len); - if (c && !(ZEND_CONSTANT_FLAGS(c) & CONST_CS) && (ZEND_CONSTANT_FLAGS(c) & CONST_CT_SUBST)) { - return c; - } - return NULL; -} -/* }}} */ - static zend_bool zend_try_ct_eval_const(zval *zv, zend_string *name, zend_bool is_fully_qualified) /* {{{ */ { - zend_constant *c; - - /* Substitute case-sensitive (or lowercase) constants */ - c = zend_hash_find_ptr(EG(zend_constants), name); + zend_constant *c = zend_hash_find_ptr(EG(zend_constants), name); if (c && ( ((ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT) && !(CG(compiler_options) & ZEND_COMPILE_NO_PERSISTENT_CONSTANT_SUBSTITUTION) @@ -1243,19 +1221,19 @@ static zend_bool zend_try_ct_eval_const(zval *zv, zend_string *name, zend_bool i /* Substitute true, false and null (including unqualified usage in namespaces) */ const char *lookup_name = ZSTR_VAL(name); size_t lookup_len = ZSTR_LEN(name); + zval *val; if (!is_fully_qualified) { zend_get_unqualified_name(name, &lookup_name, &lookup_len); } - c = zend_lookup_reserved_const(lookup_name, lookup_len); - if (c) { - ZVAL_COPY_OR_DUP(zv, &c->value); + if ((val = zend_get_special_const(lookup_name, lookup_len))) { + ZVAL_COPY_VALUE(zv, val); return 1; } - } - return 0; + return 0; + } } /* }}} */ @@ -3249,13 +3227,6 @@ int zend_compile_func_defined(znode *result, zend_ast_list *args) /* {{{ */ LITERAL_STR(opline->op1, name); opline->extended_value = zend_alloc_cache_slot(); - /* Lowercase constant name in a separate literal */ - { - zval c; - zend_string *lcname = zend_string_tolower(name); - ZVAL_NEW_STR(&c, lcname); - zend_add_literal(&c); - } return SUCCESS; } /* }}} */ @@ -6538,7 +6509,7 @@ void zend_compile_const_decl(zend_ast *ast) /* {{{ */ value_node.op_type = IS_CONST; zend_const_expr_to_zval(value_zv, value_ast); - if (zend_lookup_reserved_const(ZSTR_VAL(unqualified_name), ZSTR_LEN(unqualified_name))) { + if (zend_get_special_const(ZSTR_VAL(unqualified_name), ZSTR_LEN(unqualified_name))) { zend_error_noreturn(E_COMPILE_ERROR, "Cannot redeclare constant '%s'", ZSTR_VAL(unqualified_name)); } diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 0f3fb9cfa0ace..6371492dc065a 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -33,6 +33,9 @@ #define MARK_CONSTANT_VISITED(zv) Z_ACCESS_FLAGS_P(zv) |= IS_CONSTANT_VISITED_MARK #define RESET_CONSTANT_VISITED(zv) Z_ACCESS_FLAGS_P(zv) &= ~IS_CONSTANT_VISITED_MARK +/* Use for special null/true/false constants. */ +static zval null_value, true_value, false_value; + void free_zend_constant(zval *zv) { zend_constant *c = Z_PTR_P(zv); @@ -99,7 +102,6 @@ void clean_module_constants(int module_number) int zend_startup_constants(void) { EG(zend_constants) = (HashTable *) malloc(sizeof(HashTable)); - zend_hash_init(EG(zend_constants), 128, NULL, ZEND_CONSTANT_DTOR, 1); return SUCCESS; } @@ -128,14 +130,17 @@ void zend_register_standard_constants(void) REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_PROVIDE_OBJECT", DEBUG_BACKTRACE_PROVIDE_OBJECT, CONST_PERSISTENT | CONST_CS); REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT | CONST_CS); - /* true/false constants */ - { - REGISTER_MAIN_BOOL_CONSTANT("TRUE", 1, CONST_PERSISTENT | CONST_CT_SUBST); - REGISTER_MAIN_BOOL_CONSTANT("FALSE", 0, CONST_PERSISTENT | CONST_CT_SUBST); - REGISTER_MAIN_BOOL_CONSTANT("ZEND_THREAD_SAFE", ZTS_V, CONST_PERSISTENT | CONST_CS); - REGISTER_MAIN_BOOL_CONSTANT("ZEND_DEBUG_BUILD", ZEND_DEBUG, CONST_PERSISTENT | CONST_CS); - } - REGISTER_MAIN_NULL_CONSTANT("NULL", CONST_PERSISTENT | CONST_CT_SUBST); + REGISTER_MAIN_BOOL_CONSTANT("ZEND_THREAD_SAFE", ZTS_V, CONST_PERSISTENT | CONST_CS); + REGISTER_MAIN_BOOL_CONSTANT("ZEND_DEBUG_BUILD", ZEND_DEBUG, CONST_PERSISTENT | CONST_CS); + + /* Special constants true/false/null. */ + REGISTER_MAIN_BOOL_CONSTANT("TRUE", 1, CONST_PERSISTENT); + REGISTER_MAIN_BOOL_CONSTANT("FALSE", 0, CONST_PERSISTENT); + REGISTER_MAIN_NULL_CONSTANT("NULL", CONST_PERSISTENT); + + ZVAL_NULL(&null_value); + ZVAL_TRUE(&true_value); + ZVAL_FALSE(&false_value); } @@ -204,7 +209,7 @@ ZEND_API void zend_register_string_constant(const char *name, size_t name_len, c zend_register_stringl_constant(name, name_len, strval, strlen(strval), flags, module_number); } -static zend_constant *zend_get_special_constant(const char *name, size_t name_len) +static zend_constant *zend_get_halt_offset_constant(const char *name, size_t name_len) { zend_constant *c; static const char haltoff[] = "__COMPILER_HALT_OFFSET__"; @@ -230,6 +235,37 @@ static zend_constant *zend_get_special_constant(const char *name, size_t name_le } } +ZEND_API zval *_zend_get_special_const(const char *name, size_t len) /* {{{ */ +{ + if (len == 4) { + if ((name[0] == 'n' || name[0] == 'N') && + (name[1] == 'u' || name[1] == 'U') && + (name[2] == 'l' || name[2] == 'L') && + (name[3] == 'l' || name[3] == 'L') + ) { + return &null_value; + } + if ((name[0] == 't' || name[0] == 'T') && + (name[1] == 'r' || name[1] == 'R') && + (name[2] == 'u' || name[2] == 'U') && + (name[3] == 'e' || name[3] == 'E') + ) { + return &true_value; + } + } else { + if ((name[0] == 'f' || name[0] == 'F') && + (name[1] == 'a' || name[1] == 'A') && + (name[2] == 'l' || name[2] == 'L') && + (name[3] == 's' || name[3] == 'S') && + (name[4] == 'e' || name[4] == 'E') + ) { + return &false_value; + } + } + return 0; +} +/* }}} */ + ZEND_API int zend_verify_const_access(zend_class_constant *c, zend_class_entry *scope) /* {{{ */ { if (Z_ACCESS_FLAGS(c->value) & ZEND_ACC_PUBLIC) { @@ -243,80 +279,34 @@ ZEND_API int zend_verify_const_access(zend_class_constant *c, zend_class_entry * } /* }}} */ -static inline zend_constant *zend_get_constant_str_impl(const char *name, size_t name_len) -{ - zend_constant *c; - ALLOCA_FLAG(use_heap) - - if ((c = zend_hash_str_find_ptr(EG(zend_constants), name, name_len)) == NULL) { - char *lcname = do_alloca(name_len + 1, use_heap); - zend_str_tolower_copy(lcname, name, name_len); - if ((c = zend_hash_str_find_ptr(EG(zend_constants), lcname, name_len)) != NULL) { - if (ZEND_CONSTANT_FLAGS(c) & CONST_CS) { - c = NULL; - } - } else { - c = zend_get_special_constant(name, name_len); - } - free_alloca(lcname, use_heap); - } - - return c; -} - ZEND_API zval *zend_get_constant_str(const char *name, size_t name_len) { - zend_constant *c = zend_get_constant_str_impl(name, name_len); - return c ? &c->value : NULL; -} + zend_constant *c = zend_hash_str_find_ptr(EG(zend_constants), name, name_len); + if (c) { + return &c->value; + } -static inline zend_constant *zend_get_constant_impl(zend_string *name) -{ - zval *zv; - zend_constant *c; - ALLOCA_FLAG(use_heap) - - zv = zend_hash_find(EG(zend_constants), name); - if (zv == NULL) { - char *lcname = do_alloca(ZSTR_LEN(name) + 1, use_heap); - zend_str_tolower_copy(lcname, ZSTR_VAL(name), ZSTR_LEN(name)); - zv = zend_hash_str_find(EG(zend_constants), lcname, ZSTR_LEN(name)); - if (zv != NULL) { - c = Z_PTR_P(zv); - if (ZEND_CONSTANT_FLAGS(c) & CONST_CS) { - c = NULL; - } - } else { - c = zend_get_special_constant(ZSTR_VAL(name), ZSTR_LEN(name)); - } - free_alloca(lcname, use_heap); - return c; - } else { - return (zend_constant *) Z_PTR_P(zv); + c = zend_get_halt_offset_constant(name, name_len); + if (c) { + return &c->value; } + + return zend_get_special_const(name, name_len); } ZEND_API zval *zend_get_constant(zend_string *name) { - zend_constant *c = zend_get_constant_impl(name); - return c ? &c->value : NULL; -} + zend_constant *c = zend_hash_find_ptr(EG(zend_constants), name); + if (c) { + return &c->value; + } -static zend_bool is_access_deprecated(const zend_constant *c, const char *access_name) { - const char *ns_sep = zend_memrchr(ZSTR_VAL(c->name), '\\', ZSTR_LEN(c->name)); - if (ns_sep) { - /* Namespaces are always case-insensitive. Only compare shortname. */ - size_t shortname_offset = ns_sep - ZSTR_VAL(c->name) + 1; - size_t shortname_len = ZSTR_LEN(c->name) - shortname_offset; - return memcmp( - access_name + shortname_offset, - ZSTR_VAL(c->name) + shortname_offset, - shortname_len - ) != 0; - } else { - /* No namespace, compare whole name */ - return memcmp(access_name, ZSTR_VAL(c->name), ZSTR_LEN(c->name)) != 0; + c = zend_get_halt_offset_constant(ZSTR_VAL(name), ZSTR_LEN(name)); + if (c) { + return &c->value; } + + return zend_get_special_const(ZSTR_VAL(name), ZSTR_LEN(name)); } ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, uint32_t flags) @@ -419,56 +409,34 @@ ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, size_t lcname_len; ALLOCA_FLAG(use_heap) + /* Lowercase the namespace portion */ lcname_len = prefix_len + 1 + const_name_len; lcname = do_alloca(lcname_len + 1, use_heap); zend_str_tolower_copy(lcname, name, prefix_len); - /* Check for namespace constant */ lcname[prefix_len] = '\\'; memcpy(lcname + prefix_len + 1, constant_name, const_name_len + 1); - if ((c = zend_hash_str_find_ptr(EG(zend_constants), lcname, lcname_len)) == NULL) { - /* try lowercase */ - zend_str_tolower(lcname + prefix_len + 1, const_name_len); - if ((c = zend_hash_str_find_ptr(EG(zend_constants), lcname, lcname_len)) != NULL) { - if ((ZEND_CONSTANT_FLAGS(c) & CONST_CS) != 0) { - c = NULL; - } - } - } + c = zend_hash_str_find_ptr(EG(zend_constants), lcname, lcname_len); free_alloca(lcname, use_heap); - if (!c) { - if (!(flags & IS_CONSTANT_UNQUALIFIED)) { - return NULL; - } + if (c) { + return &c->value; + } - /* name requires runtime resolution, need to check non-namespaced name */ - c = zend_get_constant_str_impl(constant_name, const_name_len); - name = constant_name; + if (!(flags & IS_CONSTANT_UNQUALIFIED)) { + return NULL; } + + /* name requires runtime resolution, need to check non-namespaced name */ + return zend_get_constant_str(constant_name, const_name_len); } else { if (cname) { - c = zend_get_constant_impl(cname); + return zend_get_constant(cname); } else { - c = zend_get_constant_str_impl(name, name_len); - } - } - - if (!c) { - return NULL; - } - - if (!(flags & ZEND_GET_CONSTANT_NO_DEPRECATION_CHECK)) { - if (!(ZEND_CONSTANT_FLAGS(c) & (CONST_CS|CONST_CT_SUBST)) && is_access_deprecated(c, name)) { - zend_error(E_DEPRECATED, - "Case-insensitive constants are deprecated. " - "The correct casing for this constant is \"%s\"", - ZSTR_VAL(c->name)); + return zend_get_constant_str(name, name_len); } } - - return &c->value; } static void* zend_hash_add_constant(HashTable *ht, zend_string *key, zend_constant *c) @@ -489,38 +457,30 @@ ZEND_API int zend_register_constant(zend_constant *c) zend_string *lowercase_name = NULL; zend_string *name; int ret = SUCCESS; + zend_bool persistent = (ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT) != 0; #if 0 printf("Registering constant for module %d\n", c->module_number); #endif - if (!(ZEND_CONSTANT_FLAGS(c) & CONST_CS)) { - lowercase_name = zend_string_tolower_ex(c->name, ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT); + char *slash = strrchr(ZSTR_VAL(c->name), '\\'); + if (slash) { + lowercase_name = zend_string_init(ZSTR_VAL(c->name), ZSTR_LEN(c->name), persistent); + zend_str_tolower(ZSTR_VAL(lowercase_name), slash - ZSTR_VAL(c->name)); lowercase_name = zend_new_interned_string(lowercase_name); name = lowercase_name; } else { - char *slash = strrchr(ZSTR_VAL(c->name), '\\'); - if (slash) { - lowercase_name = zend_string_init(ZSTR_VAL(c->name), ZSTR_LEN(c->name), ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT); - zend_str_tolower(ZSTR_VAL(lowercase_name), slash - ZSTR_VAL(c->name)); - lowercase_name = zend_new_interned_string(lowercase_name); - name = lowercase_name; - } else { - name = c->name; - } + name = c->name; } - /* Check if the user is trying to define the internal pseudo constant name __COMPILER_HALT_OFFSET__ */ + /* Check if the user is trying to define any special constant */ if (zend_string_equals_literal(name, "__COMPILER_HALT_OFFSET__") - || zend_hash_add_constant(EG(zend_constants), name, c) == NULL) { - - /* The internal __COMPILER_HALT_OFFSET__ is prefixed by NULL byte */ - if (ZSTR_VAL(c->name)[0] == '\0' && ZSTR_LEN(c->name) > sizeof("\0__COMPILER_HALT_OFFSET__")-1 - && memcmp(ZSTR_VAL(name), "\0__COMPILER_HALT_OFFSET__", sizeof("\0__COMPILER_HALT_OFFSET__")) == 0) { - } + || (!persistent && zend_get_special_const(ZSTR_VAL(name), ZSTR_LEN(name))) + || zend_hash_add_constant(EG(zend_constants), name, c) == NULL + ) { zend_error(E_NOTICE,"Constant %s already defined", ZSTR_VAL(name)); zend_string_release(c->name); - if (!(ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT)) { + if (!persistent) { zval_ptr_dtor_nogc(&c->value); } ret = FAILURE; diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h index fec4f294e9e65..66c9e1c63cd6e 100644 --- a/Zend/zend_constants.h +++ b/Zend/zend_constants.h @@ -22,16 +22,12 @@ #include "zend_globals.h" -#define CONST_CS (1<<0) /* Case Sensitive */ -#define CONST_PERSISTENT (1<<1) /* Persistent */ -#define CONST_CT_SUBST (1<<2) /* Allow compile-time substitution */ -#define CONST_NO_FILE_CACHE (1<<3) /* Can't be saved in file cache */ +#define CONST_CS 0 /* No longer used -- always case sensitive */ +#define CONST_PERSISTENT (1<<0) /* Persistent */ +#define CONST_NO_FILE_CACHE (1<<1) /* Can't be saved in file cache */ #define PHP_USER_CONSTANT 0x7fffff /* a constant defined in user space */ -/* Flag for zend_get_constant_ex(). Must not class with ZEND_FETCH_CLASS_* flags. */ -#define ZEND_GET_CONSTANT_NO_DEPRECATION_CHECK 0x1000 - typedef struct _zend_constant { zval value; zend_string *name; @@ -89,6 +85,16 @@ ZEND_API int zend_register_constant(zend_constant *c); #ifdef ZTS void zend_copy_constants(HashTable *target, HashTable *sourc); #endif + +ZEND_API zval *_zend_get_special_const(const char *name, size_t name_len); + +static zend_always_inline zval *zend_get_special_const(const char *name, size_t name_len) { + if (name_len == 4 || name_len == 5) { + return _zend_get_special_const(name, name_len); + } + return NULL; +} + END_EXTERN_C() #define ZEND_CONSTANT_DTOR free_zend_constant diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index db47aaa9e5838..39155e8827537 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -4147,31 +4147,17 @@ static zend_always_inline int _zend_quick_get_constant( const zval *key, uint32_t flags, int check_defined_only OPLINE_DC EXECUTE_DATA_DC) /* {{{ */ { zval *zv; - const zval *orig_key = key; zend_constant *c = NULL; + /* null/true/false are resolved during compilation, so don't check for them here. */ zv = zend_hash_find_ex(EG(zend_constants), Z_STR_P(key), 1); if (zv) { c = (zend_constant*)Z_PTR_P(zv); - } else { + } else if ((flags & (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) == (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) { key++; zv = zend_hash_find_ex(EG(zend_constants), Z_STR_P(key), 1); - if (zv && (ZEND_CONSTANT_FLAGS((zend_constant*)Z_PTR_P(zv)) & CONST_CS) == 0) { + if (zv) { c = (zend_constant*)Z_PTR_P(zv); - } else { - if ((flags & (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) == (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) { - key++; - zv = zend_hash_find_ex(EG(zend_constants), Z_STR_P(key), 1); - if (zv) { - c = (zend_constant*)Z_PTR_P(zv); - } else { - key++; - zv = zend_hash_find_ex(EG(zend_constants), Z_STR_P(key), 1); - if (zv && (ZEND_CONSTANT_FLAGS((zend_constant*)Z_PTR_P(zv)) & CONST_CS) == 0) { - c = (zend_constant*)Z_PTR_P(zv); - } - } - } } } @@ -4199,44 +4185,6 @@ static zend_always_inline int _zend_quick_get_constant( if (!check_defined_only) { ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value); - if (!(ZEND_CONSTANT_FLAGS(c) & (CONST_CS|CONST_CT_SUBST))) { - const char *ns_sep; - size_t shortname_offset; - size_t shortname_len; - zend_bool is_deprecated; - - if (flags & IS_CONSTANT_UNQUALIFIED) { - const zval *access_key; - - if (!(flags & IS_CONSTANT_IN_NAMESPACE)) { - access_key = orig_key - 1; - } else { - if (key < orig_key + 2) { - goto check_short_name; - } else { - access_key = orig_key + 2; - } - } - is_deprecated = !zend_string_equals(c->name, Z_STR_P(access_key)); - } else { -check_short_name: - ns_sep = zend_memrchr(ZSTR_VAL(c->name), '\\', ZSTR_LEN(c->name)); - ZEND_ASSERT(ns_sep); - /* Namespaces are always case-insensitive. Only compare shortname. */ - shortname_offset = ns_sep - ZSTR_VAL(c->name) + 1; - shortname_len = ZSTR_LEN(c->name) - shortname_offset; - - is_deprecated = memcmp(ZSTR_VAL(c->name) + shortname_offset, Z_STRVAL_P(orig_key - 1) + shortname_offset, shortname_len) != 0; - } - - if (is_deprecated) { - zend_error(E_DEPRECATED, - "Case-insensitive constants are deprecated. " - "The correct casing for this constant is \"%s\"", - ZSTR_VAL(c->name)); - return SUCCESS; - } - } } CACHE_PTR(opline->extended_value, c); diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index 45fe55b1ed595..84c5687212b4d 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/ext/opcache/Optimizer/block_pass.c @@ -33,27 +33,9 @@ /* Checks if a constant (like "true") may be replaced by its value */ int zend_optimizer_get_persistent_constant(zend_string *name, zval *result, int copy) { - zend_constant *c; - char *lookup_name; - int retval = 1; - ALLOCA_FLAG(use_heap); - - if ((c = zend_hash_find_ptr(EG(zend_constants), name)) == NULL) { - lookup_name = do_alloca(ZSTR_LEN(name) + 1, use_heap); - memcpy(lookup_name, ZSTR_VAL(name), ZSTR_LEN(name) + 1); - zend_str_tolower(lookup_name, ZSTR_LEN(name)); - - if ((c = zend_hash_str_find_ptr(EG(zend_constants), lookup_name, ZSTR_LEN(name))) != NULL) { - if (!(ZEND_CONSTANT_FLAGS(c) & CONST_CT_SUBST) || (ZEND_CONSTANT_FLAGS(c) & CONST_CS)) { - retval = 0; - } - } else { - retval = 0; - } - free_alloca(lookup_name, use_heap); - } - - if (retval) { + zval *zv; + zend_constant *c = zend_hash_find_ptr(EG(zend_constants), name); + if (c) { if ((ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT) && (!(ZEND_CONSTANT_FLAGS(c) & CONST_NO_FILE_CACHE) || !(CG(compiler_options) & ZEND_COMPILE_WITH_FILE_CACHE))) { @@ -61,12 +43,19 @@ int zend_optimizer_get_persistent_constant(zend_string *name, zval *result, int if (copy) { Z_TRY_ADDREF_P(result); } + return 1; } else { - retval = 0; + return 0; } } - return retval; + /* Special constants null/true/false can always be substituted. */ + zv = zend_get_special_const(ZSTR_VAL(name), ZSTR_LEN(name)); + if (zv) { + ZVAL_COPY_VALUE(result, zv); + return 1; + } + return 0; } /* CFG back references management */ diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c index 4504d47bcb8d0..8cc83d2964bb6 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/ext/opcache/Optimizer/compact_literals.c @@ -168,13 +168,13 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx LITERAL_INFO(opline->op1.constant, LITERAL_CLASS, 2); break; case ZEND_DEFINED: - LITERAL_INFO(opline->op1.constant, LITERAL_CONST, 2); + LITERAL_INFO(opline->op1.constant, LITERAL_CONST, 1); break; case ZEND_FETCH_CONSTANT: if ((opline->op1.num & (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) == (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) { - LITERAL_INFO(opline->op2.constant, LITERAL_CONST, 5); - } else { LITERAL_INFO(opline->op2.constant, LITERAL_CONST, 3); + } else { + LITERAL_INFO(opline->op2.constant, LITERAL_CONST, 2); } break; case ZEND_FETCH_CLASS_CONSTANT: From aad39879f2d2e89de105c4f87d334ee129b4321c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 31 Jan 2019 12:25:51 +0100 Subject: [PATCH 2/2] Remove bareword fallback for constants Access to undefined constants will now always result in an Error exception being thrown. This required quite a few test changes, because there were many buggy tests that unintentionally used bareword fallback in combination with error suppression. --- UPGRADING | 3 + Zend/tests/bug37811.phpt | 7 +- Zend/tests/bug43344_1.phpt | 43 ++-- Zend/tests/bug47572.phpt | 5 +- Zend/tests/bug69755.phpt | 5 +- Zend/tests/bug69788.phpt | 5 +- Zend/tests/bug72944.phpt | 5 +- Zend/tests/bug73163.phpt | 22 -- Zend/tests/constants_002.phpt | 12 +- Zend/tests/constants_005.phpt | 7 +- Zend/tests/ns_041.phpt | 6 +- Zend/tests/ns_076.phpt | 38 ++-- Zend/zend_compile.c | 17 +- Zend/zend_compile.h | 3 +- Zend/zend_constants.c | 2 +- Zend/zend_execute.c | 20 +- Zend/zend_execute_API.c | 21 +- ext/opcache/Optimizer/compact_literals.c | 2 +- ext/opcache/Optimizer/zend_dump.c | 7 +- ext/opcache/tests/bug66251.phpt | 7 +- ext/opcache/tests/bug71843.phpt | 9 +- ext/reflection/tests/bug74673.phpt | 6 +- ext/reflection/tests/bug76536.phpt | 2 +- .../tests/array/array_chunk_variation1.phpt | 16 +- .../tests/array/array_chunk_variation2.phpt | 16 +- .../tests/array/array_chunk_variation3.phpt | 4 +- .../array/array_diff_ukey_variation10.phpt | 8 - .../array_intersect_uassoc_variation9.phpt | 7 - .../array_intersect_ukey_variation8.phpt | 7 - .../tests/array/arsort_variation1.phpt | 188 +++++++++--------- .../tests/array/arsort_variation2.phpt | 32 ++- .../tests/array/asort_variation1.phpt | 20 +- .../tests/array/asort_variation2.phpt | 20 +- ext/standard/tests/array/count_recursive.phpt | 4 +- .../tests/array/krsort_variation1.phpt | 20 +- .../tests/array/krsort_variation2.phpt | 20 +- .../tests/array/ksort_variation1.phpt | 20 +- .../tests/array/ksort_variation2.phpt | 20 +- ext/standard/tests/array/sort_variation1.phpt | 20 +- ext/standard/tests/array/sort_variation2.phpt | 20 +- ext/standard/tests/file/bug22414.phpt | 4 +- ext/standard/tests/file/fscanf_error.phpt | 6 +- .../general_functions/debug_zval_dump_v.phpt | 2 +- ext/standard/tests/strings/explode.phpt | 2 +- ext/standard/tests/strings/lcfirst.phpt | Bin 6951 -> 6736 bytes ext/standard/tests/strings/ucfirst.phpt | Bin 6183 -> 5968 bytes tests/classes/constants_basic_001.phpt | 12 +- tests/classes/constants_scope_001.phpt | 5 +- .../bitwiseShiftLeft_variationStr.phpt | 112 +++++------ 49 files changed, 372 insertions(+), 467 deletions(-) delete mode 100644 Zend/tests/bug73163.phpt diff --git a/UPGRADING b/UPGRADING index 4b37b5ee07a35..99d136fbe7d61 100644 --- a/UPGRADING +++ b/UPGRADING @@ -29,6 +29,9 @@ PHP 8.0 UPGRADE NOTES longer available. The error_get_last() function may be used instead. . Removed the ability to define case-insensitive constants. The third argument to define() may no longer be true. + . Access to undefined constants now always results in an Error exception. + Previously, unqualified constant accesses resulted in a warning and were + interpreted as strings. . Removed ability to specify an autoloader using an __autoload() function. spl_autoload_register() should be used instead. . Removed create_function(). Anonymous functions may be used instead. diff --git a/Zend/tests/bug37811.phpt b/Zend/tests/bug37811.phpt index 96645d03542d3..8321459d5d87b 100644 --- a/Zend/tests/bug37811.phpt +++ b/Zend/tests/bug37811.phpt @@ -23,6 +23,7 @@ string(3) "Foo" Warning: Constants may only evaluate to scalar values, arrays or resources in %sbug37811.php on line %d -Warning: Use of undefined constant Baz - assumed 'Baz' (this will throw an Error in a future version of PHP) in %sbug37811.php on line %d -string(3) "Baz" -===DONE=== +Fatal error: Uncaught Error: Undefined constant 'Baz' in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/tests/bug43344_1.phpt b/Zend/tests/bug43344_1.phpt index 4635240699b95..28af70dc67e2d 100644 --- a/Zend/tests/bug43344_1.phpt +++ b/Zend/tests/bug43344_1.phpt @@ -3,6 +3,8 @@ Bug #43344.1 (Wrong error message for undefined namespace constant) --FILE-- 0)) { reset($a); return key($a); } -echo bar."\n"; -echo f1()."\n"; -echo f2()."\n"; -echo f3()."\n"; -?> ---EXPECTF-- -Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 13 -bar -Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 3 -bar - -Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 6 -bar +try { + echo bar."\n"; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + echo f1()."\n"; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + echo f2()."\n"; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + echo f3()."\n"; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} -Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 9 -bar +?> +--EXPECT-- +Undefined constant 'Foo\bar' +Undefined constant 'Foo\bar' +Undefined constant 'Foo\bar' +Undefined constant 'Foo\bar' diff --git a/Zend/tests/bug47572.phpt b/Zend/tests/bug47572.phpt index 67bb3ec111ce8..7a44cc6e7f9c9 100644 --- a/Zend/tests/bug47572.phpt +++ b/Zend/tests/bug47572.phpt @@ -14,4 +14,7 @@ $foo = new Foo(); ?> --EXPECTF-- -Warning: Use of undefined constant FOO - assumed 'FOO' (this will throw an Error in a future version of PHP) in %s on line %d +Fatal error: Uncaught Error: Undefined constant 'FOO' in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/tests/bug69755.phpt b/Zend/tests/bug69755.phpt index 08432808e2955..e419756d266ca 100644 --- a/Zend/tests/bug69755.phpt +++ b/Zend/tests/bug69755.phpt @@ -5,4 +5,7 @@ Bug #69755: segfault in ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER c . 10; ?> --EXPECTF-- -Warning: Use of undefined constant c - assumed 'c' (this will throw an Error in a future version of PHP) in %sbug69755.php on line 2 +Fatal error: Uncaught Error: Undefined constant 'c' in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/tests/bug69788.phpt b/Zend/tests/bug69788.phpt index 326328ccfa2a2..6e877f78fa7cf 100644 --- a/Zend/tests/bug69788.phpt +++ b/Zend/tests/bug69788.phpt @@ -5,4 +5,7 @@ Bug #69788: Malformed script causes Uncaught Error in php-cgi, valgrind SIGILL --EXPECTF-- Notice: Array to string conversion in %s on line %d -Warning: Use of undefined constant t - assumed 't' (this will throw an Error in a future version of PHP) in %s on line %d +Fatal error: Uncaught Error: Undefined constant 't' in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/tests/bug72944.phpt b/Zend/tests/bug72944.phpt index 5f494beb40dc9..75a4edb565b13 100644 --- a/Zend/tests/bug72944.phpt +++ b/Zend/tests/bug72944.phpt @@ -2,11 +2,10 @@ Bug #72944 (Null pointer deref in zval_delref_p). --FILE-- --EXPECTF-- -Warning: Use of undefined constant e - assumed 'e' (this will throw an Error in a future version of PHP) in %sbug72944.php on line 2 - -Notice: Undefined variable: A in %sbug72944.php on line 2 +Notice: Undefined variable: A in %sbug72944.php on line 3 OK diff --git a/Zend/tests/bug73163.phpt b/Zend/tests/bug73163.phpt deleted file mode 100644 index 5c0560458d40f..0000000000000 --- a/Zend/tests/bug73163.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Bug #73163 (PHP hangs if error handler throws while accessing undef const in default value) ---FILE-- - ---EXPECTF-- -Fatal error: Uncaught Exception: Use of undefined constant UNDEFINED - assumed 'UNDEFINED' (this will throw an Error in a future version of PHP) in %s:%d -Stack trace: -#0 %s(%d): {closure}(%s) -#1 %s(%d): doSomething() -#2 {main} - thrown in %s on line %d diff --git a/Zend/tests/constants_002.phpt b/Zend/tests/constants_002.phpt index b0cf1db61fdcd..ddb2e67307c07 100644 --- a/Zend/tests/constants_002.phpt +++ b/Zend/tests/constants_002.phpt @@ -4,7 +4,11 @@ Defining constants with non-scalar values getMessage(), "\n"; +} define('foo', fopen(__FILE__, 'r')); var_dump(foo); @@ -12,7 +16,5 @@ var_dump(foo); ?> --EXPECTF-- Warning: Constants may only evaluate to scalar values, arrays or resources in %s on line %d - -Warning: Use of undefined constant foo - assumed 'foo' (this will throw an Error in a future version of PHP) in %s on line %d -string(%d) "foo" -resource(%d) of type (stream) +Undefined constant 'foo' +resource(5) of type (stream) diff --git a/Zend/tests/constants_005.phpt b/Zend/tests/constants_005.phpt index b5a3a6bd38c05..27ab0259d1ef2 100644 --- a/Zend/tests/constants_005.phpt +++ b/Zend/tests/constants_005.phpt @@ -2,11 +2,10 @@ Persistent case insensitive and user defined constants --FILE-- ---EXPECTF-- -Warning: Use of undefined constant ZEND_THREAD_safe - assumed 'ZEND_THREAD_safe' (this will throw an Error in a future version of PHP) in %s on line %d -string(16) "ZEND_THREAD_safe" +--EXPECT-- +bool(false) int(123) diff --git a/Zend/tests/ns_041.phpt b/Zend/tests/ns_041.phpt index bd9dfbd093f8a..3a2fe7758b3c6 100644 --- a/Zend/tests/ns_041.phpt +++ b/Zend/tests/ns_041.phpt @@ -17,5 +17,7 @@ ok ok ok -Warning: Use of undefined constant BAR - assumed 'BAR' (this will throw an Error in a future version of PHP) in %sns_041.php on line 9 -BAR +Fatal error: Uncaught Error: Undefined constant 'test\ns1\BAR' in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/tests/ns_076.phpt b/Zend/tests/ns_076.phpt index ea97e924b1b24..0db8aeba624e0 100644 --- a/Zend/tests/ns_076.phpt +++ b/Zend/tests/ns_076.phpt @@ -3,26 +3,28 @@ --FILE-- unknown); - -echo unknown; -echo "\n"; -var_dump($a); -echo \unknown; ---EXPECTF-- -Warning: Use of undefined constant unknown - assumed 'unknown' (this will throw an Error in a future version of PHP) in %sns_076.php on line %d +try { + $a = array(unknown => unknown); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} -Warning: Use of undefined constant unknown - assumed 'unknown' (this will throw an Error in a future version of PHP) in %sns_076.php on line %d +try { + echo unknown; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} -Warning: Use of undefined constant unknown - assumed 'unknown' (this will throw an Error in a future version of PHP) in %sns_076.php on line %d -unknown -array(1) { - ["unknown"]=> - %s(7) "unknown" +try { + echo \unknown; +} catch (Error $e) { + echo $e->getMessage(), "\n"; } -Fatal error: Uncaught Error: Undefined constant 'unknown' in %sns_076.php:%d -Stack trace: -#0 {main} - thrown in %sns_076.php on line %d +?> +--EXPECT-- +Undefined constant 'foo\unknown' +Undefined constant 'foo\unknown' +Undefined constant 'unknown' diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d153bf79f4dc1..b56356660b0dc 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7643,19 +7643,13 @@ void zend_compile_const(znode *result, zend_ast *ast) /* {{{ */ opline = zend_emit_op_tmp(result, ZEND_FETCH_CONSTANT, NULL, NULL); opline->op2_type = IS_CONST; - if (is_fully_qualified) { + if (is_fully_qualified || !FC(current_namespace)) { opline->op2.constant = zend_add_const_name_literal( resolved_name, 0); } else { - opline->op1.num = IS_CONSTANT_UNQUALIFIED; - if (FC(current_namespace)) { - opline->op1.num |= IS_CONSTANT_IN_NAMESPACE; - opline->op2.constant = zend_add_const_name_literal( - resolved_name, 1); - } else { - opline->op2.constant = zend_add_const_name_literal( - resolved_name, 0); - } + opline->op1.num = IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE; + opline->op2.constant = zend_add_const_name_literal( + resolved_name, 1); } opline->extended_value = zend_alloc_cache_slot(); } @@ -7985,7 +7979,8 @@ void zend_compile_const_expr_const(zend_ast **ast_ptr) /* {{{ */ } zend_ast_destroy(ast); - *ast_ptr = zend_ast_create_constant(resolved_name, !is_fully_qualified ? IS_CONSTANT_UNQUALIFIED : 0); + *ast_ptr = zend_ast_create_constant(resolved_name, + !is_fully_qualified && FC(current_namespace) ? IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE : 0); } /* }}} */ diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 23da64abb7415..833139eafce6a 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -917,9 +917,8 @@ void zend_assert_valid_class_name(const zend_string *const_name); #define ZEND_DIM_IS 1 -#define IS_CONSTANT_UNQUALIFIED 0x010 #define IS_CONSTANT_CLASS 0x080 /* __CLASS__ in trait */ -#define IS_CONSTANT_IN_NAMESPACE 0x100 +#define IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE 0x100 static zend_always_inline int zend_check_arg_send_type(const zend_function *zf, uint32_t arg_num, uint32_t mask) { diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 6371492dc065a..e38dc61fffd69 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -424,7 +424,7 @@ ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, return &c->value; } - if (!(flags & IS_CONSTANT_UNQUALIFIED)) { + if (!(flags & IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE)) { return NULL; } diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 39155e8827537..519b295ccae14 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -4153,7 +4153,7 @@ static zend_always_inline int _zend_quick_get_constant( zv = zend_hash_find_ex(EG(zend_constants), Z_STR_P(key), 1); if (zv) { c = (zend_constant*)Z_PTR_P(zv); - } else if ((flags & (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) == (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) { + } else if (flags & IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE) { key++; zv = zend_hash_find_ex(EG(zend_constants), Z_STR_P(key), 1); if (zv) { @@ -4163,22 +4163,8 @@ static zend_always_inline int _zend_quick_get_constant( if (!c) { if (!check_defined_only) { - if ((opline->op1.num & IS_CONSTANT_UNQUALIFIED) != 0) { - char *actual = (char *)zend_memrchr(Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)), '\\', Z_STRLEN_P(RT_CONSTANT(opline, opline->op2))); - if (!actual) { - ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_STR_P(RT_CONSTANT(opline, opline->op2))); - } else { - actual++; - ZVAL_STRINGL(EX_VAR(opline->result.var), - actual, Z_STRLEN_P(RT_CONSTANT(opline, opline->op2)) - (actual - Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)))); - } - /* non-qualified constant - allow text substitution */ - zend_error(E_WARNING, "Use of undefined constant %s - assumed '%s' (this will throw an Error in a future version of PHP)", - Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var))); - } else { - zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); - ZVAL_UNDEF(EX_VAR(opline->result.var)); - } + zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); + ZVAL_UNDEF(EX_VAR(opline->result.var)); } return FAILURE; } diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 9215717bcc0a4..5ed80be6ff4f2 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -566,29 +566,10 @@ ZEND_API int zend_use_undefined_constant(zend_string *name, zend_ast_attr attr, } else if ((colon = (char*)zend_memrchr(ZSTR_VAL(name), ':', ZSTR_LEN(name)))) { zend_throw_error(NULL, "Undefined class constant '%s'", ZSTR_VAL(name)); return FAILURE; - } else if ((attr & IS_CONSTANT_UNQUALIFIED) == 0) { + } else { zend_throw_error(NULL, "Undefined constant '%s'", ZSTR_VAL(name)); return FAILURE; - } else { - char *actual = ZSTR_VAL(name); - size_t actual_len = ZSTR_LEN(name); - char *slash = (char *) zend_memrchr(actual, '\\', actual_len); - - if (slash) { - actual = slash + 1; - actual_len -= (actual - ZSTR_VAL(name)); - } - - zend_error(E_WARNING, "Use of undefined constant %s - assumed '%s' (this will throw an Error in a future version of PHP)", actual, actual); - if (EG(exception)) { - return FAILURE; - } else { - zend_string *result_str = zend_string_init(actual, actual_len, 0); - zval_ptr_dtor_nogc(result); - ZVAL_NEW_STR(result, result_str); - } } - return SUCCESS; } /* }}} */ diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c index 8cc83d2964bb6..8c5702a38d521 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/ext/opcache/Optimizer/compact_literals.c @@ -171,7 +171,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx LITERAL_INFO(opline->op1.constant, LITERAL_CONST, 1); break; case ZEND_FETCH_CONSTANT: - if ((opline->op1.num & (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) == (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) { + if (opline->op1.num & IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE) { LITERAL_INFO(opline->op2.constant, LITERAL_CONST, 3); } else { LITERAL_INFO(opline->op2.constant, LITERAL_CONST, 2); diff --git a/ext/opcache/Optimizer/zend_dump.c b/ext/opcache/Optimizer/zend_dump.c index ad4d393bd6854..b10cc31c9d147 100644 --- a/ext/opcache/Optimizer/zend_dump.c +++ b/ext/opcache/Optimizer/zend_dump.c @@ -127,11 +127,8 @@ static void zend_dump_unused_op(const zend_op *opline, znode_op op, uint32_t fla } else if (ZEND_VM_OP_CONSTRUCTOR == (flags & ZEND_VM_OP_MASK)) { fprintf(stderr, " CONSTRUCTOR"); } else if (ZEND_VM_OP_CONST_FETCH == (flags & ZEND_VM_EXT_MASK)) { - if (op.num & IS_CONSTANT_UNQUALIFIED) { - fprintf(stderr, " (unqualified)"); - } - if (op.num & IS_CONSTANT_IN_NAMESPACE) { - fprintf(stderr, " (in-namespace)"); + if (op.num & IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE) { + fprintf(stderr, " (unqualified-in-namespace)"); } } } diff --git a/ext/opcache/tests/bug66251.phpt b/ext/opcache/tests/bug66251.phpt index 64e758065ba4d..42c6e2f606921 100644 --- a/ext/opcache/tests/bug66251.phpt +++ b/ext/opcache/tests/bug66251.phpt @@ -13,5 +13,8 @@ const A="hello"; function getA() {return A;} ?> --EXPECTF-- -Warning: Use of undefined constant A - assumed 'A' (this will throw an Error in a future version of PHP) in %sbug66251.php on line 4 -A=A +Fatal error: Uncaught Error: Undefined constant 'A' in %s:%d +Stack trace: +#0 %s(%d): getA() +#1 {main} + thrown in %s on line %d diff --git a/ext/opcache/tests/bug71843.phpt b/ext/opcache/tests/bug71843.phpt index 924fb873fed97..0a193425dd4f4 100644 --- a/ext/opcache/tests/bug71843.phpt +++ b/ext/opcache/tests/bug71843.phpt @@ -8,18 +8,15 @@ opcache.optimization_level=0xFFFFBFFF --FILE-- okey --EXPECTF-- -Warning: Use of undefined constant E - assumed 'E' (this will throw an Error in a future version of PHP) in %sbug71843.php on line %d - Warning: A non-numeric value encountered in %s on line %d -Warning: Use of undefined constant R - assumed 'R' (this will throw an Error in a future version of PHP) in %sbug71843.php on line %d - Warning: A non-numeric value encountered in %s on line %d - -Warning: Use of undefined constant See - assumed 'See' (this will throw an Error in a future version of PHP) in %sbug71843.php on line %d okey diff --git a/ext/reflection/tests/bug74673.phpt b/ext/reflection/tests/bug74673.phpt index 8e4e8e3a1828b..07db9a169ab01 100644 --- a/ext/reflection/tests/bug74673.phpt +++ b/ext/reflection/tests/bug74673.phpt @@ -3,10 +3,6 @@ Bug #74673 (Segfault when cast Reflection object to string with undefined consta --FILE-- --EXPECTF-- -Fatal error: Method ReflectionClass::__toString() must not throw an exception, caught Exception: in %sbug74673.php on line %d +Fatal error: Method ReflectionClass::__toString() must not throw an exception, caught Error: Undefined constant 'PHP_SELF' in %s on line %d diff --git a/ext/reflection/tests/bug76536.phpt b/ext/reflection/tests/bug76536.phpt index 9f3b3fdb31772..aa32781e16a1a 100644 --- a/ext/reflection/tests/bug76536.phpt +++ b/ext/reflection/tests/bug76536.phpt @@ -2,7 +2,7 @@ Bug #76536 (PHP crashes with core dump when throwing exception in error handler) --FILE-- ===DONE=== --EXPECTF-- @@ -30,11 +27,6 @@ var_dump( array_diff_ukey($array1, $array1, unknown_function) ); Warning: array_diff_ukey() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d NULL -Warning: array_diff_ukey() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d -NULL - -Warning: Use of undefined constant unknown_function - assumed 'unknown_function' (this will throw an Error in a future version of PHP) in %s on line %d - Warning: array_diff_ukey() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d NULL ===DONE=== diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation9.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation9.phpt index fc7c526ed1284..026d06fd6fbeb 100644 --- a/ext/standard/tests/array/array_intersect_uassoc_variation9.phpt +++ b/ext/standard/tests/array/array_intersect_uassoc_variation9.phpt @@ -19,8 +19,6 @@ var_dump( array_intersect_uassoc($array1, $array2, "unknown_function") ); //function name within single quotes var_dump( array_intersect_uassoc($array1, $array2, 'unknown_function') ); -//function name without quotes -var_dump( array_intersect_uassoc($array1, $array2, unknown_function) ); ?> ===DONE=== --EXPECTF-- @@ -29,11 +27,6 @@ var_dump( array_intersect_uassoc($array1, $array2, unknown_function) ); Warning: array_intersect_uassoc() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d NULL -Warning: array_intersect_uassoc() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d -NULL - -Warning: Use of undefined constant unknown_function - assumed 'unknown_function' (this will throw an Error in a future version of PHP) in %s on line %d - Warning: array_intersect_uassoc() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d NULL ===DONE=== diff --git a/ext/standard/tests/array/array_intersect_ukey_variation8.phpt b/ext/standard/tests/array/array_intersect_ukey_variation8.phpt index 122d1e4767b50..65432379d71e1 100644 --- a/ext/standard/tests/array/array_intersect_ukey_variation8.phpt +++ b/ext/standard/tests/array/array_intersect_ukey_variation8.phpt @@ -19,8 +19,6 @@ var_dump( array_intersect_ukey($array1, $array2, "unknown_function") ); //function name within single quotes var_dump( array_intersect_ukey($array1, $array2, 'unknown_function') ); -//function name without quotes -var_dump( array_intersect_ukey($array1, $array2, unknown_function) ); ?> ===DONE=== --EXPECTF-- @@ -29,11 +27,6 @@ var_dump( array_intersect_ukey($array1, $array2, unknown_function) ); Warning: array_intersect_ukey() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d NULL -Warning: array_intersect_ukey() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d -NULL - -Warning: Use of undefined constant unknown_function - assumed 'unknown_function' (this will throw an Error in a future version of PHP) in %s on line %d - Warning: array_intersect_ukey() expects parameter 3 to be a valid callback, function 'unknown_function' not found or invalid function name in %s on line %d NULL ===DONE=== diff --git a/ext/standard/tests/array/arsort_variation1.phpt b/ext/standard/tests/array/arsort_variation1.phpt index d5547efe9590c..d4156e3a9c734 100644 --- a/ext/standard/tests/array/arsort_variation1.phpt +++ b/ext/standard/tests/array/arsort_variation1.phpt @@ -63,10 +63,10 @@ $unexpected_values = array ( 19 => new stdclass(), // undefined data - 20 => @undefined_var, + 20 => @$undefined_var, // unset data - 21 => @unset_var, + 21 => @$unset_var, // resource variable 22 => $fp @@ -99,301 +99,301 @@ echo "Done"; -- Flag values are defualt, SORT_REGULAR, SORT_NUMERIC, SORT_STRING -- -- Iteration 1 -- -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -- Iteration 2 -- -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -- Iteration 3 -- -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -- Iteration 4 -- -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, int given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, int given in %s on line %d bool(false) -- Iteration 5 -- -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -- Iteration 6 -- -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -- Iteration 7 -- -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -- Iteration 8 -- -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -- Iteration 9 -- -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, float given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, float given in %s on line %d bool(false) -- Iteration 10 -- -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 11 -- -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, null given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 12 -- -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -- Iteration 13 -- -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -- Iteration 14 -- -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -- Iteration 15 -- -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, bool given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, bool given in %s on line %d bool(false) -- Iteration 16 -- -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -- Iteration 17 -- -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -- Iteration 18 -- -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -- Iteration 19 -- -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, string given in %s on line %d bool(false) -- Iteration 20 -- -Warning: arsort() expects parameter 1 to be array, object given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, object given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, object given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, object given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, object given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, object given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, object given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, object given in %s on line %d bool(false) -- Iteration 21 -- -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 22 -- -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, string given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 23 -- -Warning: arsort() expects parameter 1 to be array, resource given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, resource given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, resource given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, resource given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, resource given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, resource given in %s on line %d bool(false) -Warning: arsort() expects parameter 1 to be array, resource given in %sarsort_variation1.php on line %d +Warning: arsort() expects parameter 1 to be array, resource given in %s on line %d bool(false) Done diff --git a/ext/standard/tests/array/arsort_variation2.phpt b/ext/standard/tests/array/arsort_variation2.phpt index e6674774ee349..b2c4385d6e199 100644 --- a/ext/standard/tests/array/arsort_variation2.phpt +++ b/ext/standard/tests/array/arsort_variation2.phpt @@ -59,10 +59,10 @@ $unexpected_values = array( /*16*/ new stdclass(), // undefined data -/*17*/ @undefined_var, +/*17*/ @$undefined_var, // unset data -/*18*/ @unset_var, +/*18*/ @$unset_var, // resource variable /*19*/ $fp @@ -211,7 +211,7 @@ array(3) { } -- Iteration 13 -- -Warning: arsort() expects parameter 2 to be int, string given in %sarsort_variation2.php on line %d +Warning: arsort() expects parameter 2 to be int, string given in %s on line %d bool(false) array(3) { [1]=> @@ -223,7 +223,7 @@ array(3) { } -- Iteration 14 -- -Warning: arsort() expects parameter 2 to be int, string given in %sarsort_variation2.php on line %d +Warning: arsort() expects parameter 2 to be int, string given in %s on line %d bool(false) array(3) { [1]=> @@ -235,7 +235,7 @@ array(3) { } -- Iteration 15 -- -Warning: arsort() expects parameter 2 to be int, string given in %sarsort_variation2.php on line %d +Warning: arsort() expects parameter 2 to be int, string given in %s on line %d bool(false) array(3) { [1]=> @@ -247,7 +247,7 @@ array(3) { } -- Iteration 16 -- -Warning: arsort() expects parameter 2 to be int, string given in %sarsort_variation2.php on line %d +Warning: arsort() expects parameter 2 to be int, string given in %s on line %d bool(false) array(3) { [1]=> @@ -259,7 +259,7 @@ array(3) { } -- Iteration 17 -- -Warning: arsort() expects parameter 2 to be int, object given in %sarsort_variation2.php on line %d +Warning: arsort() expects parameter 2 to be int, object given in %s on line %d bool(false) array(3) { [1]=> @@ -270,32 +270,28 @@ array(3) { int(45) } -- Iteration 18 -- - -Warning: arsort() expects parameter 2 to be int, string given in %sarsort_variation2.php on line %d -bool(false) +bool(true) array(3) { + [3]=> + int(45) [1]=> int(10) [2]=> int(2) - [3]=> - int(45) } -- Iteration 19 -- - -Warning: arsort() expects parameter 2 to be int, string given in %sarsort_variation2.php on line %d -bool(false) +bool(true) array(3) { + [3]=> + int(45) [1]=> int(10) [2]=> int(2) - [3]=> - int(45) } -- Iteration 20 -- -Warning: arsort() expects parameter 2 to be int, resource given in %sarsort_variation2.php on line %d +Warning: arsort() expects parameter 2 to be int, resource given in %s on line %d bool(false) array(3) { [1]=> diff --git a/ext/standard/tests/array/asort_variation1.phpt b/ext/standard/tests/array/asort_variation1.phpt index 4594a3d171ae3..efc109d28f61d 100644 --- a/ext/standard/tests/array/asort_variation1.phpt +++ b/ext/standard/tests/array/asort_variation1.phpt @@ -63,10 +63,10 @@ $unexpected_values = array ( 19 => new stdclass(), // undefined data - 20 => @undefined_var, + 20 => @$undefined_var, // unset data - 21 => @unset_var, + 21 => @$unset_var, // resource variable 22 => $fp @@ -359,29 +359,29 @@ Warning: asort() expects parameter 1 to be array, object given in %s on line %d bool(false) -- Iteration 21 -- -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 22 -- -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: asort() expects parameter 1 to be array, string given in %s on line %d +Warning: asort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 23 -- diff --git a/ext/standard/tests/array/asort_variation2.phpt b/ext/standard/tests/array/asort_variation2.phpt index e8dda190dfc88..a3960cfdddc4a 100644 --- a/ext/standard/tests/array/asort_variation2.phpt +++ b/ext/standard/tests/array/asort_variation2.phpt @@ -59,10 +59,10 @@ $unexpected_values = array( /*16*/ new stdclass(), // undefined data -/*17*/ @undefined_var, +/*17*/ @$undefined_var, // unset data -/*18*/ @unset_var, +/*18*/ @$unset_var, // resource variable /*19*/ $fp @@ -270,26 +270,22 @@ array(3) { int(45) } -- Iteration 18 -- - -Warning: asort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { - [1]=> - int(10) [2]=> int(2) + [1]=> + int(10) [3]=> int(45) } -- Iteration 19 -- - -Warning: asort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { - [1]=> - int(10) [2]=> int(2) + [1]=> + int(10) [3]=> int(45) } diff --git a/ext/standard/tests/array/count_recursive.phpt b/ext/standard/tests/array/count_recursive.phpt index 175cfe7118029..6d81c16621de5 100644 --- a/ext/standard/tests/array/count_recursive.phpt +++ b/ext/standard/tests/array/count_recursive.phpt @@ -117,7 +117,7 @@ var_dump( count() ); // No. of args = 0 var_dump( count(array(), COUNT_NORMAL, 100) ); // No. of args > expected /* Testing Invalid type arguments */ -var_dump( count("string", ABCD) ); +var_dump( count("string", "ABCD") ); var_dump( count(100, "string") ); var_dump( count(array(), "") ); @@ -237,8 +237,6 @@ NULL Warning: count() expects at most 2 parameters, 3 given in %s on line %d NULL -Warning: Use of undefined constant ABCD - assumed 'ABCD' (this will throw an Error in a future version of PHP) in %s on line %d - Warning: count() expects parameter 2 to be int, %s given in %s on line %d NULL diff --git a/ext/standard/tests/array/krsort_variation1.phpt b/ext/standard/tests/array/krsort_variation1.phpt index 8b44de314eaf6..aaba5b91ce84f 100644 --- a/ext/standard/tests/array/krsort_variation1.phpt +++ b/ext/standard/tests/array/krsort_variation1.phpt @@ -62,10 +62,10 @@ $unexpected_values = array ( /*19*/ new stdclass(), // undefined data -/*20*/ @undefined_var, +/*20*/ @$undefined_var, // unset data -/*21*/ @unset_var, +/*21*/ @$unset_var, // resource variable /*22*/ $fp @@ -357,29 +357,29 @@ Warning: krsort() expects parameter 1 to be array, object given in %s on line %d bool(false) -- Iteration 21 -- -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 22 -- -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: krsort() expects parameter 1 to be array, string given in %s on line %d +Warning: krsort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 23 -- diff --git a/ext/standard/tests/array/krsort_variation2.phpt b/ext/standard/tests/array/krsort_variation2.phpt index 95080b5507532..303a9a1eb663d 100644 --- a/ext/standard/tests/array/krsort_variation2.phpt +++ b/ext/standard/tests/array/krsort_variation2.phpt @@ -58,10 +58,10 @@ $unexpected_values = array ( /*16*/ new stdclass(), // undefined data -/*17*/ @undefined_var, +/*17*/ @$undefined_var, // unset data -/*18*/ @unset_var, +/*18*/ @$unset_var, // resource variable /*19*/ $fp @@ -269,28 +269,24 @@ array(3) { int(45) } -- Iteration 18 -- - -Warning: krsort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { + [45]=> + int(45) [10]=> int(10) [2]=> int(2) - [45]=> - int(45) } -- Iteration 19 -- - -Warning: krsort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { + [45]=> + int(45) [10]=> int(10) [2]=> int(2) - [45]=> - int(45) } -- Iteration 20 -- diff --git a/ext/standard/tests/array/ksort_variation1.phpt b/ext/standard/tests/array/ksort_variation1.phpt index 185fac760cab0..87de1647d7f76 100644 --- a/ext/standard/tests/array/ksort_variation1.phpt +++ b/ext/standard/tests/array/ksort_variation1.phpt @@ -61,10 +61,10 @@ $unexpected_values = array ( /*19*/ new stdclass(), // undefined data -/*20*/ @undefined_var, +/*20*/ @$undefined_var, // unset data -/*21*/ @unset_var, +/*21*/ @$unset_var, // resource variable /*22*/ $fp @@ -357,29 +357,29 @@ Warning: ksort() expects parameter 1 to be array, object given in %s on line %d bool(false) -- Iteration 21 -- -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 22 -- -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: ksort() expects parameter 1 to be array, string given in %s on line %d +Warning: ksort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 23 -- diff --git a/ext/standard/tests/array/ksort_variation2.phpt b/ext/standard/tests/array/ksort_variation2.phpt index c80541ea27f89..83130d543e587 100644 --- a/ext/standard/tests/array/ksort_variation2.phpt +++ b/ext/standard/tests/array/ksort_variation2.phpt @@ -58,10 +58,10 @@ $unexpected_values = array ( /*16*/ new stdclass(), // undefined data -/*17*/ @undefined_var, +/*17*/ @$undefined_var, // unset data -/*18*/ @unset_var, +/*18*/ @$unset_var, // resource variable /*19*/ $fp @@ -269,26 +269,22 @@ array(3) { int(45) } -- Iteration 18 -- - -Warning: ksort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { - [10]=> - int(10) [2]=> int(2) + [10]=> + int(10) [45]=> int(45) } -- Iteration 19 -- - -Warning: ksort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { - [10]=> - int(10) [2]=> int(2) + [10]=> + int(10) [45]=> int(45) } diff --git a/ext/standard/tests/array/sort_variation1.phpt b/ext/standard/tests/array/sort_variation1.phpt index 9eca22c680a47..e8365ea131055 100644 --- a/ext/standard/tests/array/sort_variation1.phpt +++ b/ext/standard/tests/array/sort_variation1.phpt @@ -63,10 +63,10 @@ $unexpected_values = array ( /*20*/ new stdclass(), // undefined data -/*21*/ @undefined_var, +/*21*/ @$undefined_var, // unset data -/*22*/ @unset_var, +/*22*/ @$unset_var, // resource variable /*23*/ $fp @@ -358,29 +358,29 @@ Warning: sort() expects parameter 1 to be array, object given in %s on line %d bool(false) -- Iteration 21 -- -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 22 -- -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -Warning: sort() expects parameter 1 to be array, string given in %s on line %d +Warning: sort() expects parameter 1 to be array, null given in %s on line %d bool(false) -- Iteration 23 -- diff --git a/ext/standard/tests/array/sort_variation2.phpt b/ext/standard/tests/array/sort_variation2.phpt index 02e6af21af977..ee0e4b8b17a95 100644 --- a/ext/standard/tests/array/sort_variation2.phpt +++ b/ext/standard/tests/array/sort_variation2.phpt @@ -58,10 +58,10 @@ $unexpected_values = array( /*16*/ new stdclass(), // undefined data -/*17*/ @undefined_var, +/*17*/ @$undefined_var, // unset data -/*18*/ @unset_var, +/*18*/ @$unset_var, // resource variable /*19*/ $fp @@ -273,26 +273,22 @@ array(3) { int(45) } -- Iteration 18 -- - -Warning: sort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { [0]=> - int(10) - [1]=> int(2) + [1]=> + int(10) [2]=> int(45) } -- Iteration 19 -- - -Warning: sort() expects parameter 2 to be int, string given in %s on line %d -bool(false) +bool(true) array(3) { [0]=> - int(10) - [1]=> int(2) + [1]=> + int(10) [2]=> int(45) } diff --git a/ext/standard/tests/file/bug22414.phpt b/ext/standard/tests/file/bug22414.phpt index abc6e4758563b..c6e993ac9f982 100644 --- a/ext/standard/tests/file/bug22414.phpt +++ b/ext/standard/tests/file/bug22414.phpt @@ -7,7 +7,7 @@ output_handler= $php = getenv('TEST_PHP_EXECUTABLE'); $tmpfile = tempnam(__DIR__, 'phpt'); - $args = ' -n -dsafe_mode=off '; + $args = ' -n '; /* Regular Data Test */ passthru($php . $args . ' -r " echo \"HELLO\"; "'); @@ -17,7 +17,7 @@ output_handler= /* Binary Data Test */ if (substr(PHP_OS, 0, 3) != 'WIN') { - $cmd = $php . $args . ' -r \"readfile(@getenv(\'TEST_PHP_EXECUTABLE\')); \"'; + $cmd = $php . $args . ' -r \"readfile(@getenv(\'\\\'\'TEST_PHP_EXECUTABLE\'\\\'\')); \"'; $cmd = $php . $args . ' -r \' passthru("'.$cmd.'"); \' > '.$tmpfile ; } else { $cmd = $php . $args . ' -r \"readfile(@getenv(\\\\\\"TEST_PHP_EXECUTABLE\\\\\\")); \"'; diff --git a/ext/standard/tests/file/fscanf_error.phpt b/ext/standard/tests/file/fscanf_error.phpt index db2a881d6cd01..0da1fc69aafbb 100644 --- a/ext/standard/tests/file/fscanf_error.phpt +++ b/ext/standard/tests/file/fscanf_error.phpt @@ -38,7 +38,7 @@ var_dump( fscanf($file_handle, "%d%s%f", $int_var, $string_var) ); fclose($file_handle); // different invalid format strings -$invalid_formats = array( $undefined_var, undefined_constant, +$invalid_formats = array( $undefined_var, "%", "%h", "%.", "%d%m" ); @@ -76,10 +76,6 @@ Warning: fscanf(): Different numbers of variable names and field specifiers in % int(-1) Notice: Undefined variable: undefined_var in %s on line %d - -Warning: Use of undefined constant undefined_constant - assumed 'undefined_constant' (this will throw an Error in a future version of PHP) in %s on line %d -array(0) { -} array(0) { } diff --git a/ext/standard/tests/general_functions/debug_zval_dump_v.phpt b/ext/standard/tests/general_functions/debug_zval_dump_v.phpt index b1dce294ab1e0..6cb413dc2614c 100644 --- a/ext/standard/tests/general_functions/debug_zval_dump_v.phpt +++ b/ext/standard/tests/general_functions/debug_zval_dump_v.phpt @@ -102,7 +102,7 @@ $misc_values = array ( @$undef_var, /* mixed types */ - @TRUE123, + "TRUE123", "123string", "string123", "NULLstring" diff --git a/ext/standard/tests/strings/explode.phpt b/ext/standard/tests/strings/explode.phpt index 20c2a25470302..84cdcb985fef6 100644 --- a/ext/standard/tests/strings/explode.phpt +++ b/ext/standard/tests/strings/explode.phpt @@ -16,7 +16,7 @@ var_dump(@explode(NULL, "")); var_dump(@explode("a", "")); var_dump(@explode("a", "a")); var_dump(@explode("a", NULL)); -var_dump(@explode(NULL, a)); +var_dump(@explode(NULL, "a")); var_dump(@explode("abc", "acb")); var_dump(@explode("somestring", "otherstring")); var_dump(@explode("somestring", "otherstring", -1)); diff --git a/ext/standard/tests/strings/lcfirst.phpt b/ext/standard/tests/strings/lcfirst.phpt index d09e51eef52583b48f21d5a1b7c8db049cc38d31..af17e29ad0c54018e320c8e2b38776ad8002d370 100644 GIT binary patch delta 21 dcmZ2(cEM!BKgP`lOhN*a&kG&eyi&N19ROx~2*LmW delta 201 zcmca$vfOOLKSt@|{M^*ylA_GKbRAB8eTDMOl8pS)5{1Ij{F2FnEE1dlGYSgSbA=}s z~M;BSh5|G)giu zi-9)efouuz2+#z{O@1mN WI$2z3H@~5Qrh*c}$jv8(+Svi{8b~ex diff --git a/ext/standard/tests/strings/ucfirst.phpt b/ext/standard/tests/strings/ucfirst.phpt index 66da7a90f37dae3a3cb08fbc1aac9765b1722be7..b430b35eda2554a75eafa8822325934fd22ecea6 100644 GIT binary patch delta 21 dcmZ2(a6xawKgP`lOmV!Er3DUc{wiR^4gh1G2u1(^ delta 201 zcmcbhx7=XEKSt@|{M^*ylA_GKbRAB8eTDMOl8pS)5{1Ij{F2FnEE1dlGsg1PbA=}s z~M;BSh5|G)giu zi-9)efouuz2+#z{O@1mW XIysqtH@~5Qrh-y1+{K$k1+3Wt6>CS2 diff --git a/tests/classes/constants_basic_001.phpt b/tests/classes/constants_basic_001.phpt index b60991844f09e..c901ebacecb27 100644 --- a/tests/classes/constants_basic_001.phpt +++ b/tests/classes/constants_basic_001.phpt @@ -9,8 +9,6 @@ Class constant declarations class C { - const c0 = UNDEFINED; - const c1 = 1, c2 = 1.5; const c3 = + 1, c4 = + 1.5; const c5 = -1, c6 = -1.5; @@ -32,7 +30,6 @@ Class constant declarations } echo "\nAttempt to access various kinds of class constants:\n"; - var_dump(C::c0); var_dump(C::c1); var_dump(C::c2); var_dump(C::c3); @@ -61,16 +58,13 @@ Class constant declarations Notice: Undefined variable: undef in %s on line 5 Attempt to access various kinds of class constants: - -Warning: Use of undefined constant UNDEFINED - assumed 'UNDEFINED' (this will throw an Error in a future version of PHP) in %s on line %d -string(9) "UNDEFINED" int(1) float(1.5) int(1) float(1.5) int(-1) float(-1.5) -int(15) +int(13) string(%d) "%s" string(1) "C" string(1) "C" @@ -85,7 +79,7 @@ string(6) "hello2" Expecting fatal error: -Fatal error: Uncaught Error: Undefined class constant 'c19' in %s:53 +Fatal error: Uncaught Error: Undefined class constant 'c19' in %s:%d Stack trace: #0 {main} - thrown in %s on line 53 + thrown in %s on line %d diff --git a/tests/classes/constants_scope_001.phpt b/tests/classes/constants_scope_001.phpt index 7adf3f8681895..e9635d8d231bc 100644 --- a/tests/classes/constants_scope_001.phpt +++ b/tests/classes/constants_scope_001.phpt @@ -9,7 +9,6 @@ class ErrorCodes { const INFO = "Informational message\n"; static function print_fatal_error_codes() { - echo "FATAL = " . FATAL . "\n"; echo "self::FATAL = " . self::FATAL; } } @@ -27,9 +26,7 @@ ErrorCodes::print_fatal_error_codes(); ErrorCodesDerived::print_fatal_error_codes(); ?> ---EXPECTF-- -Warning: Use of undefined constant FATAL - assumed 'FATAL' (this will throw an Error in a future version of PHP) in %sconstants_scope_001.php on line %d -FATAL = FATAL +--EXPECT-- self::FATAL = Fatal error self::FATAL = Worst error parent::FATAL = Fatal error diff --git a/tests/lang/operators/bitwiseShiftLeft_variationStr.phpt b/tests/lang/operators/bitwiseShiftLeft_variationStr.phpt index 1f66dfce4ce2b..db9c5be060187 100644 --- a/tests/lang/operators/bitwiseShiftLeft_variationStr.phpt +++ b/tests/lang/operators/bitwiseShiftLeft_variationStr.phpt @@ -14,7 +14,7 @@ foreach ($strVals as $strVal) { foreach($strVals as $otherVal) { echo "--- testing: '$strVal' << '$otherVal' ---\n"; try { - var_dump(strVal<<$otherVal); + var_dump($strVal<<$otherVal); } catch (Throwable $e) { echo "Exception: " . $e->getMessage() . "\n"; } @@ -53,17 +53,17 @@ int(0) --- testing: '0' << 'a5.9' --- int(0) --- testing: '65' << '0' --- -int(0) +int(65) --- testing: '65' << '65' --- int(0) --- testing: '65' << '-44' --- Exception: Bit shift by negative number --- testing: '65' << '1.2' --- -int(0) +int(130) --- testing: '65' << '-7.7' --- Exception: Bit shift by negative number --- testing: '65' << 'abc' --- -int(0) +int(65) --- testing: '65' << '123abc' --- int(0) --- testing: '65' << '123e5' --- @@ -77,21 +77,21 @@ int(0) --- testing: '65' << '123abc ' --- int(0) --- testing: '65' << '3.4a' --- -int(0) +int(520) --- testing: '65' << 'a5.9' --- -int(0) +int(65) --- testing: '-44' << '0' --- -int(0) +int(-44) --- testing: '-44' << '65' --- int(0) --- testing: '-44' << '-44' --- Exception: Bit shift by negative number --- testing: '-44' << '1.2' --- -int(0) +int(-88) --- testing: '-44' << '-7.7' --- Exception: Bit shift by negative number --- testing: '-44' << 'abc' --- -int(0) +int(-44) --- testing: '-44' << '123abc' --- int(0) --- testing: '-44' << '123e5' --- @@ -105,21 +105,21 @@ int(0) --- testing: '-44' << '123abc ' --- int(0) --- testing: '-44' << '3.4a' --- -int(0) +int(-352) --- testing: '-44' << 'a5.9' --- -int(0) +int(-44) --- testing: '1.2' << '0' --- -int(0) +int(1) --- testing: '1.2' << '65' --- int(0) --- testing: '1.2' << '-44' --- Exception: Bit shift by negative number --- testing: '1.2' << '1.2' --- -int(0) +int(2) --- testing: '1.2' << '-7.7' --- Exception: Bit shift by negative number --- testing: '1.2' << 'abc' --- -int(0) +int(1) --- testing: '1.2' << '123abc' --- int(0) --- testing: '1.2' << '123e5' --- @@ -133,21 +133,21 @@ int(0) --- testing: '1.2' << '123abc ' --- int(0) --- testing: '1.2' << '3.4a' --- -int(0) +int(8) --- testing: '1.2' << 'a5.9' --- -int(0) +int(1) --- testing: '-7.7' << '0' --- -int(0) +int(-7) --- testing: '-7.7' << '65' --- int(0) --- testing: '-7.7' << '-44' --- Exception: Bit shift by negative number --- testing: '-7.7' << '1.2' --- -int(0) +int(-14) --- testing: '-7.7' << '-7.7' --- Exception: Bit shift by negative number --- testing: '-7.7' << 'abc' --- -int(0) +int(-7) --- testing: '-7.7' << '123abc' --- int(0) --- testing: '-7.7' << '123e5' --- @@ -161,9 +161,9 @@ int(0) --- testing: '-7.7' << '123abc ' --- int(0) --- testing: '-7.7' << '3.4a' --- -int(0) +int(-56) --- testing: '-7.7' << 'a5.9' --- -int(0) +int(-7) --- testing: 'abc' << '0' --- int(0) --- testing: 'abc' << '65' --- @@ -193,17 +193,17 @@ int(0) --- testing: 'abc' << 'a5.9' --- int(0) --- testing: '123abc' << '0' --- -int(0) +int(123) --- testing: '123abc' << '65' --- int(0) --- testing: '123abc' << '-44' --- Exception: Bit shift by negative number --- testing: '123abc' << '1.2' --- -int(0) +int(246) --- testing: '123abc' << '-7.7' --- Exception: Bit shift by negative number --- testing: '123abc' << 'abc' --- -int(0) +int(123) --- testing: '123abc' << '123abc' --- int(0) --- testing: '123abc' << '123e5' --- @@ -217,21 +217,21 @@ int(0) --- testing: '123abc' << '123abc ' --- int(0) --- testing: '123abc' << '3.4a' --- -int(0) +int(984) --- testing: '123abc' << 'a5.9' --- -int(0) +int(123) --- testing: '123e5' << '0' --- -int(0) +int(12300000) --- testing: '123e5' << '65' --- int(0) --- testing: '123e5' << '-44' --- Exception: Bit shift by negative number --- testing: '123e5' << '1.2' --- -int(0) +int(24600000) --- testing: '123e5' << '-7.7' --- Exception: Bit shift by negative number --- testing: '123e5' << 'abc' --- -int(0) +int(12300000) --- testing: '123e5' << '123abc' --- int(0) --- testing: '123e5' << '123e5' --- @@ -245,21 +245,21 @@ int(0) --- testing: '123e5' << '123abc ' --- int(0) --- testing: '123e5' << '3.4a' --- -int(0) +int(98400000) --- testing: '123e5' << 'a5.9' --- -int(0) +int(12300000) --- testing: '123e5xyz' << '0' --- -int(0) +int(12300000) --- testing: '123e5xyz' << '65' --- int(0) --- testing: '123e5xyz' << '-44' --- Exception: Bit shift by negative number --- testing: '123e5xyz' << '1.2' --- -int(0) +int(24600000) --- testing: '123e5xyz' << '-7.7' --- Exception: Bit shift by negative number --- testing: '123e5xyz' << 'abc' --- -int(0) +int(12300000) --- testing: '123e5xyz' << '123abc' --- int(0) --- testing: '123e5xyz' << '123e5' --- @@ -273,21 +273,21 @@ int(0) --- testing: '123e5xyz' << '123abc ' --- int(0) --- testing: '123e5xyz' << '3.4a' --- -int(0) +int(98400000) --- testing: '123e5xyz' << 'a5.9' --- -int(0) +int(12300000) --- testing: ' 123abc' << '0' --- -int(0) +int(123) --- testing: ' 123abc' << '65' --- int(0) --- testing: ' 123abc' << '-44' --- Exception: Bit shift by negative number --- testing: ' 123abc' << '1.2' --- -int(0) +int(246) --- testing: ' 123abc' << '-7.7' --- Exception: Bit shift by negative number --- testing: ' 123abc' << 'abc' --- -int(0) +int(123) --- testing: ' 123abc' << '123abc' --- int(0) --- testing: ' 123abc' << '123e5' --- @@ -301,21 +301,21 @@ int(0) --- testing: ' 123abc' << '123abc ' --- int(0) --- testing: ' 123abc' << '3.4a' --- -int(0) +int(984) --- testing: ' 123abc' << 'a5.9' --- -int(0) +int(123) --- testing: '123 abc' << '0' --- -int(0) +int(123) --- testing: '123 abc' << '65' --- int(0) --- testing: '123 abc' << '-44' --- Exception: Bit shift by negative number --- testing: '123 abc' << '1.2' --- -int(0) +int(246) --- testing: '123 abc' << '-7.7' --- Exception: Bit shift by negative number --- testing: '123 abc' << 'abc' --- -int(0) +int(123) --- testing: '123 abc' << '123abc' --- int(0) --- testing: '123 abc' << '123e5' --- @@ -329,21 +329,21 @@ int(0) --- testing: '123 abc' << '123abc ' --- int(0) --- testing: '123 abc' << '3.4a' --- -int(0) +int(984) --- testing: '123 abc' << 'a5.9' --- -int(0) +int(123) --- testing: '123abc ' << '0' --- -int(0) +int(123) --- testing: '123abc ' << '65' --- int(0) --- testing: '123abc ' << '-44' --- Exception: Bit shift by negative number --- testing: '123abc ' << '1.2' --- -int(0) +int(246) --- testing: '123abc ' << '-7.7' --- Exception: Bit shift by negative number --- testing: '123abc ' << 'abc' --- -int(0) +int(123) --- testing: '123abc ' << '123abc' --- int(0) --- testing: '123abc ' << '123e5' --- @@ -357,21 +357,21 @@ int(0) --- testing: '123abc ' << '123abc ' --- int(0) --- testing: '123abc ' << '3.4a' --- -int(0) +int(984) --- testing: '123abc ' << 'a5.9' --- -int(0) +int(123) --- testing: '3.4a' << '0' --- -int(0) +int(3) --- testing: '3.4a' << '65' --- int(0) --- testing: '3.4a' << '-44' --- Exception: Bit shift by negative number --- testing: '3.4a' << '1.2' --- -int(0) +int(6) --- testing: '3.4a' << '-7.7' --- Exception: Bit shift by negative number --- testing: '3.4a' << 'abc' --- -int(0) +int(3) --- testing: '3.4a' << '123abc' --- int(0) --- testing: '3.4a' << '123e5' --- @@ -385,9 +385,9 @@ int(0) --- testing: '3.4a' << '123abc ' --- int(0) --- testing: '3.4a' << '3.4a' --- -int(0) +int(24) --- testing: '3.4a' << 'a5.9' --- -int(0) +int(3) --- testing: 'a5.9' << '0' --- int(0) --- testing: 'a5.9' << '65' ---