mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Yul IR: Change evaluation order for operands of binary operators.
This commit is contained in:
parent
b2ffa91058
commit
664bf300fe
@ -8,6 +8,7 @@ Compiler Features:
|
||||
|
||||
Bugfixes:
|
||||
* Control Flow Graph: Fix incorrectly reported unreachable code.
|
||||
* Yul IR Code Generator: Change the evaluation order for binary expressions to right-hand-side first.
|
||||
|
||||
|
||||
|
||||
|
||||
@ -745,8 +745,8 @@ bool IRGeneratorForStatements::visit(BinaryOperation const& _binOp)
|
||||
return false; // skip sub-expressions
|
||||
}
|
||||
|
||||
_binOp.leftExpression().accept(*this);
|
||||
_binOp.rightExpression().accept(*this);
|
||||
_binOp.leftExpression().accept(*this);
|
||||
setLocation(_binOp);
|
||||
|
||||
if (TokenTraits::isCompareOp(op))
|
||||
|
||||
@ -217,53 +217,53 @@ object "C_81" {
|
||||
let zero_t_uint256_4 := zero_value_for_split_t_uint256()
|
||||
var__19 := zero_t_uint256_4
|
||||
|
||||
let expr_23 := 0x02
|
||||
let _5 := var_a_4
|
||||
let expr_24 := _5
|
||||
let expr_23 := 0x02
|
||||
let _6 := convert_t_rational_2_by_1_to_t_uint256(expr_23)
|
||||
let expr_25 := checked_exp_t_rational_2_by_1_t_uint256(expr_24)
|
||||
let var_w_22 := expr_25
|
||||
let _7 := var_b_6
|
||||
let expr_32 := _7
|
||||
let expr_29 := 0x02
|
||||
let expr_30 := 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
|
||||
let expr_31 := expr_30
|
||||
let _7 := var_b_6
|
||||
let expr_32 := _7
|
||||
let _8 := convert_t_rational_minus_2_by_1_to_t_int256(expr_31)
|
||||
let expr_33 := checked_exp_t_rational_minus_2_by_1_t_uint256(expr_32)
|
||||
let var_x_28 := expr_33
|
||||
let expr_37 := 0x0a
|
||||
let _9 := var_c_8
|
||||
let expr_38 := _9
|
||||
let expr_37 := 0x0a
|
||||
let _10 := convert_t_rational_10_by_1_to_t_uint256(expr_37)
|
||||
let expr_39 := checked_exp_t_rational_10_by_1_t_uint256(expr_38)
|
||||
let var_y_36 := expr_39
|
||||
let expr_47 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
let expr_48 := expr_47
|
||||
let _11 := var_d_10
|
||||
let expr_49 := _11
|
||||
let expr_47 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
let expr_48 := expr_47
|
||||
let _12 := convert_t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1_to_t_uint256(expr_48)
|
||||
let expr_50 := checked_exp_t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1_t_uint256(expr_49)
|
||||
let var_z_42 := expr_50
|
||||
let expr_53 := 0x00
|
||||
let expr_54 := expr_53
|
||||
let _13 := var_a_4
|
||||
let expr_55 := _13
|
||||
let expr_53 := 0x00
|
||||
let expr_54 := expr_53
|
||||
let _14 := convert_t_rational_0_by_1_to_t_uint256(expr_54)
|
||||
let expr_56 := checked_exp_t_rational_0_by_1_t_uint256(expr_55)
|
||||
var_w_22 := expr_56
|
||||
let expr_57 := expr_56
|
||||
let _15 := var_b_6
|
||||
let expr_63 := _15
|
||||
let expr_60 := 0x01
|
||||
let expr_61 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
let expr_62 := expr_61
|
||||
let _15 := var_b_6
|
||||
let expr_63 := _15
|
||||
let _16 := convert_t_rational_minus_1_by_1_to_t_int256(expr_62)
|
||||
let expr_64 := checked_exp_t_rational_minus_1_by_1_t_uint256(expr_63)
|
||||
var_x_28 := expr_64
|
||||
let expr_65 := expr_64
|
||||
let expr_68 := 0x01
|
||||
let _17 := var_c_8
|
||||
let expr_69 := _17
|
||||
let expr_68 := 0x01
|
||||
let _18 := convert_t_rational_1_by_1_to_t_uint256(expr_68)
|
||||
let expr_70 := checked_exp_t_rational_1_by_1_t_uint256(expr_69)
|
||||
var_y_36 := expr_70
|
||||
|
||||
@ -83,8 +83,8 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
// compileToEwasm: also
|
||||
// compileViaYul: true
|
||||
// ----
|
||||
// preincr_s8(int8): 128 -> FAILURE
|
||||
// postincr_s8(int8): 128 -> FAILURE
|
||||
@ -106,16 +106,16 @@ contract C {
|
||||
// postincr_u8(uint8): 254 -> FAILURE, hex"4e487b71", 0x11
|
||||
// predecr_u8(uint8): 0 -> FAILURE, hex"4e487b71", 0x11
|
||||
// postdecr_u8(uint8): 0 -> FAILURE, hex"4e487b71", 0x11
|
||||
// predecr_u8(uint8): 1 -> 0
|
||||
// postdecr_u8(uint8): 1 -> 1
|
||||
// preincr_u8(uint8): 2 -> 6
|
||||
// postincr_u8(uint8): 2 -> 5
|
||||
// predecr_u8(uint8): 2 -> 2
|
||||
// postdecr_u8(uint8): 2 -> 3
|
||||
// preincr(uint256): 2 -> 6
|
||||
// postincr(uint256): 2 -> 5
|
||||
// predecr(uint256): 2 -> 2
|
||||
// postdecr(uint256): 2 -> 3
|
||||
// predecr_u8(uint8): 1 -> 1
|
||||
// postdecr_u8(uint8): 1 -> 2
|
||||
// preincr_u8(uint8): 2 -> 5
|
||||
// postincr_u8(uint8): 2 -> 4
|
||||
// predecr_u8(uint8): 2 -> 3
|
||||
// postdecr_u8(uint8): 2 -> 4
|
||||
// preincr(uint256): 2 -> 5
|
||||
// postincr(uint256): 2 -> 4
|
||||
// predecr(uint256): 2 -> 3
|
||||
// postdecr(uint256): 2 -> 4
|
||||
// not(bool): true -> false
|
||||
// not(bool): false -> true
|
||||
// bitnot(int256): 5 -> -6
|
||||
|
||||
Loading…
Reference in New Issue
Block a user