Commit Graph

1329 Commits

Author SHA1 Message Date
chriseth
0112fed73b Yul: Fix cleanup for left shift of bytes types. 2021-08-05 10:54:48 +02:00
chriseth
467cbf92bc Only provide code generator to CodeTransform. 2021-08-04 18:38:10 +02:00
chriseth
ae519c1278
Merge pull request #11658 from ethereum/removeScannerFromCompilerStack
Remove scanner from compiler stack
2021-08-03 17:47:39 +02:00
Christian Parpart
6294aa871a Simplify AsmParser::parse(.) usage 2021-08-03 15:43:17 +02:00
chriseth
ffc5cfd9a5 Remove scanner from compiler stack. 2021-08-03 15:43:17 +02:00
Mathias Baumann
2ee6c7be64 Print @src and @use-src locations in AsmPrinter 2021-08-03 15:29:52 +02:00
Kamil Śliwak
6d6c9e6e4f
Merge pull request #11660 from ethereum/docs-fix-badly-indented-lists-and-blocks
[Docs] Fix badly indented lists and blocks
2021-07-21 18:35:19 +02:00
Mathias Baumann
bf204403d8 Add "@use-src" header for generated yul code 2021-07-15 14:26:01 +02:00
Marenz
57db4c82ba Fix: Use correct byte offset separation
":" instead of ","
2021-07-15 13:15:21 +02:00
Kamil Śliwak
ce79e2515b docs: Fix badly indented lists 2021-07-15 10:13:30 +02:00
Kamil Śliwak
6753c8f624 Rename escapeAndQuoteYulString() back to escapeAndQuoteString() 2021-07-14 21:29:01 +02:00
chriseth
f75b55071e Remove CharStream from SourceLocation. 2021-07-14 15:12:07 +02:00
Daniel Kirchner
0a6fc89da2 Fix negation function name collision. 2021-07-08 10:47:29 +02:00
chriseth
54b1c667f1
Merge pull request #11595 from ethereum/issue-11526
Fix yul codegen bug when using binary negation.
2021-06-30 11:55:42 +02:00
Mathias Baumann
c47d02066c Fix yul codegen bug when using binary negatition. 2021-06-29 17:41:03 +02:00
chriseth
eaac16c779
Merge pull request #11590 from ethereum/disallow-non-hex-zero-and-fix-bytes32-literals-in-bytes-concat
Disallow non-hex zero literals and fix 32-byte hex literals in `bytes.concat()`
2021-06-29 16:34:26 +02:00
Kamil Śliwak
6a50d088a0 Fix ICE for 32-byte hex literals and zero literals in bytes.concat() by disallowing them 2021-06-29 14:48:42 +02:00
Kamil Śliwak
fa3696878b Fix crash when passing empty strings to bytes.concat() 2021-06-29 13:52:01 +02:00
Kamil Śliwak
19fada966f Do not use \b, \v and \f escapes in string literals in generated Yul code 2021-06-28 14:13:47 +02:00
Kamil Śliwak
ca0b1bf3f3 Fix crash when passing zero to bytes.concat() 2021-06-25 21:26:28 +02:00
Alexander Arlt
8accf420ea [yul] Functions: Remove dependency on AST ID. 2021-06-23 16:15:25 +02:00
Kamil Śliwak
98e83303b1 Remove assertions preventing calldata->calldata conversion when cleanup is needed 2021-06-22 16:10:16 +02:00
Djordje Mijovic
838f59fa5b Adding origin location notation to yul ir. 2021-06-21 18:48:20 +02:00
chriseth
0df8a38e55 Support metadata via IR. 2021-06-21 18:20:31 +02:00
Mathias Baumann
d7d64c3db5 IR Codegen: Small refactoring & comment fixes 2021-06-14 13:35:53 +02:00
chriseth
7d8a4e63d8
Merge pull request #11491 from TerranCivilian/fix-10269
Remove unneeded include files
2021-06-07 20:15:20 +02:00
TerranCivilian
c15501eea9 Remove unneeded include files 2021-06-07 12:53:18 -04:00
Mathias Baumann
6a0313c456 Unify function call resolve function used in Analysis & Yul CodeGen 2021-06-07 15:23:32 +02:00
chriseth
c55d173a28
Merge pull request #11479 from ethereum/fix-ice-when-assigning-implicitly-convertible-function-array-to-storage
Fix ICE when assigning implicitly convertible function array to storage
2021-06-03 10:52:21 +02:00
chriseth
93936129f1
Merge pull request #11476 from ethereum/fix-ice-on-library-bound-to-literal
Fix ICE in IR when a library is bound to a literal
2021-06-03 08:58:00 +02:00
Kamil Śliwak
ccf658b0e8 Fix assertion preventing assignment of arrays of implicitly convertible function types 2021-06-03 08:56:02 +02:00
Kamil Śliwak
67e87147b4 Extra asserts, test renaming, test for super in modifiers 2021-06-02 16:15:51 +02:00
Kamil Śliwak
3c7112ed2b Remove the assertion against functions bound to types for which should not be possible
- The list was wrong - we do support string and int literals
- The assertion was meant to guard against silently skipping over types for which there is no special handling. The current code handles everything in a generic way though and likely will not have to be adjusted for newly added types so the risk of that happening is low.
2021-06-02 13:59:42 +02:00
chriseth
0623658ddd Properly set source location of bare blocks. 2021-05-31 18:28:17 +02:00
Djordje Mijovic
17eaa11657 [Sol->Yul] Adding assertion in order to give better error messages for fixed point types. 2021-05-31 15:54:37 +02:00
chriseth
29a995b937
Merge pull request #11433 from ethereum/panic-dedup
Insert a call to panic function in legacy codegen (and not inline it every single time)
2021-05-31 11:23:30 +02:00
Alex Beregszaszi
c436785686 Insert a call to panic function in legacy codegen (and not inline it every single time) 2021-05-27 18:29:46 +01:00
chriseth
d305c219d8 Fix namespace styles. 2021-05-27 17:41:04 +02:00
Alex Beregszaszi
bf2c82adca Document the panic function of library deployment 2021-05-26 15:51:46 +01:00
Alex Beregszaszi
6dae6583af Turn toCompactHexWithPrefix into a template and support unsigned types
This should help with boost::multiprecision versions where explicit unsigned/enum conversion to bigint do not exists (such as boost 1.76)
2021-05-15 23:33:29 +01:00
Daniel Kirchner
c69add1682 Remove import of ranges namespace. 2021-05-07 13:44:14 +02:00
chriseth
518629a8f6
Merge pull request #10768 from ethereum/copyLiteralToStorageSol2Yul
[Sol->Yul] Adding util function to copy literal to storage.
2021-05-06 10:44:39 +02:00
Djordje Mijovic
f0c5cdca9f [Sol->Yul] Adding util function to copy literal to storage.
Co-authored-by: Daniel Kirchner <daniel@ekpyron.org>

