]> granicus.if.org Git - php/commitdiff
Set ZEND_ACC_LINKED flag after early binding (for consistency)
authorDmitry Stogov <dmitry@zend.com>
Tue, 25 Jun 2019 12:05:27 +0000 (15:05 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 25 Jun 2019 12:05:27 +0000 (15:05 +0300)
Zend/zend_compile.c

index 1f20c4591ddf2bdc408abbf172841856d1915df7..6eb646d3dd1ee8a992044d764873a42a2b54a7f4 100644 (file)
@@ -1162,12 +1162,13 @@ ZEND_API void zend_do_delayed_early_binding(const zend_op_array *op_array, uint3
                                        if (UNEXPECTED(!zv)) {
                                                zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ZSTR_VAL(ce->name));
                                        } else {
-                                               ce->ce_flags |= ZEND_ACC_LINKED;
                                                zend_do_inheritance(ce, parent_ce);
                                                zend_build_properties_info_table(ce);
                                                if ((ce->ce_flags & (ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) == ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) {
                                                        zend_verify_abstract_class(ce);
                                                }
+                                               ZEND_ASSERT(!(ce->ce_flags & ZEND_ACC_UNRESOLVED_VARIANCE));
+                                               ce->ce_flags |= ZEND_ACC_LINKED;
                                        }
                                }
                        }
@@ -6451,12 +6452,13 @@ zend_op *zend_compile_class_decl(zend_ast *ast, zend_bool toplevel) /* {{{ */
                                ) {
                                if (EXPECTED(zend_hash_add_ptr(CG(class_table), lcname, ce) != NULL)) {
                                        CG(zend_lineno) = decl->end_lineno;
-                                       ce->ce_flags |= ZEND_ACC_LINKED;
                                        zend_do_inheritance(ce, parent_ce);
                                        zend_build_properties_info_table(ce);
                                        if ((ce->ce_flags & (ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) == ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) {
                                                zend_verify_abstract_class(ce);
                                        }
+                                       ZEND_ASSERT(!(ce->ce_flags & ZEND_ACC_UNRESOLVED_VARIANCE));
+                                       ce->ce_flags |= ZEND_ACC_LINKED;
                                        CG(zend_lineno) = ast->lineno;
                                        zend_string_release(lcname);
                                        return NULL;