mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-04-22 05:38:00 +00:00
llvm-context: fix off-by-one in SDIV overflow semantics (#398)
- Fix the wrong predicate (the negative side in 2s complement has one more bit) - Increase test coverage Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
+4
-1
@@ -6,9 +6,12 @@ This is a development pre-release.
|
||||
|
||||
Supported `polkadot-sdk` rev: `2509.0.0`
|
||||
|
||||
### Chnaged
|
||||
### Changed
|
||||
- Emulated EVM heap memory accesses of zero length are never out of bounds.
|
||||
|
||||
### Fixed
|
||||
- An off-by-one bug cusing incorrect `SDIV` overflow semantics.
|
||||
|
||||
## v0.4.1
|
||||
|
||||
This is a development pre-release.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"Baseline": 914,
|
||||
"Computation": 2295,
|
||||
"DivisionArithmetics": 14510,
|
||||
"DivisionArithmetics": 14496,
|
||||
"ERC20": 17482,
|
||||
"Events": 1674,
|
||||
"FibonacciIterative": 1490,
|
||||
|
||||
@@ -169,6 +169,8 @@ fn signed_division() {
|
||||
(minus_five, two),
|
||||
(I256::MINUS_ONE, I256::MIN),
|
||||
(one, I256::ZERO),
|
||||
(I256::MIN, I256::MINUS_ONE),
|
||||
(I256::MIN + I256::ONE, I256::MINUS_ONE),
|
||||
] {
|
||||
actions.push(Call {
|
||||
origin: TestAddress::Alice,
|
||||
|
||||
@@ -92,7 +92,7 @@ impl RuntimeFunction for SignedDivision {
|
||||
"max_uint",
|
||||
)?;
|
||||
let is_operand_1_overflow = context.builder().build_int_compare(
|
||||
inkwell::IntPredicate::EQ,
|
||||
inkwell::IntPredicate::SLT,
|
||||
operand_1,
|
||||
context.builder().build_int_neg(max_uint, "min_uint")?,
|
||||
"is_operand_1_overflow",
|
||||
|
||||
Reference in New Issue
Block a user