--- /dev/null
+--TEST--
+JIT - Assigning to arrays using string key which parses to an integer
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+/* We are going to store a value in an array, using the key "1"
+ * PHP should always convert such strings to integers when storing or retrieving
+ * values from an array
+ *
+ * We'll do it in a loop, so that if JIT is enabled, the code will be JIT'd
+ * (Because this test was originally added as a regression test for a JIT bug)
+ *
+ * Also, the test will do this in a way which guarantees PHP won't be able to
+ * predict whether the (string) key will be a numeric string or not */
+$fp = fopen(realpath(__DIR__ . '/dim_assign_001.txt'), 'r+');
+$array = array();
+while ($line = fgets($fp, 256)) {
+ sscanf($line, '%x', $char);
+ $char = chr($char);
+ $array[$char] = "Values can be stored correctly using numeric string keys";
+}
+var_dump($array['1']);
+?>
+--EXPECT--
+string(56) "Values can be stored correctly using numeric string keys"
static void ZEND_FASTCALL zend_jit_fetch_dim_r_helper(zend_array *ht, zval *dim, zval *result)
{
- zend_long hval;
+ zend_ulong hval;
zend_string *offset_key;
zval *retval;
}
str_index:
+ if (ZEND_HANDLE_NUMERIC(offset_key, hval)) {
+ goto num_index;
+ }
retval = zend_hash_find(ht, offset_key);
if (retval) {
/* support for $GLOBALS[...] */
static void ZEND_FASTCALL zend_jit_fetch_dim_is_helper(zend_array *ht, zval *dim, zval *result)
{
- zend_long hval;
+ zend_ulong hval;
zend_string *offset_key;
zval *retval;
}
str_index:
+ if (ZEND_HANDLE_NUMERIC(offset_key, hval)) {
+ goto num_index;
+ }
retval = zend_hash_find(ht, offset_key);
if (retval) {
/* support for $GLOBALS[...] */
static int ZEND_FASTCALL zend_jit_fetch_dim_isset_helper(zend_array *ht, zval *dim)
{
- zend_long hval;
+ zend_ulong hval;
zend_string *offset_key;
zval *retval;
}
str_index:
+ if (ZEND_HANDLE_NUMERIC(offset_key, hval)) {
+ goto num_index;
+ }
retval = zend_hash_find(ht, offset_key);
if (retval) {
/* support for $GLOBALS[...] */
static zval* ZEND_FASTCALL zend_jit_fetch_dim_rw_helper(zend_array *ht, zval *dim)
{
- zend_long hval;
+ zend_ulong hval;
zend_string *offset_key;
zval *retval;
}
str_index:
+ if (ZEND_HANDLE_NUMERIC(offset_key, hval)) {
+ goto num_index;
+ }
retval = zend_hash_find(ht, offset_key);
if (retval) {
/* support for $GLOBALS[...] */
static zval* ZEND_FASTCALL zend_jit_fetch_dim_w_helper(zend_array *ht, zval *dim)
{
- zend_long hval;
+ zend_ulong hval;
zend_string *offset_key;
zval *retval;
}
str_index:
+ if (ZEND_HANDLE_NUMERIC(offset_key, hval)) {
+ goto num_index;
+ }
retval = zend_hash_find(ht, offset_key);
if (retval) {
/* support for $GLOBALS[...] */