diff --git a/.appveyor.yml b/.appveyor.yml index bfb45e5e9a6..f7e1c5c0e67 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -18,7 +18,6 @@ clone_depth: 64 cache: - c:\build-cache - - c:\build-cache\sdk -> .appveyor.yml environment: PHP_BUILD_CACHE_BASE_DIR: c:\build-cache diff --git a/appveyor/build.bat b/appveyor/build.bat index 8141face827..dfef6161643 100644 --- a/appveyor/build.bat +++ b/appveyor/build.bat @@ -2,6 +2,7 @@ set SDK_REMOTE=https://github.com/OSTC/php-sdk-binary-tools.git set SDK_BRANCH=%PHP_BUILD_SDK_BRANCH% +set SDK_RUNNER=%PHP_BUILD_CACHE_SDK_DIR%\phpsdk-%PHP_BUILD_CRT%-%PLATFORM%.bat if not exist "%PHP_BUILD_CACHE_BASE_DIR%" ( echo Creating %PHP_BUILD_CACHE_BASE_DIR% @@ -13,17 +14,25 @@ if not exist "%PHP_BUILD_OBJ_DIR%" ( mkdir "%PHP_BUILD_OBJ_DIR%" ) +if not exist "%SDK_RUNNER%" ( + if exist "%PHP_BUILD_CACHE_SDK_DIR%" rmdir /s /q "%PHP_BUILD_CACHE_SDK_DIR%" +) + if not exist "%PHP_BUILD_CACHE_SDK_DIR%" ( echo Cloning remote SDK repository git clone --branch %SDK_BRANCH% %SDK_REMOTE% "%PHP_BUILD_CACHE_SDK_DIR%" 2>&1 -) else ( +) + +for /f "tokens=*" %%a in ('type %PHP_BUILD_CACHE_SDK_DIR%\VERSION') do set GOT_SDK_VER=%%a +echo Got SDK version %GOT_SDK_VER% +if NOT "%GOT_SDK_VER%" == "%PHP_BUILD_SDK_BRANCH:~8%" ( + echo Switching to the configured SDK version %SDK_BRANCH:~8% echo Fetching remote SDK repository git --git-dir="%PHP_BUILD_CACHE_SDK_DIR%\.git" --work-tree="%PHP_BUILD_CACHE_SDK_DIR%" fetch --prune origin 2>&1 echo Checkout SDK repository branch git --git-dir="%PHP_BUILD_CACHE_SDK_DIR%\.git" --work-tree="%PHP_BUILD_CACHE_SDK_DIR%" checkout --force %SDK_BRANCH% ) -set SDK_RUNNER=%PHP_BUILD_CACHE_SDK_DIR%\phpsdk-%PHP_BUILD_CRT%-%PLATFORM%.bat if not exist "%SDK_RUNNER%" ( echo "%SDK_RUNNER%" doesn't exist exit /b 3 diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index e108b7a4dd8..943620cf118 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -3083,7 +3083,12 @@ static int zend_update_type_info(const zend_op_array *op_array, } j = zend_ssa_next_use(ssa_ops, ssa_ops[i].result_def, j); } - UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); + if ((tmp & MAY_BE_ARRAY) && (tmp & MAY_BE_ARRAY_KEY_ANY)) { + UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); + } else { + /* invalid key type */ + UPDATE_SSA_TYPE(t1, ssa_ops[i].op1_def); + } COPY_SSA_OBJ_TYPE(ssa_ops[i].op1_use, ssa_ops[i].op1_def); } /* FETCH_LIST on a string behaves like FETCH_R on null */ diff --git a/ext/opcache/tests/ssa_bug_009.phpt b/ext/opcache/tests/ssa_bug_009.phpt new file mode 100644 index 00000000000..a6248ff5bdd --- /dev/null +++ b/ext/opcache/tests/ssa_bug_009.phpt @@ -0,0 +1,19 @@ +--TEST-- +Incorrect type inference +--FILE-- + +OK +--EXPECT-- +OK