mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Treat magic variables as unknown identifiers in inline assembly
This fixes #4575. For keywords such as 'super' and 'this', will be treated as unknown identifiers.
This commit is contained in:
parent
302a51a58c
commit
24cbb4dd17
@ -10,6 +10,7 @@ Compiler Features:
|
|||||||
Bugfixes:
|
Bugfixes:
|
||||||
* Type Checker: Disallow constructor of the same class to be used as modifier
|
* Type Checker: Disallow constructor of the same class to be used as modifier
|
||||||
* Code Generator: Fixed a faulty assert that would wrongly trigger for array sizes exceeding unsigned integer
|
* Code Generator: Fixed a faulty assert that would wrongly trigger for array sizes exceeding unsigned integer
|
||||||
|
* Type Checker: Treat magic variables as unknown identifiers in inline assembly
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -702,6 +702,9 @@ bool TypeChecker::visit(InlineAssembly const& _inlineAssembly)
|
|||||||
}
|
}
|
||||||
else if (_context == yul::IdentifierContext::LValue)
|
else if (_context == yul::IdentifierContext::LValue)
|
||||||
{
|
{
|
||||||
|
if (dynamic_cast<MagicVariableDeclaration const*>(declaration))
|
||||||
|
return size_t(-1);
|
||||||
|
|
||||||
m_errorReporter.typeError(_identifier.location, "Only local variables can be assigned to in inline assembly.");
|
m_errorReporter.typeError(_identifier.location, "Only local variables can be assigned to in inline assembly.");
|
||||||
return size_t(-1);
|
return size_t(-1);
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,18 @@ contract C {
|
|||||||
function f() public {
|
function f() public {
|
||||||
assembly {
|
assembly {
|
||||||
super := 1
|
super := 1
|
||||||
|
this := 1
|
||||||
|
msg := 1
|
||||||
|
block := 1
|
||||||
f := 1
|
f := 1
|
||||||
C := 1
|
C := 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// TypeError: (58-63): Only local variables can be assigned to in inline assembly.
|
// DeclarationError: (58-63): Variable not found or variable not lvalue.
|
||||||
// TypeError: (75-76): Only local variables can be assigned to in inline assembly.
|
// DeclarationError: (75-79): Variable not found or variable not lvalue.
|
||||||
// TypeError: (88-89): Only local variables can be assigned to in inline assembly.
|
// DeclarationError: (91-94): Variable not found or variable not lvalue.
|
||||||
|
// DeclarationError: (106-111): Variable not found or variable not lvalue.
|
||||||
|
// TypeError: (123-124): Only local variables can be assigned to in inline assembly.
|
||||||
|
// TypeError: (136-137): Only local variables can be assigned to in inline assembly.
|
||||||
|
Loading…
Reference in New Issue
Block a user