diff options
author | chriseth <chris@ethereum.org> | 2018-11-23 00:28:02 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-11-26 23:51:45 +0800 |
commit | 1e7a23a2051c07adbafc60e3c82b34ee307e9647 (patch) | |
tree | 5ac7ad307cfa48455b7cfe3ee20b827e9ededd99 | |
parent | 4d7799eed467009323e43d36134eba64bfafad34 (diff) | |
download | dexon-solidity-1e7a23a2051c07adbafc60e3c82b34ee307e9647.tar.gz dexon-solidity-1e7a23a2051c07adbafc60e3c82b34ee307e9647.tar.zst dexon-solidity-1e7a23a2051c07adbafc60e3c82b34ee307e9647.zip |
Changelog entry and tests.
3 files changed, 12 insertions, 1 deletions
diff --git a/Changelog.md b/Changelog.md index 5408bb8e..b899fa30 100644 --- a/Changelog.md +++ b/Changelog.md @@ -3,7 +3,6 @@ Language Features: * Allow public functions to override external functions. - Compiler Features: * Build System: LLL is not built anymore by default. Must configure it with CMake as `-DLLL=ON`. * Code generator: Do not perform redundant double cleanup on unsigned integers when loading from calldata. @@ -16,6 +15,7 @@ Compiler Features: Bugfixes: * Assembly output: Do not mix in/out jump annotations with arguments. * Code Generator: Annotate jump from calldata decoder to function as "jump in". + * Type Checker: Properly detect different return types when overriding an external interface function with a public contract function. Build System: * Emscripten: Upgrade to Emscripten SDK 1.37.21 and boost 1.67. diff --git a/test/libsolidity/syntaxTests/inheritance/override/change_return_types_in_interface.sol b/test/libsolidity/syntaxTests/inheritance/override/change_return_types_in_interface.sol new file mode 100644 index 00000000..804a1810 --- /dev/null +++ b/test/libsolidity/syntaxTests/inheritance/override/change_return_types_in_interface.sol @@ -0,0 +1,10 @@ +interface I { + function f() external pure returns (uint); +} +contract B is I { + // The compiler used to have a bug where changing + // the return type was fine in this situation. + function f() public pure returns (uint, uint) {} +} +// ---- +// TypeError: (182-230): Overriding function return types differ. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol index 6f0c7df7..86585518 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol @@ -4,3 +4,4 @@ contract C { } // ---- // DeclarationError: (17-66): Function with same name and arguments defined twice. +// TypeError: (17-66): Overriding function return types differ. |