Co-authored-by: chriseth <chris@ethereum.org>
2021-05-05 11:33:03 +02:00
chriseth
72fc4d4a32 Introduce ceil division helper function. 2021-05-05 11:12:10 +02:00
chriseth
9d156b52c4
Merge pull request #8868 from ethereum/functionEntryPoints
Note function entry points.
2021-05-05 11:08:44 +02:00
Djordje Mijovic
3e5f5fccf9 [Sol->Yul] Adding cleanUpArrayEnd util function.
Co-authored-by: chriseth <chris@ethereum.org>

Co-authored-by: Alex Beregszaszi <alex@rtfs.hu>

Co-authored-by: Kamil Śliwak <kamil.sliwak@codepoets.it>

Co-authored-by: Alex Beregszaszi <alex@rtfs.hu>

Co-authored-by: Kamil Śliwak <kamil.sliwak@codepoets.it>
2021-05-05 08:53:34 +02:00
chriseth
f9c94d7c42 Note function entry points. 2021-05-04 17:15:13 +02:00
chriseth
faca036837
Merge pull request #11294 from ethereum/yulAstDebugDataRefactor
Removing location in favor of debugData in yul AST structures
2021-05-04 17:05:40 +02:00
Djordje Mijovic
e404b6e7a6 Refactoring yul source locations. 2021-05-04 16:05:23 +02:00
chriseth
62355aead3 Respect memory model for revert. 2021-05-03 18:23:41 +02:00
chriseth
d721bbe504 Respect memory model in forwarding revert inside catch. 2021-05-03 12:19:46 +02:00
chriseth
79acebe46f Allocate for returning runtime code. 2021-04-29 16:40:51 +02:00
chriseth
b06a09fd82 Fix forwarding revert. 2021-04-29 14:58:10 +02:00
Alex Beregszaszi
9d5b4150d4 Throw StackTooDeep earlier (with sourcelocatiom) for inline assembly issues 2021-04-26 20:11:50 +01:00
chriseth
659da4bdc7
Merge pull request #11047 from ethereum/bytesToBytesNNConversion
Bytes to bytesNN conversion
2021-04-26 11:51:41 +02:00
Alex Beregszaszi
e39433198d Remove the usage of boost::noncopyable
Prior to this half of the codebase used explicit deleted copy constructors, the others used boost::noncopyable.
2021-04-23 14:57:01 +01:00
Djordje Mijovic
cbb7e53b22 Activating bytes to bytesNN for legacy codegen by calling yul util function. 2021-04-23 13:30:19 +02:00
Djordje Mijovic
52538558b1 [Sol->Yul] Implementing bytes to bytesNN for IR codegen.
Co-authored-by: Alex Beregszaszi <alex@rtfs.hu>
2021-04-23 13:30:15 +02:00
hrkrshnn
1f5b874eaf Optimizer context has parameter expectedExecutionsPerDeployment 2021-04-22 17:27:57 +02:00
Djordje Mijovic
3a4233f3ad [Sol->Yul] Adding bounds check when increasing size of byte array. 2021-04-22 11:42:46 +02:00
Djordje Mijovic
0dd59fa0a2 [Sol->Yul] Remove index access from byte array pop function to optimize it. 2021-04-21 11:01:18 +02:00
chriseth
72d0a56a72 Fix array decoding offset overflow. 2021-04-12 13:43:51 +02:00
chriseth
32b8332867 Refactor array decoding. 2021-04-12 13:43:51 +02:00
chriseth
0cc0cabd30
Merge pull request #11224 from ethereum/lastAllocationUnbounded
Use unbounded allocation before returning.
2021-04-08 19:32:40 +02:00
Daniel Kirchner
96c8123b6b Use unbounded allocation before returning. 2021-04-08 18:37:24 +02:00
anurag4u80
b2ca7916aa Replaced boost::adaptors::transformed 2021-04-08 17:38:14 +05:30
anurag4u80
bbcdddeed9 Replaced keys, values and reverse with ranges 2021-03-31 23:33:04 +05:30
chriseth
d5669696d5 Code generation for errors. 2021-03-30 21:15:46 +02:00
chriseth
b04b189959 Syntax for custom errors. 2021-03-30 21:15:18 +02:00
chriseth
99fcf62736 Extract referencedDeclaration as helper. 2021-03-24 17:01:50 +01:00
Djordje Mijovic
4e75c6c3e8 Implementing bytes.concat for legacy codegen. 2021-03-24 11:49:21 +01:00
Djordje Mijovic
80866d3ee4 [Sol->Yul] Implementing bytes.concat in IR codegen.
Co-authored-by: Daniel Kirchner <daniel@ekpyron.org>
2021-03-24 11:49:21 +01:00
Djordje Mijovic
1493326e48 Adding bytes.concat function type. 2021-03-24 11:49:21 +01:00
Mathias Baumann
e197ebbdd1 Replace TypePointer with Type const* 2021-03-23 11:47:19 +01:00
Djordje Mijovic
49fcda7048 Adding additional interface to yul function collector. 2021-03-15 20:27:16 +01:00
chriseth
5e94fce7df Provide selector for some internal functions. 2021-03-01 16:19:59 +01:00
chriseth
16db3a84f1 Fix call graph with respect to constants. 2021-02-25 16:00:53 +01:00
chriseth
5e9637bc39 Mapping access with multi-slot keys. 2021-02-24 13:44:23 +01:00
chriseth
2d48052ae5
Merge pull request #11003 from ethereum/ir-bug-incorrect-return-variable-count
Fix IR bug on deleting storage variables of function type.
2021-02-24 13:24:31 +01:00
hrkrshnn
2c2c7a4473 Fix IR bug on deleting storage variables of function type.
Calling the zeroing function assumed that the stack slots needed for the type was always 1. This is
false for function types.
2021-02-24 12:43:33 +01:00
chriseth
e33c058a60
Merge pull request #10896 from ethereum/issue-10870
Fix issue with pop on storage array.
2021-02-23 17:49:17 +01:00
chriseth
596e8dd9b6
Merge pull request #10959 from ethereum/assert-too-strict
Loosened up a really strict assert from ABIFunctions.cpp
2021-02-23 14:59:14 +01:00
Alexander Arlt
ae6996efc1 Fix issue with pop on storage array. 2021-02-23 14:26:55 +01:00
chriseth
7d0ecd9406
Merge pull request #10535 from ethereum/removeNumbers
Improve generated names.
2021-02-23 13:29:18 +01:00
chriseth
d586b7b57a
Merge pull request #10991 from ethereum/bareCallNoReturndatacopy
[Sol->Yul] Fix bare call wihout returndatacopy.
2021-02-23 13:24:50 +01:00
Kamil Śliwak
781f00771c Remove IRGenerator::verifyCallGraphs and make generate() verify the graphs automatically 2021-02-23 10:47:02 +01:00
Kamil Śliwak
6c28120f19 Move CallGraph structure to a separate module 2021-02-23 10:47:02 +01:00
Mathias Baumann
4c283f00c1 Add IRGenerator::verifyCallGraphs() 2021-02-23 10:46:28 +01:00
chriseth
e9b3dd21d0 Fix bare call wihout returndatacopy. 2021-02-23 10:45:01 +01:00
Mathias Baumann
64d14b4cc4 IRNames::function(): Return correct name if the function is a constructor 2021-02-23 10:29:12 +01:00
Mathias Baumann
8bacf03ffe MultiUseYulFunctionCollector::requestedFunctions(): Refactor the loop to use destructuring 2021-02-23 10:29:12 +01:00
Alexander Arlt
c44bb7e7ef Replace raw throw with BOOST_THROW_EXCEPTION. 2021-02-18 20:23:59 -05:00
hrkrshnn
2608c56d32 Make an assert less strict
Even though one can convert from, say, a pure function to a function without a state mutability
specified, in ABIFunctions.cpp, there was an assert that checked if the types were exactly equal.
This assert had to be loosened up.
2021-02-17 17:12:02 +01:00
chriseth
54cf56b3a5 Simplify generated names. 2021-02-16 14:20:27 +01:00
hrkrshnn
0135cae222 Fix IR bug: constructor parameter that needs multiple stack slots
When an argument had multiple stack slots, like `function() external`, there wasn't enough variables
assigned for the constructor. This lead to some mismatch between return values and arguments between
some functions.
2021-02-12 17:42:02 +01:00
hrkrshnn
7786e6d561 Fix IR bug when modifier parameter was function return variable
The bug was that function return variables were not part of the m_context.localVariable during
the modifier generation and a looking up them was throwing.
2021-02-11 14:44:55 +01:00
chriseth
1716dcfb57
Merge pull request #10950 from ethereum/removeChecks
[SolYul] Remove (hopefully) unnecessary checks.
2021-02-11 14:10:05 +01:00
chriseth
45dc705683 Remove unnecessary checks. 2021-02-11 13:08:03 +01:00
Harikrishnan Mulackal
215233d5c8
Merge pull request #10945 from ethereum/constructor-modifier-bugfix
Fix IR bug about calling the wrong modifier during construction
2021-02-10 21:42:45 +01:00
hrkrshnn
2f30fdaa21 Fix IR bug about calling the wrong modifier during construction 2021-02-10 20:53:11 +01:00
chriseth
a72ab1c9c1 Replace "runtime" by "deployed" naming. 2021-02-10 00:56:16 +01:00
chriseth
9a621e91e3
Merge pull request #10761 from ethereum/oldOptimizerInlining
Simple inlining for old optimizer.
2021-02-09 19:35:12 +01:00
Daniel Kirchner
cb74a45fd6 Add inlining for old optimizer. 2021-02-09 19:08:58 +01:00
Djordje Mijovic
9438706daf [Sol->Yul] Adding assertion for shift amount not being of FixedPointType. 2021-02-09 17:58:49 +01:00
Djordje Mijovic
993c8c0734 [Sol->Yul] Adding unimplemented assert for fixed point types on right shift. 2021-02-09 16:17:56 +01:00
Đorđe Mijović
4fd5643970
Merge pull request #10912 from ethereum/calldataLValueSol2Yul
[Sol->Yul] Check lvalue kind is stack in case of calldata.
2021-02-08 14:19:24 +01:00
Djordje Mijovic
e53feaedc4 [Sol->Yul] Check lvalue kind is stack in case of calldata. 2021-02-08 13:27:51 +01:00
chriseth
8a876c8f79
Merge pull request #10911 from ethereum/fixedPointAssertionSol2Yul
[Sol->Yul] Adding unimplemented assert for fixed point type shifting.
2021-02-08 13:20:57 +01:00
Djordje Mijovic
97e9829988 [Sol->Yul] Adding unimplemented assert for fixed point type shifting. 2021-02-08 13:13:19 +01:00
Djordje Mijovic
706f5d9874 [Sol2Yul] Fixing setLValue for calldata types. 2021-02-08 12:42:10 +01:00
Djordje Mijovic
530435439d [Sol->Yul] Fixing string calldata to bytes calldata conversion. 2021-02-04 09:30:19 +01:00
chriseth
e9dc9c5baf Fix merge conflict. 2021-01-26 13:53:22 +01:00
chriseth
4697beeab2
Merge pull request #10769 from ethereum/allocationCleanup
Cleanup allocation.
2021-01-26 11:58:11 +01:00
hrkrshnn
526ceec152 Implement IR shortcut for <address>.code.length 2021-01-26 11:07:04 +01:00
hrkrshnn
d6d880dc53 Old codegen: implemented shortcut for <address>.code.length 2021-01-26 11:07:04 +01:00
Alexander Arlt
061fecbc90 [whiskers] Add check that template contain tags. 2021-01-20 15:26:34 -05:00
chriseth
3cc07694ed Cleanup allocation. 2021-01-20 18:25:27 +01:00
chriseth
1fcc76a562 Fix empty packed encoder. 2021-01-19 15:50:04 +01:00
Leonardo
9bde92ca20
Merge pull request #10807 from ethereum/fixIRReasonStrings
Properly omit require revert strings in IR code generator if requested.
2021-01-19 10:31:15 +01:00
chriseth
a3ee334b42 Omit require revert strings in IR code generator. 2021-01-18 18:47:55 +01:00
chriseth
4f3839e4ba Fix abi encode with signature shortcut. 2021-01-18 13:44:52 +01:00
Djordje Mijovic
a0c80c2bdb [Sol->Yul] Enabling copying_bytes_multiassign test via ir. 2021-01-18 12:40:51 +01:00
chriseth
db4b39e09e Round up allocations to multiples of 32. 2021-01-14 21:52:17 +00:00
chriseth
7d6331e26f Use round up function. 2021-01-14 21:01:43 +00:00
Alex Beregszaszi
6ad0ea9f23
Merge pull request #10773 from ethereum/useArrayAllocationFunction
Fix array allocation.
2021-01-14 20:25:31 +00:00
chriseth
f4479fd7ed Fix array allocation. 2021-01-14 19:56:37 +01:00
Alex Beregszaszi
7c7fd22062 Include revert strings in IR 2021-01-14 18:45:12 +01:00
chriseth
7d036dcb81
Merge pull request #10762 from ethereum/packedStorageOverflowSol2Yul
[Sol->Yul] Fixing uncheked increment/decrement.
2021-01-14 15:32:55 +01:00
chriseth
a65415cdad Fix accessing libraries inside modules. 2021-01-14 14:07:08 +01:00
Djordje Mijovic
dc3e76bc2c [Sol->Yul] Fixing uncheked increment/decrement. 2021-01-14 13:46:04 +01:00
chriseth
170cd5d2ae
Merge pull request #10760 from ethereum/asmConstantsFileLevel
Fix accessing constants at file level from inline assembly.
2021-01-14 11:33:47 +01:00
chriseth
8905af28c3
Merge pull request #10759 from ethereum/nestedBytesArraySol2Yul
[Sol->Yul] Fixing nested bytes array push.
2021-01-14 11:33:06 +01:00
chriseth
45be47fc6b
Merge pull request #10756 from ethereum/fixModifierLookup
Fix modifier lookup
2021-01-14 11:28:26 +01:00
chriseth
8ad9290086 Fix modifier lookup. 2021-01-14 11:01:14 +01:00
chriseth
30305ebbd9 Fix accessing constants at file level from inline assembly. 2021-01-14 10:51:47 +01:00
Djordje Mijovic
7c45509a77 [Sol->Yul] Fixing nested bytes array push. 2021-01-14 10:32:31 +01:00
Alex Beregszaszi
c15c6d26b7 Fix YulUtilFunctions::negateNumberWrappingFunction 2021-01-13 21:29:37 +00:00
chriseth
5c453acbe8 Fix encoding of library return values. 2021-01-11 20:37:45 +01:00
chriseth
e807c9bb63 Library call guard. 2021-01-11 20:37:44 +01:00
Djordje Mijovic
85b8325f0b [Sol->Yul] Implementing dynamic array push for arrays of structs. 2021-01-11 17:49:42 +01:00
Djordje Mijovic
b06936b11c [refactor] Move copying struct to storage to it's own util function. 2021-01-11 16:26:14 +01:00
chriseth
994fdb7517 Determine encoding type earlier. 2021-01-11 11:57:22 +01:00
Harikrishnan Mulackal
5241b7b761
Merge pull request #10684 from ethereum/fixIRWrappingExp
Use wrapping arithmetic for exp in unchecked blocks.
2021-01-06 18:53:54 +01:00
Djordje Mijovic
047d693ac9 Refactoring copyLiteralToMemoryFunction and reusing it from other functions.
Co-authored-by: Leonardo <leo@ethereum.org>

Co-authored-by: Alex Beregszaszi <alex@rtfs.hu>
2020-12-30 17:31:20 +01:00
Djordje Mijovic
ddb05769a5 [Sol->Yul] Implementing type name. 2020-12-30 17:19:03 +01:00
chriseth
2ab83217e3 Use wrapping arithmetic for exp in unchecked blocks. 2020-12-22 16:49:55 +01:00
chriseth
04d83af1d2
Merge pull request #10492 from ethereum/arrayClearingDiffBaseSol2Yul
[Sol->Yul] Fixing array clearing when copying from storage to storage.
2020-12-22 15:15:03 +01:00
chriseth
0437ee7ad9 Fix length check when decoding error data. 2020-12-22 11:08:44 +01:00
chriseth
b965446182 Catch panic. 2020-12-22 11:08:44 +01:00
Đorđe Mijović
b78443ac75
Merge pull request #10577 from ethereum/deleteMappingSol2Yul
[Sol->Yul] Skipping mapping types when deleting structs and arrays.
2020-12-21 20:08:51 +01:00