@@ -1952,6 +1952,10 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_
19521952 zend_function * new_fn ;
19531953 bool check_inheritance = false;
19541954
1955+ if ((fn -> common .fn_flags & (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL )) == (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL )) {
1956+ zend_error (E_COMPILE_WARNING , "Private methods cannot be final as they are never overridden by other classes" );
1957+ }
1958+
19551959 if ((existing_fn = zend_hash_find_ptr (& ce -> function_table , key )) != NULL ) {
19561960 /* if it is the same function with the same visibility and has not been assigned a class scope yet, regardless
19571961 * of where it is coming from there is no conflict and we do not need to add it again */
@@ -2051,10 +2055,10 @@ static void zend_traits_copy_functions(zend_string *fnname, zend_function *fn, z
20512055 && zend_string_equals_ci (alias -> trait_method .method_name , fnname )
20522056 ) {
20532057 fn_copy = * fn ;
2054-
2055- /* if it is 0, no modifiers have been changed */
2056- if (alias -> modifiers ) {
2058+ if (alias -> modifiers & ZEND_ACC_PPP_MASK ) {
20572059 fn_copy .common .fn_flags = alias -> modifiers | (fn -> common .fn_flags & ~ZEND_ACC_PPP_MASK );
2060+ } else {
2061+ fn_copy .common .fn_flags = alias -> modifiers | fn -> common .fn_flags ;
20582062 }
20592063
20602064 lcname = zend_string_tolower (alias -> alias );
@@ -2082,7 +2086,11 @@ static void zend_traits_copy_functions(zend_string *fnname, zend_function *fn, z
20822086 && fn -> common .scope == aliases [i ]
20832087 && zend_string_equals_ci (alias -> trait_method .method_name , fnname )
20842088 ) {
2085- fn_copy .common .fn_flags = alias -> modifiers | (fn -> common .fn_flags & ~ZEND_ACC_PPP_MASK );
2089+ if (alias -> modifiers & ZEND_ACC_PPP_MASK ) {
2090+ fn_copy .common .fn_flags = alias -> modifiers | (fn -> common .fn_flags & ~ZEND_ACC_PPP_MASK );
2091+ } else {
2092+ fn_copy .common .fn_flags = alias -> modifiers | fn -> common .fn_flags ;
2093+ }
20862094 }
20872095 alias_ptr ++ ;
20882096 alias = * alias_ptr ;
0 commit comments