mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'master' into preload
* master: Mark "top-level" functions. Don't initialize static_member_tables during start-up, when inherit internal classes. [ci skip] Update NEWS [ci skip] Update NEWS [ci skip] Update NEWS Fix #77035: The phpize and ./configure create redundant .deps file Remove outdated PEAR artefacts Fix tests/output/bug74815.phpt generating errors.log Revert "Use C++ symbols, when C++11 or upper is compiled" Use C++ symbols, when C++11 or upper is compiled Added new line Remove stamp-h Move all testing docs to qa.php.net Fix a typo in UPGRADING.INTERNALS Fix test when it's run on another drive [ci skip] Update UPGRADING wrt. tidyp support Fixed incorrect reallocation Fix #77027: tidy::getOptDoc() not available on Windows Run CI tests under opcache.protect_memory=1
This commit is contained in:
commit
b0139dc228
27 changed files with 67 additions and 251 deletions
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -26,7 +26,6 @@
|
|||
*.tar.xz.asc
|
||||
.FBCIndex
|
||||
.FBCLockFolder
|
||||
.deps
|
||||
.libs
|
||||
phpt.*
|
||||
core
|
||||
|
@ -71,24 +70,16 @@ php_test_results_*.txt
|
|||
php_version.h
|
||||
results.txt
|
||||
shlibtool
|
||||
stamp-h
|
||||
test.php3
|
||||
tmp-php.ini
|
||||
stamp-h.in
|
||||
scan_makefile_in.awk
|
||||
main/php_config.h
|
||||
main/php_config.h.in
|
||||
main/build-defs.h
|
||||
main/internal_functions_cli.c
|
||||
main/config.w32.h
|
||||
main/stamp-h1
|
||||
main/streams/build-defs.h
|
||||
main/streams/stamp-h1
|
||||
pear/install-pear-nozlib.phar
|
||||
pear/phpize
|
||||
pear/run-tests
|
||||
pear/php-config
|
||||
pear/scripts
|
||||
sapi/apache2handler/libphp7.module
|
||||
sapi/cgi/php-cgi
|
||||
sapi/cgi/php-cgi.1
|
||||
|
|
|
@ -69,7 +69,7 @@ before_script:
|
|||
|
||||
# Run PHPs run-tests.php
|
||||
script:
|
||||
- ./sapi/cli/php run-tests.php -p `pwd`/sapi/cli/php $(if [ $ENABLE_DEBUG == 0 ]; then echo "-d opcache.enable_cli=1 -d zend_extension=`pwd`/modules/opcache.so"; fi) -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP" --offline --show-diff --show-slow 1000 --set-timeout 120
|
||||
- ./sapi/cli/php run-tests.php -p `pwd`/sapi/cli/php $(if [ $ENABLE_DEBUG == 0 ]; then echo "-d opcache.enable_cli=1 -d opcache.protect_memory=1 -d zend_extension=`pwd`/modules/opcache.so"; fi) -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP" --offline --show-diff --show-slow 1000 --set-timeout 120
|
||||
|
||||
after_success:
|
||||
- ccache --show-stats
|
||||
|
|
|
@ -251,7 +251,7 @@ Testing
|
|||
-------
|
||||
|
||||
1. Extensions should be well tested using *.phpt tests. Read about that
|
||||
in README.TESTING.
|
||||
at https://qa.php.net/write-test.php.
|
||||
|
||||
Documentation and Folding Hooks
|
||||
-------------------------------
|
||||
|
|
|
@ -52,9 +52,6 @@ We love getting new tests! PHP is a huge project and improving code coverage is
|
|||
a huge win for every PHP user.
|
||||
|
||||
[Our QA site includes a page detailing how to write test cases.](http://qa.php.net/write-test.php)
|
||||
Please note that the section on submitting pull requests is outdated: in
|
||||
addition to the process listed there, you can also
|
||||
[submit pull requests](#pull-requests).
|
||||
|
||||
## Writing documentation
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ clean:
|
|||
rm -f libphp$(PHP_MAJOR_VERSION).la $(SAPI_CLI_PATH) $(SAPI_CGI_PATH) $(SAPI_LITESPEED_PATH) $(SAPI_FPM_PATH) $(OVERALL_TARGET) modules/* libs/*
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile config.cache config.log config.status Makefile.objects Makefile.fragments libtool main/php_config.h main/internal_functions_cli.c main/internal_functions.c stamp-h buildmk.stamp Zend/zend_dtrace_gen.h Zend/zend_dtrace_gen.h.bak Zend/zend_config.h TSRM/tsrm_config.h
|
||||
rm -f Makefile config.cache config.log config.status Makefile.objects Makefile.fragments libtool main/php_config.h main/internal_functions_cli.c main/internal_functions.c buildmk.stamp Zend/zend_dtrace_gen.h Zend/zend_dtrace_gen.h.bak Zend/zend_config.h TSRM/tsrm_config.h
|
||||
rm -f php7.spec main/build-defs.h scripts/phpize
|
||||
rm -f ext/date/lib/timelib_config.h ext/mbstring/oniguruma/config.h ext/mbstring/libmbfl/config.h ext/oci8/oci8_dtrace_gen.h ext/oci8/oci8_dtrace_gen.h.bak
|
||||
rm -f scripts/man1/phpize.1 scripts/php-config scripts/man1/php-config.1 sapi/cli/php.1 sapi/cgi/php-cgi.1 sapi/phpdbg/phpdbg.1 ext/phar/phar.1 ext/phar/phar.phar.1
|
||||
|
|
|
@ -138,11 +138,10 @@ work on "master".
|
|||
|
||||
Read CODING_STANDARDS before you start working.
|
||||
|
||||
After modifying the source see README.TESTING and
|
||||
http://qa.php.net/write-test.php for how to test. Submitting test
|
||||
scripts helps us to understand what functionality has changed. It is
|
||||
important for the stability and maintainability of PHP that tests are
|
||||
comprehensive.
|
||||
After modifying the source see https://qa.php.net/write-test.php for
|
||||
how to test. Submitting test scripts helps us to understand what
|
||||
functionality has changed. It is important for the stability and
|
||||
maintainability of PHP that tests are comprehensive.
|
||||
|
||||
After testing is finished, create a patch file using the command:
|
||||
|
||||
|
|
181
README.TESTING
181
README.TESTING
|
@ -1,181 +0,0 @@
|
|||
[IMPORTANT NOTICE]
|
||||
------------------
|
||||
Failed tests usually indicate a problem with your local system setup
|
||||
and not within PHP itself (at least for official PHP release versions).
|
||||
You may decide to automatically submit a test summary to our QA workflow
|
||||
at the end of a test run.
|
||||
Please do *not* submit a failed test as a bug or ask for help on why
|
||||
it failed on your system without providing substantial backup information
|
||||
on *why* the test failed on your special setup. Thank you :-)
|
||||
|
||||
|
||||
[Testing Basics]
|
||||
----------------
|
||||
The easiest way to test your PHP build is to run "make test" from the
|
||||
command line after successfully compiling. This will run the complete
|
||||
tests for all enabled functionalities and extensions using the PHP
|
||||
CLI binary.
|
||||
To execute test scripts, you must build PHP with some SAPI, then you
|
||||
type "make test" to execute all or some test scripts saved under
|
||||
"tests" directory under source root directory.
|
||||
|
||||
Usage:
|
||||
make test
|
||||
|
||||
"make test" basically executes "run-tests.php" script
|
||||
under the source root (parallel builds will not work). Therefore you
|
||||
can execute the script as follows:
|
||||
|
||||
TEST_PHP_EXECUTABLE=sapi/cli/php \
|
||||
sapi/cli/php [-c /path/to/php.ini] run-tests.php [ext/foo/tests/GLOB]
|
||||
|
||||
|
||||
[Which "php" executable "make test" look for]
|
||||
---------------------------------------------
|
||||
If you are running the run-tests.php script from the command line (as above)
|
||||
you must set the TEST_PHP_EXECUTABLE environment variable to explicitly
|
||||
select the PHP executable that is to be tested, that is, used to run the test scripts.
|
||||
|
||||
If you run the tests using make test, the PHP CLI and CGI executables are
|
||||
automatically set for you. "make test" executes "run-tests.php" script with the CLI binary. Some
|
||||
test scripts such as session must be executed by CGI SAPI. Therefore,
|
||||
you must build PHP with CGI SAPI to perform all tests.
|
||||
|
||||
NOTE: PHP binary executing "run-tests.php" and php binary used for
|
||||
executing test scripts may differ. If you use different PHP binary for
|
||||
executing "run-tests.php" script, you may get errors.
|
||||
|
||||
|
||||
[Which php.ini is used]
|
||||
-----------------------
|
||||
"make test" uses the same php.ini file as it would once installed.
|
||||
The tests have been written to be independent of that php.ini file,
|
||||
so if you find a test that is affected by a setting, please report
|
||||
this, so we can address the issue.
|
||||
|
||||
|
||||
[Which test scripts are executed]
|
||||
---------------------------------
|
||||
"run-tests.php" ("make test"), without any arguments executes all
|
||||
test scripts by extracting all directories named "tests"
|
||||
from the source root and any subdirectories below. If there are files,
|
||||
which have a "phpt" extension, "run-tests.php" looks at the sections
|
||||
in these files, determines whether it should run it, by evaluating
|
||||
the 'SKIPIF' section. If the test is eligible for execution, the 'FILE'
|
||||
section is extracted into a ".php" file (with the same name besides
|
||||
the extension) and gets executed.
|
||||
When an argument is given or TESTS environment variable is set, the
|
||||
GLOB is expanded by the shell and any file with extension "*.phpt" is
|
||||
regarded as a test file.
|
||||
|
||||
Tester can easily execute tests selectively with as follows.
|
||||
|
||||
Examples:
|
||||
./sapi/cli/php run-tests.php ext/mbstring/*
|
||||
./sapi/cli/php run-tests.php ext/mbstring/020.phpt
|
||||
|
||||
|
||||
[Test results]
|
||||
--------------
|
||||
Test results are printed to standard output. If there is a failed test,
|
||||
the "run-tests.php" script saves the result, the expected result and the
|
||||
code executed to the test script directory. For example, if
|
||||
ext/myext/tests/myext.phpt fails to pass, the following files are created:
|
||||
|
||||
ext/myext/tests/myext.php - actual test file executed
|
||||
ext/myext/tests/myext.log - log of test execution (L)
|
||||
ext/myext/tests/myext.exp - expected output (E)
|
||||
ext/myext/tests/myext.out - output from test script (O)
|
||||
ext/myext/tests/myext.diff - diff of .out and .exp (D)
|
||||
|
||||
Failed tests are always bugs. Either the test is bugged or not considering
|
||||
factors applying to the tester's environment, or there is a bug in PHP.
|
||||
If this is a known bug, we strive to provide bug numbers, in either the
|
||||
test name or the file name. You can check the status of such a bug, by
|
||||
going to: http://bugs.php.net/12345 where 12345 is the bug number.
|
||||
For clarity and automated processing, bug numbers are prefixed by a hash
|
||||
sign '#' in test names and/or test cases are named bug12345.phpt.
|
||||
|
||||
NOTE: The files generated by tests can be selected by setting the
|
||||
environment variable TEST_PHP_LOG_FORMAT. For each file you want to be
|
||||
generated use the character in brackets as shown above (default is LEOD).
|
||||
The php file will be generated always.
|
||||
|
||||
NOTE: You can set environment variable TEST_PHP_DETAILED to enable
|
||||
detailed test information.
|
||||
|
||||
[Automated Testing]
|
||||
--------------
|
||||
If you like to keep up to speed, with latest developments and quality
|
||||
assurance, setting the environment variable NO_INTERACTION to 1, will not
|
||||
prompt the tester for any user input.
|
||||
|
||||
Normally, the exit status of "make test" is zero, regardless of the results
|
||||
of independent tests. Set the environment variable REPORT_EXIT_STATUS to 1,
|
||||
and "make test" will set the exit status ("$?") to non-zero, when an
|
||||
individual test has failed.
|
||||
|
||||
Example script to be run by cron(1):
|
||||
========== qa-test.sh =============
|
||||
#!/bin/sh
|
||||
|
||||
CO_DIR=$HOME/cvs/php7
|
||||
MYMAIL=qa-test@domain.com
|
||||
TMPDIR=/var/tmp
|
||||
TODAY=`date +"%Y%m%d"`
|
||||
|
||||
# Make sure compilation environment is correct
|
||||
CONFIGURE_OPTS='--disable-all --enable-cli --with-pcre'
|
||||
export MAKE=gmake
|
||||
export CC=gcc
|
||||
|
||||
# Set test environment
|
||||
export NO_INTERACTION=1
|
||||
export REPORT_EXIT_STATUS=1
|
||||
|
||||
cd $CO_DIR
|
||||
cvs update . >>$TMPDIR/phpqatest.$TODAY
|
||||
./cvsclean ; ./buildconf ; ./configure $CONFIGURE_OPTS ; $MAKE
|
||||
$MAKE test >>$TMPDIR/phpqatest.$TODAY 2>&1
|
||||
if test $? -gt 0
|
||||
then
|
||||
cat $TMPDIR/phpqatest.$TODAY | mail -s"PHP-QA Test Failed for $TODAY" $MYMAIL
|
||||
fi
|
||||
========== end of qa-test.sh =============
|
||||
|
||||
NOTE: The exit status of run-tests.php will be 1 when
|
||||
REPORT_EXIT_STATUS is set. The result of "make test" may be higher
|
||||
than that. At present, gmake 3.79.1 returns 2, so it is
|
||||
advised to test for non-zero, rather then a specific value.
|
||||
|
||||
|
||||
[Creating new test files]
|
||||
-------------------------
|
||||
Writing test file is very easy if you are used to PHP.
|
||||
See the HOWTO at http://qa.php.net/write-test.php
|
||||
|
||||
|
||||
[How to help us]
|
||||
----------------
|
||||
If you find bug in PHP, you can submit bug report AND test script
|
||||
for us. You don't have to write complete script, just give us test
|
||||
script with following format. Please test the script and make sure
|
||||
you write the correct ACTUAL OUTPUT and EXPECTED OUTPUT before you
|
||||
submit.
|
||||
|
||||
<?php
|
||||
/*
|
||||
Bug #12345
|
||||
substr() bug. Do not return expected string.
|
||||
|
||||
ACTUAL OUTPUT
|
||||
XYXA
|
||||
|
||||
EXPECTED OUTPUT
|
||||
ABCD
|
||||
*/
|
||||
|
||||
$str = "XYZABCD";
|
||||
echo substr($str,3,7);
|
||||
|
||||
?>
|
|
@ -37,3 +37,10 @@ Guidelines for contributors
|
|||
- [README.GIT-RULES](/README.GIT-RULES)
|
||||
- [README.MAILINGLIST_RULES](/README.MAILINGLIST_RULES)
|
||||
- [README.RELEASE_PROCESS](/README.RELEASE_PROCESS)
|
||||
|
||||
## Testing
|
||||
|
||||
To run tests the `make test` is used after successful compilation of the sources.
|
||||
|
||||
See [Creating new test files](https://qa.php.net/write-test.php) chapter for more
|
||||
information about testing.
|
||||
|
|
|
@ -34,7 +34,7 @@ PHP 7.4 INTERNALS UPGRADE NOTES
|
|||
c. Function/property/class flags changes
|
||||
- ZEND_ACC_CTOR and ZEND_ACC_DTOR are removed. It's possible to check if
|
||||
method is a constructor/destructor using the following condition
|
||||
(func->commpon.scope->constructor == func).
|
||||
(func->common.scope->constructor == func).
|
||||
- ZEND_ACC_IMPLEMENTED_ABSTRACT is removed (it was used only internally
|
||||
during inheritance).
|
||||
- ZEND_ACC_IMPLICIT_PUBLIC is removed (it was used only for reflection)
|
||||
|
|
|
@ -5895,6 +5895,10 @@ void zend_compile_func_decl(znode *result, zend_ast *ast, zend_bool toplevel) /*
|
|||
|
||||
CG(active_op_array) = op_array;
|
||||
|
||||
if (toplevel) {
|
||||
op_array->fn_flags |= ZEND_ACC_TOP_LEVEL;
|
||||
}
|
||||
|
||||
zend_oparray_context_begin(&orig_oparray_context);
|
||||
|
||||
if (CG(compiler_options) & ZEND_COMPILE_EXTENDED_INFO) {
|
||||
|
|
|
@ -223,6 +223,9 @@ typedef struct _zend_oparray_context {
|
|||
/* Function has typed arguments / class has typed props | | | */
|
||||
#define ZEND_ACC_HAS_TYPE_HINTS (1 << 8) /* ? | X | | */
|
||||
/* | | | */
|
||||
/* Top-level class or function declaration | | | */
|
||||
#define ZEND_ACC_TOP_LEVEL (1 << 9) /* X | X | | */
|
||||
/* | | | */
|
||||
/* Class Flags (unused: 16...) | | | */
|
||||
/* =========== | | | */
|
||||
/* | | | */
|
||||
|
@ -240,75 +243,72 @@ typedef struct _zend_oparray_context {
|
|||
/* | | | */
|
||||
/* Class has magic methods __get/__set/__unset/ | | | */
|
||||
/* __isset that use guards | | | */
|
||||
#define ZEND_ACC_USE_GUARDS (1 << 9) /* X | | | */
|
||||
#define ZEND_ACC_USE_GUARDS (1 << 10) /* X | | | */
|
||||
/* | | | */
|
||||
/* Class constants updated | | | */
|
||||
#define ZEND_ACC_CONSTANTS_UPDATED (1 << 10) /* X | | | */
|
||||
#define ZEND_ACC_CONSTANTS_UPDATED (1 << 11) /* X | | | */
|
||||
/* | | | */
|
||||
/* Class extends another class | | | */
|
||||
#define ZEND_ACC_INHERITED (1 << 11) /* X | | | */
|
||||
#define ZEND_ACC_INHERITED (1 << 12) /* X | | | */
|
||||
/* | | | */
|
||||
/* Class implements interface(s) | | | */
|
||||
#define ZEND_ACC_IMPLEMENT_INTERFACES (1 << 12) /* X | | | */
|
||||
#define ZEND_ACC_IMPLEMENT_INTERFACES (1 << 13) /* X | | | */
|
||||
/* | | | */
|
||||
/* Class uses trait(s) | | | */
|
||||
#define ZEND_ACC_IMPLEMENT_TRAITS (1 << 13) /* X | | | */
|
||||
#define ZEND_ACC_IMPLEMENT_TRAITS (1 << 14) /* X | | | */
|
||||
/* | | | */
|
||||
/* User class has methods with static variables | | | */
|
||||
#define ZEND_HAS_STATIC_IN_METHODS (1 << 14) /* X | | | */
|
||||
#define ZEND_HAS_STATIC_IN_METHODS (1 << 15) /* X | | | */
|
||||
/* | | | */
|
||||
/* Top-level class declaration | | | */
|
||||
#define ZEND_ACC_TOP_LEVEL (1 << 15) /* X | | | */
|
||||
/* | | | */
|
||||
/* Function Flags (unused: 25...30) | | | */
|
||||
/* Function Flags (unused: 26...30) | | | */
|
||||
/* ============== | | | */
|
||||
/* | | | */
|
||||
/* deprecation flag | | | */
|
||||
#define ZEND_ACC_DEPRECATED (1 << 9) /* | X | | */
|
||||
#define ZEND_ACC_DEPRECATED (1 << 10) /* | X | | */
|
||||
/* | | | */
|
||||
/* Function returning by reference | | | */
|
||||
#define ZEND_ACC_RETURN_REFERENCE (1 << 10) /* | X | | */
|
||||
#define ZEND_ACC_RETURN_REFERENCE (1 << 11) /* | X | | */
|
||||
/* | | | */
|
||||
/* Function has a return type | | | */
|
||||
#define ZEND_ACC_HAS_RETURN_TYPE (1 << 11) /* | X | | */
|
||||
#define ZEND_ACC_HAS_RETURN_TYPE (1 << 12) /* | X | | */
|
||||
/* | | | */
|
||||
/* Function with variable number of arguments | | | */
|
||||
#define ZEND_ACC_VARIADIC (1 << 12) /* | X | | */
|
||||
#define ZEND_ACC_VARIADIC (1 << 13) /* | X | | */
|
||||
/* | | | */
|
||||
/* op_array has finally blocks (user only) | | | */
|
||||
#define ZEND_ACC_HAS_FINALLY_BLOCK (1 << 13) /* | X | | */
|
||||
#define ZEND_ACC_HAS_FINALLY_BLOCK (1 << 14) /* | X | | */
|
||||
/* | | | */
|
||||
/* "main" op_array with | | | */
|
||||
/* ZEND_DECLARE_INHERITED_CLASS_DELAYED opcodes | | | */
|
||||
#define ZEND_ACC_EARLY_BINDING (1 << 14) /* | X | | */
|
||||
#define ZEND_ACC_EARLY_BINDING (1 << 15) /* | X | | */
|
||||
/* | | | */
|
||||
/* method flag (bc only), any method that has this | | | */
|
||||
/* flag can be used statically and non statically. | | | */
|
||||
#define ZEND_ACC_ALLOW_STATIC (1 << 15) /* | X | | */
|
||||
#define ZEND_ACC_ALLOW_STATIC (1 << 16) /* | X | | */
|
||||
/* | | | */
|
||||
/* call through user function trampoline. e.g. | | | */
|
||||
/* __call, __callstatic | | | */
|
||||
#define ZEND_ACC_CALL_VIA_TRAMPOLINE (1 << 16) /* | X | | */
|
||||
#define ZEND_ACC_CALL_VIA_TRAMPOLINE (1 << 17) /* | X | | */
|
||||
/* | | | */
|
||||
/* disable inline caching | | | */
|
||||
#define ZEND_ACC_NEVER_CACHE (1 << 17) /* | X | | */
|
||||
#define ZEND_ACC_NEVER_CACHE (1 << 18) /* | X | | */
|
||||
/* | | | */
|
||||
/* Closure related | | | */
|
||||
#define ZEND_ACC_CLOSURE (1 << 18) /* | X | | */
|
||||
#define ZEND_ACC_FAKE_CLOSURE (1 << 19) /* | X | | */
|
||||
#define ZEND_ACC_CLOSURE (1 << 19) /* | X | | */
|
||||
#define ZEND_ACC_FAKE_CLOSURE (1 << 20) /* | X | | */
|
||||
/* | | | */
|
||||
/* run_time_cache allocated on heap (user only) | | | */
|
||||
#define ZEND_ACC_HEAP_RT_CACHE (1 << 20) /* | X | | */
|
||||
#define ZEND_ACC_HEAP_RT_CACHE (1 << 21) /* | X | | */
|
||||
/* | | | */
|
||||
/* method flag used by Closure::__invoke() | | | */
|
||||
#define ZEND_ACC_USER_ARG_INFO (1 << 21) /* | X | | */
|
||||
#define ZEND_ACC_USER_ARG_INFO (1 << 22) /* | X | | */
|
||||
/* | | | */
|
||||
#define ZEND_ACC_GENERATOR (1 << 22) /* | X | | */
|
||||
#define ZEND_ACC_GENERATOR (1 << 23) /* | X | | */
|
||||
/* | | | */
|
||||
#define ZEND_ACC_DONE_PASS_TWO (1 << 23) /* | X | | */
|
||||
#define ZEND_ACC_DONE_PASS_TWO (1 << 24) /* | X | | */
|
||||
/* | | | */
|
||||
/* internal function is allocated at arena (int only) | | | */
|
||||
#define ZEND_ACC_ARENA_ALLOCATED (1 << 24) /* | X | | */
|
||||
#define ZEND_ACC_ARENA_ALLOCATED (1 << 25) /* | X | | */
|
||||
/* | | | */
|
||||
/* op_array uses strict mode types | | | */
|
||||
#define ZEND_ACC_STRICT_TYPES (1 << 31) /* | X | | */
|
||||
|
|
|
@ -885,12 +885,11 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
|
|||
dst = end + parent_ce->default_static_members_count;
|
||||
ce->default_static_members_table = end;
|
||||
}
|
||||
if (CE_STATIC_MEMBERS(parent_ce) == NULL) {
|
||||
ZEND_ASSERT(parent_ce->type == ZEND_INTERNAL_CLASS || (parent_ce->ce_flags & ZEND_ACC_IMMUTABLE));
|
||||
zend_class_init_statics(parent_ce);
|
||||
}
|
||||
if (UNEXPECTED(parent_ce->type != ce->type)) {
|
||||
/* User class extends internal */
|
||||
if (CE_STATIC_MEMBERS(parent_ce) == NULL) {
|
||||
zend_class_init_statics(parent_ce);
|
||||
}
|
||||
if (UNEXPECTED(zend_update_class_constants(parent_ce) != SUCCESS)) {
|
||||
ZEND_ASSERT(0);
|
||||
}
|
||||
|
@ -905,6 +904,10 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
|
|||
}
|
||||
} while (dst != end);
|
||||
} else if (ce->type == ZEND_USER_CLASS) {
|
||||
if (CE_STATIC_MEMBERS(parent_ce) == NULL) {
|
||||
ZEND_ASSERT(parent_ce->ce_flags & ZEND_ACC_IMMUTABLE);
|
||||
zend_class_init_statics(parent_ce);
|
||||
}
|
||||
src = CE_STATIC_MEMBERS(parent_ce) + parent_ce->default_static_members_count;
|
||||
do {
|
||||
dst--;
|
||||
|
|
|
@ -2674,6 +2674,7 @@ function gen_vm($def, $skel) {
|
|||
gen_executor($f, $skl, ZEND_VM_SPEC, ZEND_VM_KIND, "execute", "zend_vm_init");
|
||||
|
||||
// Generate zend_vm_get_opcode_handler() function
|
||||
out($f, "\n");
|
||||
out($f, "static const void* ZEND_FASTCALL zend_vm_get_opcode_handler_ex(uint32_t spec, const zend_op* op)\n");
|
||||
out($f, "{\n");
|
||||
if (!ZEND_VM_SPEC) {
|
||||
|
|
|
@ -1534,7 +1534,6 @@ PHP_GEN_GLOBAL_MAKEFILE
|
|||
|
||||
AC_DEFINE([HAVE_BUILD_DEFS_H], 1, [ ])
|
||||
|
||||
$php_shtool mkdir -p pear/scripts
|
||||
$php_shtool mkdir -p scripts
|
||||
$php_shtool mkdir -p scripts/man1
|
||||
|
||||
|
|
|
@ -7,9 +7,7 @@ output_handler=
|
|||
zlib.output_compression=0
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a README.TESTING example.
|
||||
* test5.jpg is a 1*1 image that contains an Exif section with ifd = 00000009h
|
||||
*/
|
||||
// test5.jpg is a 1*1 image that contains an Exif section with ifd = 00000009h
|
||||
$image = exif_read_data(dirname(__FILE__).'/test5.jpg','',true,false);
|
||||
var_dump($image['IFD0']);
|
||||
?>
|
||||
|
|
|
@ -23,9 +23,9 @@ print_r(count($status['scripts']) > 0);
|
|||
--EXPECTF--
|
||||
Array
|
||||
(
|
||||
[0] => C:\path\to\foo
|
||||
[1] => C:\path\to\foo2
|
||||
[2] => C:\path\to\bar
|
||||
[0] => %c:\path\to\foo
|
||||
[1] => %c:\path\to\foo2
|
||||
[2] => %c:\path\to\bar
|
||||
[3] => __DIR__\blacklist.inc
|
||||
[4] => __DIR__\current.php
|
||||
[5] => %scurrent.php
|
||||
|
|
|
@ -178,7 +178,9 @@ static void zend_hash_clone_methods(HashTable *ht, HashTable *source, zend_class
|
|||
new_entry->prototype = ARENA_REALLOC(new_entry->prototype);
|
||||
}
|
||||
}
|
||||
if (IN_ARENA(ZEND_MAP_PTR(new_entry->run_time_cache))) {
|
||||
ZEND_MAP_PTR_INIT(new_entry->run_time_cache, ARENA_REALLOC(ZEND_MAP_PTR(new_entry->run_time_cache)));
|
||||
}
|
||||
ZEND_MAP_PTR_INIT(new_entry->static_variables_ptr, &new_entry->static_variables);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
.deps
|
||||
*.lo
|
||||
*.la
|
||||
.libs
|
||||
|
|
|
@ -12,9 +12,6 @@ echo "sodium extension is available";
|
|||
text in the --EXPECT-- section below for the tests
|
||||
to pass, differences between the output and the
|
||||
expected text are interpreted as failure
|
||||
|
||||
see php7/README.TESTING for further information on
|
||||
writing regression tests
|
||||
*/
|
||||
?>
|
||||
--EXPECT--
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
Testing str_shuffle.
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a README.TESTING example. */
|
||||
$s = '123';
|
||||
var_dump(str_shuffle($s));
|
||||
var_dump($s);
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
Test whether strstr() and strrchr() are binary safe.
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a README.TESTING example. */
|
||||
$s = "alabala nica".chr(0)."turska panica";
|
||||
var_dump(strstr($s, "nic"));
|
||||
var_dump(strrchr($s," nic"));
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
strtr() function
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a README.TESTING example. */
|
||||
$trans = array("hello"=>"hi", "hi"=>"hello", "a"=>"A", "world"=>"planet");
|
||||
var_dump(strtr("# hi all, I said hello world! #", $trans));
|
||||
?>
|
||||
|
|
|
@ -17,6 +17,7 @@ if (PHP_TIDY != "no") {
|
|||
EXTENSION("tidy", "tidy.c");
|
||||
AC_DEFINE('HAVE_TIDY', 1, 'Have TIDY library');
|
||||
AC_DEFINE('HAVE_TIDY_H', 1, "tidy include header")
|
||||
AC_DEFINE('HAVE_TIDYOPTGETDOC', 1, "tidy_get_opt_doc function")
|
||||
AC_DEFINE('HAVE_TIDYRELEASEDATE', 1, "tidy release date function")
|
||||
ADD_FLAG('CFLAGS_TIDY', '/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1');
|
||||
if (!PHP_TIDY_SHARED) {
|
||||
|
|
|
@ -11,7 +11,7 @@ SED="@SED@"
|
|||
|
||||
FILES_BUILD="mkdep.awk scan_makefile_in.awk shtool libtool.m4 ax_check_compile_flag.m4 ax_gcc_func_attribute.m4 php_cxx_compile_stdcxx.m4"
|
||||
FILES="acinclude.m4 Makefile.global config.sub config.guess ltmain.sh run-tests*.php"
|
||||
CLEAN_FILES="$FILES *.o *.lo *.la .deps .libs/ build/ modules/ install-sh \
|
||||
CLEAN_FILES="$FILES *.o *.lo *.la .libs/ build/ modules/ install-sh \
|
||||
mkinstalldirs missing config.nice config.sub config.guess configure configure.ac \
|
||||
aclocal.m4 config.h config.h.in conftest* ltmain.sh libtool config.cache autom4te.cache/ \
|
||||
config.log config.status Makefile Makefile.fragments Makefile.objects confdefs.h \
|
||||
|
|
|
@ -195,7 +195,6 @@ PHP_GEN_BUILD_DIRS
|
|||
PHP_GEN_GLOBAL_MAKEFILE
|
||||
|
||||
test -d modules || $php_shtool mkdir modules
|
||||
touch .deps
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
timestamp
|
|
@ -5,10 +5,14 @@ Bug #74815 crash with a combination of INI entries at startup
|
|||
|
||||
$php = getenv("TEST_PHP_EXECUTABLE");
|
||||
|
||||
echo shell_exec("$php -n -d error_log=errors.log -d error_reporting=E_ALL -d log_errors=On -d track_errors=On -v");
|
||||
echo shell_exec("$php -n -d error_log=".__DIR__."/error_log.tmp -d error_reporting=E_ALL -d log_errors=On -d track_errors=On -v");
|
||||
|
||||
?>
|
||||
==DONE==
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(__DIR__.'/error_log.tmp');
|
||||
?>
|
||||
--EXPECTF--
|
||||
Deprecated: Directive 'track_errors' is deprecated in Unknown on line 0
|
||||
%A
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue