diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2017-12-02 09:01:55 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2017-12-11 10:34:42 +0800 |
commit | e9d256ddf4322050f9b834abd3400f1cb5377f68 (patch) | |
tree | 6d4fca6a46240f2d2ac44a138163f63ae88050cd | |
parent | 226bfe5be1f7443e644d2cfd62aac19b56836b8a (diff) | |
download | dexon-solidity-e9d256ddf4322050f9b834abd3400f1cb5377f68.tar dexon-solidity-e9d256ddf4322050f9b834abd3400f1cb5377f68.tar.gz dexon-solidity-e9d256ddf4322050f9b834abd3400f1cb5377f68.tar.bz2 dexon-solidity-e9d256ddf4322050f9b834abd3400f1cb5377f68.tar.lz dexon-solidity-e9d256ddf4322050f9b834abd3400f1cb5377f68.tar.xz dexon-solidity-e9d256ddf4322050f9b834abd3400f1cb5377f68.tar.zst dexon-solidity-e9d256ddf4322050f9b834abd3400f1cb5377f68.zip |
Suggest the experimental ABI encoder if using structs as function parameters
-rw-r--r-- | Changelog.md | 2 | ||||
-rw-r--r-- | libsolidity/analysis/TypeChecker.cpp | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/Changelog.md b/Changelog.md index 248165bb..cf6498a1 100644 --- a/Changelog.md +++ b/Changelog.md @@ -4,6 +4,8 @@ Features: * Inline Assembly: Issue warning for using jump labels (already existed for jump instructions). Bugfixes: + * Type Checker: Suggest the experimental ABI encoder if using ``struct``s as function parameters + (instead of an internal compiler error). ### 0.4.19 (2017-11-30) diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 96160a75..daa5471a 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -570,6 +570,16 @@ bool TypeChecker::visit(FunctionDefinition const& _function) m_errorReporter.typeError(var->location(), "Type is required to live outside storage."); if (_function.visibility() >= FunctionDefinition::Visibility::Public && !(type(*var)->interfaceType(isLibraryFunction))) m_errorReporter.fatalTypeError(var->location(), "Internal or recursive type is not allowed for public or external functions."); + if ( + _function.visibility() > FunctionDefinition::Visibility::Internal && + type(*var)->category() == Type::Category::Struct && + !_function.sourceUnit().annotation().experimentalFeatures.count(ExperimentalFeature::ABIEncoderV2) + ) + m_errorReporter.typeError( + var->location(), + "Structs are only supported in the new experimental ABI encoder. " + "Use \"pragma experimental ABIEncoderV2;\" to enable the feature." + ); var->accept(*this); } |