aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2018-08-09 00:55:10 +0800
committerGitHub <noreply@github.com>2018-08-09 00:55:10 +0800
commitbb071f307555cba6990eb4ee51c952ff2c0479e5 (patch)
tree31162bb0b171a6505b0fa60d76ba5e307e22693e
parent90627040545f0257b01cc24f95edea1c89cdbbf3 (diff)
parent3c791d637d6bdf709ec272e6c8cf9ff51abd34ef (diff)
downloaddexon-solidity-bb071f307555cba6990eb4ee51c952ff2c0479e5.tar
dexon-solidity-bb071f307555cba6990eb4ee51c952ff2c0479e5.tar.gz
dexon-solidity-bb071f307555cba6990eb4ee51c952ff2c0479e5.tar.bz2
dexon-solidity-bb071f307555cba6990eb4ee51c952ff2c0479e5.tar.lz
dexon-solidity-bb071f307555cba6990eb4ee51c952ff2c0479e5.tar.xz
dexon-solidity-bb071f307555cba6990eb4ee51c952ff2c0479e5.tar.zst
dexon-solidity-bb071f307555cba6990eb4ee51c952ff2c0479e5.zip
Merge pull request #4769 from ethereum/inlineasm-overloading-resolution
Provide nicer error message when referencing overloaded references
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/analysis/ReferencesResolver.cpp3
-rw-r--r--test/libsolidity/syntaxTests/inlineAssembly/overloaded_reference.sol11
3 files changed, 15 insertions, 0 deletions
diff --git a/Changelog.md b/Changelog.md
index 2309edc3..37dcea7a 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -73,6 +73,7 @@ Language Features:
Compiler Features:
* C API (``libsolc``): Export the ``solidity_license``, ``solidity_version`` and ``solidity_compile`` methods.
+ * Type Checker: Nicer error message when trying to reference overloaded identifiers in inline assembly.
* Type Checker: Show named argument in case of error.
* Tests: Determine transaction status during IPC calls.
* Code Generator: Allocate and free local variables according to their scope.
diff --git a/libsolidity/analysis/ReferencesResolver.cpp b/libsolidity/analysis/ReferencesResolver.cpp
index 501521f5..2cf09eff 100644
--- a/libsolidity/analysis/ReferencesResolver.cpp
+++ b/libsolidity/analysis/ReferencesResolver.cpp
@@ -264,7 +264,10 @@ bool ReferencesResolver::visit(InlineAssembly const& _inlineAssembly)
declarations = m_resolver.nameFromCurrentScope(realName);
}
if (declarations.size() != 1)
+ {
+ declarationError(_identifier.location, "Multiple matching identifiers. Resolving overloaded identifiers is not supported.");
return size_t(-1);
+ }
if (auto var = dynamic_cast<VariableDeclaration const*>(declarations.front()))
if (var->isLocalVariable() && _crossesFunctionBoundary)
{
diff --git a/test/libsolidity/syntaxTests/inlineAssembly/overloaded_reference.sol b/test/libsolidity/syntaxTests/inlineAssembly/overloaded_reference.sol
new file mode 100644
index 00000000..d1bcc946
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inlineAssembly/overloaded_reference.sol
@@ -0,0 +1,11 @@
+contract C {
+ function f() pure public {}
+ function f(address) pure public {}
+ function g() pure public {
+ assembly {
+ let x := f
+ }
+ }
+}
+// ----
+// DeclarationError: (155-156): Multiple matching identifiers. Resolving overloaded identifiers is not supported.