From ab7b1625accac7b00621e9c0cb7ddee61a197e9f Mon Sep 17 00:00:00 2001 From: Daniel Kirchner Date: Mon, 13 Sep 2021 13:52:33 +0200 Subject: [PATCH] Tests for unassigned calldata returns. --- .../calldataReturn/calldata_return_dynamic_array.sol | 5 +++++ .../calldataReturn/calldata_return_static_array.sol | 5 +++++ .../controlFlow/calldataReturn/calldata_return_struct.sol | 6 ++++++ 3 files changed, 16 insertions(+) create mode 100644 test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_dynamic_array.sol create mode 100644 test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_static_array.sol create mode 100644 test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_struct.sol diff --git a/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_dynamic_array.sol b/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_dynamic_array.sol new file mode 100644 index 000000000..2baadc8d0 --- /dev/null +++ b/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_dynamic_array.sol @@ -0,0 +1,5 @@ +contract C { + function f() internal returns (uint256[] calldata) {} +} +// ---- +// TypeError 3464: (48-66): This variable is of calldata pointer type and can be returned without prior assignment, which would lead to undefined behaviour. diff --git a/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_static_array.sol b/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_static_array.sol new file mode 100644 index 000000000..0adfc86fe --- /dev/null +++ b/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_static_array.sol @@ -0,0 +1,5 @@ +contract C { + function f() internal returns (uint256[1] calldata) {} +} +// ---- +// TypeError 3464: (48-67): This variable is of calldata pointer type and can be returned without prior assignment, which would lead to undefined behaviour. diff --git a/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_struct.sol b/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_struct.sol new file mode 100644 index 000000000..fd682b090 --- /dev/null +++ b/test/libsolidity/syntaxTests/controlFlow/calldataReturn/calldata_return_struct.sol @@ -0,0 +1,6 @@ +contract C { + struct S { uint256 x; } + function f() internal returns (S calldata) {} +} +// ---- +// TypeError 3464: (76-86): This variable is of calldata pointer type and can be returned without prior assignment, which would lead to undefined behaviour.