Skip to content

Commit be23be0

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Fix RCN violations in array functions
2 parents 2965fb8 + f77c04d commit be23be0

File tree

4 files changed

+58
-15
lines changed

4 files changed

+58
-15
lines changed

Zend/Optimizer/zend_func_infos.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -395,8 +395,6 @@ static const func_info_t func_infos[] = {
395395
F1("compact", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
396396
FN("array_fill", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY),
397397
F1("array_fill_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
398-
F1("array_replace", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
399-
F1("array_replace_recursive", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
400398
FN("array_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
401399
FN("array_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
402400
F1("array_count_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG),
@@ -405,13 +403,8 @@ static const func_info_t func_infos[] = {
405403
F1("array_flip", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
406404
F1("array_change_key_case", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
407405
F1("array_intersect_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
408-
F1("array_intersect_ukey", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
409-
F1("array_intersect", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
410-
F1("array_uintersect", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
411406
F1("array_intersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
412407
F1("array_uintersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
413-
F1("array_intersect_uassoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
414-
F1("array_uintersect_uassoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
415408
F1("array_diff_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
416409
F1("array_diff_ukey", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
417410
F1("array_udiff", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),

ext/standard/basic_functions.stub.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1686,13 +1686,11 @@ function array_merge_recursive(array ...$arrays): array {}
16861686

16871687
/**
16881688
* @compile-time-eval
1689-
* @refcount 1
16901689
*/
16911690
function array_replace(array $array, array ...$replacements): array {}
16921691

16931692
/**
16941693
* @compile-time-eval
1695-
* @refcount 1
16961694
*/
16971695
function array_replace_recursive(array $array, array ...$replacements): array {}
16981696

@@ -1775,19 +1773,16 @@ function array_intersect_key(array $array, array ...$arrays): array {}
17751773

17761774
/**
17771775
* @param array|callable $rest
1778-
* @refcount 1
17791776
*/
17801777
function array_intersect_ukey(array $array, ...$rest): array {}
17811778

17821779
/**
17831780
* @compile-time-eval
1784-
* @refcount 1
17851781
*/
17861782
function array_intersect(array $array, array ...$arrays): array {}
17871783

17881784
/**
17891785
* @param array|callable $rest
1790-
* @refcount 1
17911786
*/
17921787
function array_uintersect(array $array, ...$rest): array {}
17931788

@@ -1805,13 +1800,11 @@ function array_uintersect_assoc(array $array, ...$rest): array {}
18051800

18061801
/**
18071802
* @param array|callable $rest
1808-
* @refcount 1
18091803
*/
18101804
function array_intersect_uassoc(array $array, ...$rest): array {}
18111805

18121806
/**
18131807
* @param array|callable $rest
1814-
* @refcount 1
18151808
*/
18161809
function array_uintersect_uassoc(array $array, ...$rest): array {}
18171810

ext/standard/basic_functions_arginfo.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
--TEST--
2+
RCN check for in-place array modifications
3+
--FILE--
4+
<?php
5+
// Important: do NOT replace range(0, 1) with a variable, these NEED to be TMPVARs!
6+
var_dump(array_replace(range(0, 1), []));
7+
var_dump(array_replace_recursive(range(0, 1), []));
8+
var_dump(array_merge(range(0, 1), []));
9+
var_dump(array_merge_recursive(range(0, 1), []));
10+
var_dump(array_unique(range(0, 1)));
11+
var_dump(array_intersect_ukey(range(0, 1), [], fn () => 0));
12+
var_dump(array_intersect(range(0, 1), []));
13+
var_dump(array_uintersect(range(0, 1), [], fn () => 0));
14+
var_dump(array_intersect_uassoc(range(0, 1), [], fn () => 0));
15+
var_dump(array_uintersect_uassoc(range(0, 1), [], fn () => 0, fn () => 0));
16+
?>
17+
--EXPECT--
18+
array(2) {
19+
[0]=>
20+
int(0)
21+
[1]=>
22+
int(1)
23+
}
24+
array(2) {
25+
[0]=>
26+
int(0)
27+
[1]=>
28+
int(1)
29+
}
30+
array(2) {
31+
[0]=>
32+
int(0)
33+
[1]=>
34+
int(1)
35+
}
36+
array(2) {
37+
[0]=>
38+
int(0)
39+
[1]=>
40+
int(1)
41+
}
42+
array(2) {
43+
[0]=>
44+
int(0)
45+
[1]=>
46+
int(1)
47+
}
48+
array(0) {
49+
}
50+
array(0) {
51+
}
52+
array(0) {
53+
}
54+
array(0) {
55+
}
56+
array(0) {
57+
}

0 commit comments

Comments
 (0)