mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix small bug in GasMeter calculation in creation context
Old calculation did not ignore `optimize-runs` parameter, when creation code gas computations were done. This would lead to expanding values such as `shl(180, 1)` inside constructor code, even for the default value for `--optimize-runs`, i.e., 200.
This commit is contained in:
parent
35da404ca9
commit
6d9e9e1b1e
@ -43,7 +43,7 @@ public:
|
||||
GasMeter(EVMDialect const& _dialect, bool _isCreation, size_t _runs):
|
||||
m_dialect(_dialect),
|
||||
m_isCreation{_isCreation},
|
||||
m_runs(_runs)
|
||||
m_runs(_isCreation? 1 : _runs)
|
||||
{}
|
||||
|
||||
/// @returns the full combined costs of deploying and evaluating the expression.
|
||||
|
1
test/cmdlineTests/constant_optimizer_yul/args
Normal file
1
test/cmdlineTests/constant_optimizer_yul/args
Normal file
@ -0,0 +1 @@
|
||||
--optimize --ir-optimized --optimize-runs 1000000
|
1
test/cmdlineTests/constant_optimizer_yul/err
Normal file
1
test/cmdlineTests/constant_optimizer_yul/err
Normal file
@ -0,0 +1 @@
|
||||
|
16
test/cmdlineTests/constant_optimizer_yul/input.sol
Normal file
16
test/cmdlineTests/constant_optimizer_yul/input.sol
Normal file
@ -0,0 +1,16 @@
|
||||
// SPDX-License-Identifier: GPL-v3
|
||||
pragma solidity >= 0.0.0;
|
||||
contract C {
|
||||
constructor () {
|
||||
assembly {
|
||||
// This shl should not be evaluated for all values of optimize-runs
|
||||
sstore(0, shl(180, 1))
|
||||
}
|
||||
}
|
||||
fallback() external {
|
||||
assembly {
|
||||
// This shl would be evaluated for high values of optimize-runs
|
||||
sstore(0, shl(180, 1))
|
||||
}
|
||||
}
|
||||
}
|
30
test/cmdlineTests/constant_optimizer_yul/output
Normal file
30
test/cmdlineTests/constant_optimizer_yul/output
Normal file
@ -0,0 +1,30 @@
|
||||
Optimized IR:
|
||||
/*******************************************************
|
||||
* WARNING *
|
||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
||||
* It can result in LOSS OF FUNDS or worse *
|
||||
* !USE AT YOUR OWN RISK! *
|
||||
*******************************************************/
|
||||
|
||||
object "C_12" {
|
||||
code {
|
||||
{
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
sstore(0, shl(180, 1))
|
||||
let _1 := datasize("C_12_deployed")
|
||||
codecopy(0, dataoffset("C_12_deployed"), _1)
|
||||
return(0, _1)
|
||||
}
|
||||
}
|
||||
object "C_12_deployed" {
|
||||
code {
|
||||
{
|
||||
mstore(64, 128)
|
||||
if callvalue() { revert(0, 0) }
|
||||
sstore(0, 0x1000000000000000000000000000000000000000000000)
|
||||
stop()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user