From bb518b59aa571ace18e0f50ddb847183952282d5 Mon Sep 17 00:00:00 2001 From: Daniel Kirchner Date: Tue, 7 Aug 2018 20:46:42 +0200 Subject: [PATCH] Update and extend tests for return expressions. --- .../storageReturn/emptyReturn_err.sol | 14 -------------- .../storageReturn/emptyReturn_fine.sol | 7 ------- ..._return_parameter_with_explicit_return.sol | 7 ------- .../single_return_mismatching_number.sol | 14 ++++++++++++++ ...single_return_mismatching_number_named.sol | 14 ++++++++++++++ .../tuple_return_mismatching_number.sol | 19 +++++++++++++++++++ .../tuple_return_mismatching_number_named.sol | 19 +++++++++++++++++++ .../returnExpressions/valid_returns.sol | 18 ++++++++++++++++++ 8 files changed, 84 insertions(+), 28 deletions(-) delete mode 100644 test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_err.sol delete mode 100644 test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_fine.sol delete mode 100644 test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol create mode 100644 test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number.sol create mode 100644 test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number_named.sol create mode 100644 test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number.sol create mode 100644 test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number_named.sol create mode 100644 test/libsolidity/syntaxTests/returnExpressions/valid_returns.sol diff --git a/test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_err.sol b/test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_err.sol deleted file mode 100644 index 0d266ccfe..000000000 --- a/test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_err.sol +++ /dev/null @@ -1,14 +0,0 @@ -contract C { - struct S { bool f; } - S s; - function f() internal pure returns (S storage) { return; } - function g() internal view returns (S storage c, S storage) { c = s; return; } - function h() internal view returns (S storage, S storage d) { d = s; return; } - function i() internal pure returns (S storage, S storage) { return; } -} -// ---- -// TypeError: (87-88): This variable is of storage pointer type and might be returned without assignment and could be used uninitialized. Assign the variable (potentially from itself) to fix this error. -// TypeError: (163-164): This variable is of storage pointer type and might be returned without assignment and could be used uninitialized. Assign the variable (potentially from itself) to fix this error. -// TypeError: (233-234): This variable is of storage pointer type and might be returned without assignment and could be used uninitialized. Assign the variable (potentially from itself) to fix this error. -// TypeError: (316-317): This variable is of storage pointer type and might be returned without assignment and could be used uninitialized. Assign the variable (potentially from itself) to fix this error. -// TypeError: (327-328): This variable is of storage pointer type and might be returned without assignment and could be used uninitialized. Assign the variable (potentially from itself) to fix this error. diff --git a/test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_fine.sol b/test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_fine.sol deleted file mode 100644 index 6d72e4ef6..000000000 --- a/test/libsolidity/syntaxTests/controlFlow/storageReturn/emptyReturn_fine.sol +++ /dev/null @@ -1,7 +0,0 @@ -contract C { - struct S { bool f; } - S s; - function f() internal view returns (S storage c, S storage d) { c = s; d = s; return; } - function g() internal view returns (S storage, S storage) { return (s,s); } -} -// ---- diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol deleted file mode 100644 index af67f491e..000000000 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol +++ /dev/null @@ -1,7 +0,0 @@ -contract C { - function f() pure public returns (uint a) { - return; - } -} -// ---- -// Warning: (51-57): Unused function parameter. Remove or comment out the variable name to silence this warning. diff --git a/test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number.sol b/test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number.sol new file mode 100644 index 000000000..9741fdfba --- /dev/null +++ b/test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number.sol @@ -0,0 +1,14 @@ +contract C +{ + function f() public pure returns (uint) + { + return; + } + function g() public pure returns (uint) + { + return (1, 2); + } +} +// ---- +// TypeError: (71-78): Return arguments required. +// TypeError: (143-156): Different number of arguments in return statement than in returns declaration. diff --git a/test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number_named.sol b/test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number_named.sol new file mode 100644 index 000000000..53f2d994f --- /dev/null +++ b/test/libsolidity/syntaxTests/returnExpressions/single_return_mismatching_number_named.sol @@ -0,0 +1,14 @@ +contract C +{ + function f() public pure returns (uint a) + { + return; + } + function g() public pure returns (uint a) + { + return (1, 2); + } +} +// ---- +// TypeError: (73-80): Return arguments required. +// TypeError: (147-160): Different number of arguments in return statement than in returns declaration. diff --git a/test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number.sol b/test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number.sol new file mode 100644 index 000000000..4ea61c685 --- /dev/null +++ b/test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number.sol @@ -0,0 +1,19 @@ +contract C +{ + function f() public pure returns (uint, uint) + { + return 1; + } + function g() public pure returns (uint, uint) + { + return (1, 2, 3); + } + function h() public pure returns (uint, uint) + { + return; + } +} +// ---- +// TypeError: (77-85): Different number of arguments in return statement than in returns declaration. +// TypeError: (157-173): Different number of arguments in return statement than in returns declaration. +// TypeError: (245-252): Return arguments required. diff --git a/test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number_named.sol b/test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number_named.sol new file mode 100644 index 000000000..860497195 --- /dev/null +++ b/test/libsolidity/syntaxTests/returnExpressions/tuple_return_mismatching_number_named.sol @@ -0,0 +1,19 @@ +contract C +{ + function f() public pure returns (uint a, uint b) + { + return 1; + } + function g() public pure returns (uint a, uint b) + { + return (1, 2, 3); + } + function h() public pure returns (uint a, uint b) + { + return; + } +} +// ---- +// TypeError: (81-89): Different number of arguments in return statement than in returns declaration. +// TypeError: (165-181): Different number of arguments in return statement than in returns declaration. +// TypeError: (257-264): Return arguments required. diff --git a/test/libsolidity/syntaxTests/returnExpressions/valid_returns.sol b/test/libsolidity/syntaxTests/returnExpressions/valid_returns.sol new file mode 100644 index 000000000..e30f9173d --- /dev/null +++ b/test/libsolidity/syntaxTests/returnExpressions/valid_returns.sol @@ -0,0 +1,18 @@ +contract C +{ + function f() public pure { + return; + } + function g() public pure returns (uint) { + return 1; + } + function h() public pure returns (uint a) { + return 1; + } + function i() public pure returns (uint, uint) { + return (1, 2); + } + function j() public pure returns (uint a, uint b) { + return (1, 2); + } +}