From 41f9aab219c3afab66f7e7ada7fe568e75f31853 Mon Sep 17 00:00:00 2001 From: hrkrshnn Date: Tue, 28 Sep 2021 14:41:57 +0200 Subject: [PATCH] Tests for assembly access of user defined value types. --- .../assembly_access_bytes2_abicoder_v1.sol | 35 +++++++++++++++++++ .../assembly_access_bytes2_abicoder_v2.sol | 35 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v1.sol create mode 100644 test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v2.sol diff --git a/test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v1.sol b/test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v1.sol new file mode 100644 index 000000000..f41a9205d --- /dev/null +++ b/test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v1.sol @@ -0,0 +1,35 @@ +pragma abicoder v1; + +type MyBytes2 is bytes2; + +contract C { + function f(MyBytes2 val) external returns (bytes2 ret) { + assembly { + ret := val + } + } + + function g(bytes2 val) external returns (bytes2 ret) { + assembly { + ret := val + } + } + + function h(uint256 val) external returns (MyBytes2) { + MyBytes2 ret; + assembly { + ret := val + } + return ret; + } + +} +// ==== +// compileViaYul: false +// ---- +// f(bytes2): "ab" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// g(bytes2): "ab" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// f(bytes2): "abcdef" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// g(bytes2): "abcdef" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// h(uint256): "ab" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// h(uint256): "abcdef" -> 0x6162000000000000000000000000000000000000000000000000000000000000 diff --git a/test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v2.sol b/test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v2.sol new file mode 100644 index 000000000..6af03b847 --- /dev/null +++ b/test/libsolidity/semanticTests/userDefinedValueType/assembly_access_bytes2_abicoder_v2.sol @@ -0,0 +1,35 @@ +pragma abicoder v2; + +type MyBytes2 is bytes2; + +contract C { + function f(MyBytes2 val) external returns (bytes2 ret) { + assembly { + ret := val + } + } + + function g(bytes2 val) external returns (bytes2 ret) { + assembly { + ret := val + } + } + + function h(uint256 val) external returns (MyBytes2) { + MyBytes2 ret; + assembly { + ret := val + } + return ret; + } + +} +// ==== +// compileViaYul: also +// ---- +// f(bytes2): "ab" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// g(bytes2): "ab" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// f(bytes2): "abcdef" -> FAILURE +// g(bytes2): "abcdef" -> FAILURE +// h(uint256): "ab" -> 0x6162000000000000000000000000000000000000000000000000000000000000 +// h(uint256): "abcdef" -> 0x6162000000000000000000000000000000000000000000000000000000000000