@@ -450,10 +450,12 @@ static inheritance_status zend_do_perform_implementation_check(
450
450
451
451
local_status = zend_do_perform_arg_type_hint_check (
452
452
unresolved_class , fe , fe_arg_info , proto , proto_arg_info );
453
- if (local_status == INHERITANCE_ERROR ) {
454
- return INHERITANCE_ERROR ;
455
- }
456
- if (local_status == INHERITANCE_UNRESOLVED ) {
453
+
454
+ if (UNEXPECTED (local_status != INHERITANCE_SUCCESS )) {
455
+ if (UNEXPECTED (local_status == INHERITANCE_ERROR )) {
456
+ return INHERITANCE_ERROR ;
457
+ }
458
+ ZEND_ASSERT (local_status == INHERITANCE_UNRESOLVED );
457
459
status = INHERITANCE_UNRESOLVED ;
458
460
}
459
461
@@ -473,10 +475,12 @@ static inheritance_status zend_do_perform_implementation_check(
473
475
474
476
local_status = zend_perform_covariant_type_check (
475
477
unresolved_class , fe , fe -> common .arg_info - 1 , proto , proto -> common .arg_info - 1 );
476
- if (local_status == INHERITANCE_ERROR ) {
477
- return INHERITANCE_ERROR ;
478
- }
479
- if (local_status == INHERITANCE_UNRESOLVED ) {
478
+
479
+ if (UNEXPECTED (local_status != INHERITANCE_SUCCESS )) {
480
+ if (UNEXPECTED (local_status == INHERITANCE_ERROR )) {
481
+ return INHERITANCE_ERROR ;
482
+ }
483
+ ZEND_ASSERT (local_status == INHERITANCE_UNRESOLVED );
480
484
status = INHERITANCE_UNRESOLVED ;
481
485
}
482
486
}
@@ -702,7 +706,8 @@ static void perform_delayable_implementation_check(
702
706
if (UNEXPECTED (status != INHERITANCE_SUCCESS )) {
703
707
if (EXPECTED (status == INHERITANCE_UNRESOLVED )) {
704
708
add_compatibility_obligation (ce , fe , proto , always_error );
705
- } else if (status == INHERITANCE_ERROR ) {
709
+ } else {
710
+ ZEND_ASSERT (status == INHERITANCE_ERROR );
706
711
if (always_error ) {
707
712
emit_incompatible_method_error (
708
713
E_COMPILE_ERROR , "must" , fe , proto , status , unresolved_class );
@@ -2262,10 +2267,12 @@ static int check_variance_obligation(zval *zv) {
2262
2267
zend_string * unresolved_class ;
2263
2268
inheritance_status status = zend_do_perform_implementation_check (
2264
2269
& unresolved_class , obligation -> child_fn , obligation -> parent_fn );
2265
- if (status == INHERITANCE_UNRESOLVED ) {
2266
- return ZEND_HASH_APPLY_KEEP ;
2267
- }
2268
- if (status == INHERITANCE_ERROR ) {
2270
+
2271
+ if (UNEXPECTED (status != INHERITANCE_SUCCESS )) {
2272
+ if (EXPECTED (status == INHERITANCE_UNRESOLVED )) {
2273
+ return ZEND_HASH_APPLY_KEEP ;
2274
+ }
2275
+ ZEND_ASSERT (status == INHERITANCE_ERROR );
2269
2276
emit_incompatible_method_error_or_warning (
2270
2277
obligation -> child_fn , obligation -> parent_fn , status , unresolved_class ,
2271
2278
obligation -> always_error );
@@ -2402,9 +2409,16 @@ zend_bool zend_can_early_bind(zend_class_entry *ce, zend_class_entry *parent_ce)
2402
2409
}
2403
2410
2404
2411
zv = zend_hash_find_ex (& ce -> function_table , key , 1 );
2405
- if (zv
2406
- && zend_do_perform_implementation_check (& unresolved_class , Z_FUNC_P (zv ), parent_func ) == INHERITANCE_UNRESOLVED ) {
2407
- return 0 ;
2412
+ if (zv ) {
2413
+ zend_function * child_func = Z_FUNC_P (zv );
2414
+ inheritance_status status ;
2415
+
2416
+ status = zend_do_perform_implementation_check (
2417
+ & unresolved_class , child_func , parent_func );
2418
+
2419
+ if (UNEXPECTED (status == INHERITANCE_UNRESOLVED )) {
2420
+ return 0 ;
2421
+ }
2408
2422
}
2409
2423
} ZEND_HASH_FOREACH_END ();
2410
2424
return 1 ;
0 commit comments