Skip to content

Commit 843b813

Browse files
committed
Repro test
1 parent c542e35 commit 843b813

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

scripts/common/cmdline_helpers.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,21 @@ def f(*args, **kwargs):
3737
return tmp_dir_decorator
3838

3939

40-
def solc_bin_report(solc_binary: str, input_files: List[Path], via_ir: bool) -> FileReport:
40+
def solc_bin_report(solc_binary: str,
41+
input_files: List[Path],
42+
via_ir: bool,
43+
optimize: bool = False,
44+
yul_optimizations: Optional[str] = None) -> FileReport:
4145
"""
4246
Runs the solidity compiler binary
4347
"""
4448

4549
output = subprocess.check_output(
4650
[solc_binary, '--bin'] +
4751
input_files +
48-
(['--via-ir'] if via_ir else []),
52+
(['--via-ir'] if via_ir else []) +
53+
(['--optimize'] if optimize else []) +
54+
(['--yul-optimizations', yul_optimizations] if yul_optimizations else []),
4955
encoding='utf8',
5056
)
5157
return parse_cli_output('', output, 0)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
==== Source: A.sol ====
2+
contract DummyContract1 {}
3+
contract DummyContract2 {}
4+
contract DummyContract3 {}
5+
contract DummyContract4 {}
6+
contract DummyContract5 {}
7+
8+
==== Source: B.sol ====
9+
contract C {
10+
function f(uint8 a_0, uint8 a_1, uint8 a_2) public pure {
11+
a_0 = 0;
12+
a_1 = 1;
13+
a_2 = 2;
14+
}
15+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env python3
2+
3+
import os
4+
import sys
5+
from pathlib import Path
6+
from textwrap import dedent
7+
8+
# pylint: disable=wrong-import-position
9+
PROJECT_ROOT = Path(__file__).parents[3]
10+
sys.path.insert(0, str(PROJECT_ROOT / 'scripts'))
11+
12+
from common.cmdline_helpers import add_preamble
13+
from common.cmdline_helpers import inside_temporary_dir
14+
from common.cmdline_helpers import save_bytecode
15+
from common.cmdline_helpers import solc_bin_report
16+
from common.git_helpers import git_diff
17+
from splitSources import split_sources
18+
19+
20+
@inside_temporary_dir(Path(__file__).parent.name)
21+
def test_bytecode_equivalence():
22+
source_file_path = Path(__file__).parent / 'inputs.sol'
23+
split_sources(source_file_path, suppress_output=True)
24+
add_preamble(Path.cwd())
25+
26+
solc_binary = os.environ.get('SOLC')
27+
if solc_binary is None:
28+
raise RuntimeError(dedent("""\
29+
`solc` compiler not found.
30+
Please ensure you set the SOLC environment variable
31+
with the correct path to the compiler's binary.
32+
"""))
33+
34+
# Repro for https://github.com/ethereum/solidity/issues/14829
35+
save_bytecode(Path('A.bin'),
36+
solc_bin_report(solc_binary,
37+
[Path('A.sol')],
38+
via_ir=True,
39+
optimize=True,
40+
yul_optimizations='a:'),
41+
contract='B')
42+
save_bytecode(Path('AB.bin'),
43+
solc_bin_report(solc_binary,
44+
[Path('A.sol'),
45+
Path('B.sol')],
46+
via_ir=True, optimize=True,
47+
yul_optimizations='a:'),
48+
contract='B')
49+
return git_diff(Path('A.bin'), Path('AB.bin'))
50+
51+
52+
if __name__ == '__main__':
53+
sys.exit(test_bytecode_equivalence())

0 commit comments

Comments
 (0)