Skip to content

Commit 507e38f

Browse files
committed
UNEXPECTED
1 parent 20a707d commit 507e38f

File tree

2 files changed

+45
-30
lines changed

2 files changed

+45
-30
lines changed

Zend/zend_vm_def.h

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2842,31 +2842,31 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, CONST, ANY)
28422842
static inline void zend_return_hint_check(zend_execute_data *execute_data, zval *retval_ptr TSRMLS_DC) {
28432843
zend_return_hint *return_hint = &EX(function_state).function->common.return_hint;
28442844

2845-
if (!retval_ptr || Z_TYPE_P(retval_ptr) == IS_NULL) {
2845+
if (UNEXPECTED(!retval_ptr || Z_TYPE_P(retval_ptr) == IS_NULL)) {
28462846
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
28472847
} else if (retval_ptr){
28482848
switch (return_hint->type) {
2849-
case IS_ARRAY: if (Z_TYPE_P(retval_ptr) != IS_ARRAY) {
2849+
case IS_ARRAY: if (UNEXPECTED(Z_TYPE_P(retval_ptr) != IS_ARRAY)) {
28502850
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
28512851
} break;
28522852

2853-
case IS_CALLABLE: if (Z_TYPE_P(retval_ptr) != IS_OBJECT ||
2854-
!zend_is_callable_ex(retval_ptr, NULL, IS_CALLABLE_CHECK_SILENT, NULL, NULL, NULL, NULL TSRMLS_CC)) {
2853+
case IS_CALLABLE: if (UNEXPECTED(Z_TYPE_P(retval_ptr) != IS_OBJECT ||
2854+
!zend_is_callable_ex(retval_ptr, NULL, IS_CALLABLE_CHECK_SILENT, NULL, NULL, NULL, NULL TSRMLS_CC))) {
28552855
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
28562856
} break;
28572857

28582858
case IS_OBJECT: {
28592859
zend_class_entry **ce = NULL;
28602860

2861-
if (Z_TYPE_P(retval_ptr) != IS_OBJECT) {
2861+
if (UNEXPECTED(Z_TYPE_P(retval_ptr) != IS_OBJECT)) {
28622862
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
28632863
}
28642864

2865-
if (zend_lookup_class(return_hint->class_name, return_hint->class_name_len, &ce TSRMLS_CC) != SUCCESS) {
2865+
if (UNEXPECTED(zend_lookup_class(return_hint->class_name, return_hint->class_name_len, &ce TSRMLS_CC) != SUCCESS)) {
28662866
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, NULL, "the class could not be found" TSRMLS_CC);
28672867
}
28682868

2869-
if (!instanceof_function(Z_OBJCE_P(retval_ptr), *ce TSRMLS_CC)) {
2869+
if (UNEXPECTED(!instanceof_function(Z_OBJCE_P(retval_ptr), *ce TSRMLS_CC))) {
28702870
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
28712871
}
28722872
}
@@ -2883,8 +2883,9 @@ ZEND_VM_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
28832883
SAVE_OPLINE();
28842884
retval_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
28852885

2886-
if (EX(function_state).function->common.return_hint.used)
2886+
if (EX(function_state).function->common.return_hint.used) {
28872887
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
2888+
}
28882889

28892890
if (!EG(return_value_ptr_ptr)) {
28902891
FREE_OP1();
@@ -2937,9 +2938,10 @@ ZEND_VM_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY)
29372938

29382939
retval_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
29392940

2940-
if (EX(function_state).function->common.return_hint.used)
2941+
if (EX(function_state).function->common.return_hint.used) {
29412942
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
2942-
2943+
}
2944+
29432945
if (!EG(return_value_ptr_ptr)) {
29442946
if (OP1_TYPE == IS_TMP_VAR) {
29452947
FREE_OP1();
@@ -2963,8 +2965,9 @@ ZEND_VM_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY)
29632965

29642966
retval_ptr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
29652967

2966-
if (EX(function_state).function->common.return_hint.used)
2968+
if (EX(function_state).function->common.return_hint.used) {
29672969
zend_return_hint_check(execute_data, *retval_ptr_ptr TSRMLS_CC);
2970+
}
29682971

29692972
if (OP1_TYPE == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
29702973
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");

Zend/zend_vm_execute.h

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2588,31 +2588,31 @@ static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
25882588
static inline void zend_return_hint_check(zend_execute_data *execute_data, zval *retval_ptr TSRMLS_DC) {
25892589
zend_return_hint *return_hint = &EX(function_state).function->common.return_hint;
25902590

2591-
if (!retval_ptr || Z_TYPE_P(retval_ptr) == IS_NULL) {
2591+
if (UNEXPECTED(!retval_ptr || Z_TYPE_P(retval_ptr) == IS_NULL)) {
25922592
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
25932593
} else if (retval_ptr){
25942594
switch (return_hint->type) {
2595-
case IS_ARRAY: if (Z_TYPE_P(retval_ptr) != IS_ARRAY) {
2595+
case IS_ARRAY: if (UNEXPECTED(Z_TYPE_P(retval_ptr) != IS_ARRAY)) {
25962596
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
25972597
} break;
25982598

2599-
case IS_CALLABLE: if (Z_TYPE_P(retval_ptr) != IS_OBJECT ||
2600-
!zend_is_callable_ex(retval_ptr, NULL, IS_CALLABLE_CHECK_SILENT, NULL, NULL, NULL, NULL TSRMLS_CC)) {
2599+
case IS_CALLABLE: if (UNEXPECTED(Z_TYPE_P(retval_ptr) != IS_OBJECT ||
2600+
!zend_is_callable_ex(retval_ptr, NULL, IS_CALLABLE_CHECK_SILENT, NULL, NULL, NULL, NULL TSRMLS_CC))) {
26012601
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
26022602
} break;
26032603

26042604
case IS_OBJECT: {
26052605
zend_class_entry **ce = NULL;
26062606

2607-
if (Z_TYPE_P(retval_ptr) != IS_OBJECT) {
2607+
if (UNEXPECTED(Z_TYPE_P(retval_ptr) != IS_OBJECT)) {
26082608
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
26092609
}
26102610

2611-
if (zend_lookup_class(return_hint->class_name, return_hint->class_name_len, &ce TSRMLS_CC) != SUCCESS) {
2611+
if (UNEXPECTED(zend_lookup_class(return_hint->class_name, return_hint->class_name_len, &ce TSRMLS_CC) != SUCCESS)) {
26122612
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, NULL, "the class could not be found" TSRMLS_CC);
26132613
}
26142614

2615-
if (!instanceof_function(Z_OBJCE_P(retval_ptr), *ce TSRMLS_CC)) {
2615+
if (UNEXPECTED(!instanceof_function(Z_OBJCE_P(retval_ptr), *ce TSRMLS_CC))) {
26162616
zend_return_hint_error(E_RECOVERABLE_ERROR, EX(function_state).function, retval_ptr, NULL TSRMLS_CC);
26172617
}
26182618
}
@@ -2629,8 +2629,9 @@ static int ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
26292629
SAVE_OPLINE();
26302630
retval_ptr = opline->op1.zv;
26312631

2632-
if (EX(function_state).function->common.return_hint.used)
2632+
if (EX(function_state).function->common.return_hint.used) {
26332633
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
2634+
}
26342635

26352636
if (!EG(return_value_ptr_ptr)) {
26362637

@@ -2683,8 +2684,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HAND
26832684

26842685
retval_ptr = opline->op1.zv;
26852686

2686-
if (EX(function_state).function->common.return_hint.used)
2687+
if (EX(function_state).function->common.return_hint.used) {
26872688
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
2689+
}
26882690

26892691
if (!EG(return_value_ptr_ptr)) {
26902692
if (IS_CONST == IS_TMP_VAR) {
@@ -2709,8 +2711,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HAND
27092711

27102712
retval_ptr_ptr = NULL;
27112713

2712-
if (EX(function_state).function->common.return_hint.used)
2714+
if (EX(function_state).function->common.return_hint.used) {
27132715
zend_return_hint_check(execute_data, *retval_ptr_ptr TSRMLS_CC);
2716+
}
27142717

27152718
if (IS_CONST == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
27162719
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
@@ -7998,8 +8001,9 @@ static int ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
79988001
SAVE_OPLINE();
79998002
retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
80008003

8001-
if (EX(function_state).function->common.return_hint.used)
8004+
if (EX(function_state).function->common.return_hint.used) {
80028005
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
8006+
}
80038007

80048008
if (!EG(return_value_ptr_ptr)) {
80058009
zval_dtor(free_op1.var);
@@ -8052,8 +8056,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLE
80528056

80538057
retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
80548058

8055-
if (EX(function_state).function->common.return_hint.used)
8059+
if (EX(function_state).function->common.return_hint.used) {
80568060
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
8061+
}
80578062

80588063
if (!EG(return_value_ptr_ptr)) {
80598064
if (IS_TMP_VAR == IS_TMP_VAR) {
@@ -8078,8 +8083,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLE
80788083

80798084
retval_ptr_ptr = NULL;
80808085

8081-
if (EX(function_state).function->common.return_hint.used)
8086+
if (EX(function_state).function->common.return_hint.used) {
80828087
zend_return_hint_check(execute_data, *retval_ptr_ptr TSRMLS_CC);
8088+
}
80838089

80848090
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
80858091
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
@@ -13267,8 +13273,9 @@ static int ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1326713273
SAVE_OPLINE();
1326813274
retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1326913275

13270-
if (EX(function_state).function->common.return_hint.used)
13276+
if (EX(function_state).function->common.return_hint.used) {
1327113277
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
13278+
}
1327213279

1327313280
if (!EG(return_value_ptr_ptr)) {
1327413281
zval_ptr_dtor_nogc(&free_op1.var);
@@ -13321,8 +13328,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLE
1332113328

1332213329
retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1332313330

13324-
if (EX(function_state).function->common.return_hint.used)
13331+
if (EX(function_state).function->common.return_hint.used) {
1332513332
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
13333+
}
1332613334

1332713335
if (!EG(return_value_ptr_ptr)) {
1332813336
if (IS_VAR == IS_TMP_VAR) {
@@ -13347,8 +13355,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLE
1334713355

1334813356
retval_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1334913357

13350-
if (EX(function_state).function->common.return_hint.used)
13358+
if (EX(function_state).function->common.return_hint.used) {
1335113359
zend_return_hint_check(execute_data, *retval_ptr_ptr TSRMLS_CC);
13360+
}
1335213361

1335313362
if (IS_VAR == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
1335413363
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
@@ -30891,8 +30900,9 @@ static int ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3089130900
SAVE_OPLINE();
3089230901
retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
3089330902

30894-
if (EX(function_state).function->common.return_hint.used)
30903+
if (EX(function_state).function->common.return_hint.used) {
3089530904
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
30905+
}
3089630906

3089730907
if (!EG(return_value_ptr_ptr)) {
3089830908

@@ -30945,8 +30955,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER
3094530955

3094630956
retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
3094730957

30948-
if (EX(function_state).function->common.return_hint.used)
30958+
if (EX(function_state).function->common.return_hint.used) {
3094930959
zend_return_hint_check(execute_data, retval_ptr TSRMLS_CC);
30960+
}
3095030961

3095130962
if (!EG(return_value_ptr_ptr)) {
3095230963
if (IS_CV == IS_TMP_VAR) {
@@ -30971,8 +30982,9 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER
3097130982

3097230983
retval_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
3097330984

30974-
if (EX(function_state).function->common.return_hint.used)
30985+
if (EX(function_state).function->common.return_hint.used) {
3097530986
zend_return_hint_check(execute_data, *retval_ptr_ptr TSRMLS_CC);
30987+
}
3097630988

3097730989
if (IS_CV == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
3097830990
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");

0 commit comments

Comments
 (0)