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):
|
GasMeter(EVMDialect const& _dialect, bool _isCreation, size_t _runs):
|
||||||
m_dialect(_dialect),
|
m_dialect(_dialect),
|
||||||
m_isCreation{_isCreation},
|
m_isCreation{_isCreation},
|
||||||
m_runs(_runs)
|
m_runs(_isCreation? 1 : _runs)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/// @returns the full combined costs of deploying and evaluating the expression.
|
/// @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