Skip to content

AOT: integer subtraction overflow promotes to float (#32422) - #32424

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-32422-int-sub-overflow
Aug 18, 2026
Merged

AOT: integer subtraction overflow promotes to float (#32422)#32424
PurHur merged 1 commit into
masterfrom
agent/issue-32422-int-sub-overflow

Conversation

@PurHur

@PurHur PurHur commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • Native-long - used LLVM sub nsw and wrapped (PHP_INT_MIN - 1int(PHP_INT_MAX)). Zend sub_function / fast_long_sub_function promotes to double (Zend/zend_operators.h).
  • Extends #31964 JitLongArithOverflow to TYPE_MINUS (portable sign-bit overflow: operand signs differ and wrapping result sign differs from op1). Const-fold uses PHP native $a - $b. Folded integer constants use int64 (constantFromInteger(..., 'long') is not a mapped LLVM type).
  • No new runtime/*.c.

Closes #32422

Test plan

  • ./script/docker-exec.sh -- bash -lc 'export PHP_COMPILER_HELPER_RUNTIME_O=0 PHP_COMPILER_HELPER_RUNTIME_CACHE_DIR=/tmp/phpc-32422-aot-smoke; mkdir -p /tmp/phpc-32422-aot-smoke; ./script/aot-smoke.sh'
    aot-smoke: 8 passed, 0 failed
    
  • ./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/issue_int_sub_overflow.php'
    float(-9.223372036854776E+18)
    float(-9.223372036854776E+18)
    float(9.223372036854776E+18)
    int(7)
    
  • ./script/docker-exec.sh -- bash -lc 'export PHP_COMPILER_HELPER_RUNTIME_O=0 PHP_COMPILER_HELPER_RUNTIME_CACHE_DIR=/tmp/phpc-32422-repro PHP_COMPILER_LLVM_ASSERT=1; mkdir -p /tmp/phpc-32422-repro; php bin/compile.php -o /tmp/iso.bin test/repro/issue_int_sub_overflow.php && /tmp/iso.bin'
    same four lines as VM / Zend
  • ./script/phpunit.sh --filter 'IntSubOverflowPromote32422|IntArithOverflowPromote31964'
    OK (4 tests, 14 assertions)
    

Not covered: full ci-local.sh / north-star5-verify --strict / compliance suites.

Made with Cursor

Native-long minus wrapped with LLVM sub nsw; Zend promotes via fast_long_sub_function. Extend #31964 JitLongArithOverflow to TYPE_MINUS.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit d061aef into master Aug 18, 2026
1 check failed
@PurHur
PurHur deleted the agent/issue-32422-int-sub-overflow branch August 18, 2026 22:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AOT: integer subtraction overflow wraps instead of promoting to float — leftover of #31964 (Zend/zend_operators.h fast_long_sub_function)

1 participant