mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #12003 from ethereum/wrong-err-msg
[Trivial] Correct wrong error message referencing `.slot` and `.offset` when `.length` was used
This commit is contained in:
commit
8af2cdfb82
@ -19,16 +19,17 @@ Compiler Features:
|
||||
Bugfixes:
|
||||
* Code Generator: Fix ICE on assigning to calldata structs and statically-sized calldata arrays in inline assembly.
|
||||
* Code Generator: Use stable source order for ABI functions.
|
||||
* Commandline Interface: Report optimizer options as invalid in Standard JSON and linker modes instead of ignoring them.
|
||||
* Commandline Interface: Disallow the ``--experimental-via-ir`` option in Standard JSON, Assembler and Linker modes.
|
||||
* Opcode Optimizer: Prevent the optimizer from running multiple times to avoid potential bytecode differences for referenced code.
|
||||
* Commandline Interface: Report optimizer options as invalid in Standard JSON and linker modes instead of ignoring them.
|
||||
* Name Resolver: Fix that when importing an aliased symbol using ``import {AliasedName} from "a.sol"`` it would use the original name of the symbol and not the aliased one.
|
||||
* Opcode Optimizer: Prevent the optimizer from running multiple times to avoid potential bytecode differences for referenced code.
|
||||
* Parser: Properly check for multiple SPDX license identifiers next to each other and validate them.
|
||||
* SMTChecker: Fix BMC's constraints regarding internal functions.
|
||||
* SMTChecker: Fix false negative caused by ``push`` on storage array references returned by internal functions.
|
||||
* SMTChecker: Fix false positive in external calls from constructors.
|
||||
* SMTChecker: Fix internal error on some multi-source uses of ``abi.*``, cryptographic functions and constants.
|
||||
* SMTChecker: Fix BMC's constraints regarding internal functions.
|
||||
* Standard JSON: Fix non-fatal errors in Yul mode being discarded if followed by a fatal error.
|
||||
* Type Checker: Correct wrong error message in inline assembly complaining about ``.slot`` or ``.offset` not valid when actually ``.length`` was used.
|
||||
* Type Checker: Disallow modifier declarations and definitions in interfaces.
|
||||
* Yul Optimizer: Fix a crash in LoadResolver, when ``keccak256`` has particular non-identifier arguments.
|
||||
|
||||
|
@ -799,7 +799,7 @@ bool TypeChecker::visit(InlineAssembly const& _inlineAssembly)
|
||||
m_errorReporter.typeError(6252_error, _identifier.debugData->location, "Constant variables cannot be assigned to.");
|
||||
return false;
|
||||
}
|
||||
else if (!identifierInfo.suffix.empty())
|
||||
else if (identifierInfo.suffix == "slot" || identifierInfo.suffix == "offset")
|
||||
{
|
||||
m_errorReporter.typeError(6617_error, _identifier.debugData->location, "The suffixes .offset and .slot can only be used on non-constant storage variables.");
|
||||
return false;
|
||||
@ -829,7 +829,7 @@ bool TypeChecker::visit(InlineAssembly const& _inlineAssembly)
|
||||
{
|
||||
string const& suffix = identifierInfo.suffix;
|
||||
solAssert((set<string>{"offset", "slot", "length"}).count(suffix), "");
|
||||
if (var->isStateVariable() || var->type()->dataStoredIn(DataLocation::Storage))
|
||||
if (!var->isConstant() && (var->isStateVariable() || var->type()->dataStoredIn(DataLocation::Storage)))
|
||||
{
|
||||
if (suffix != "slot" && suffix != "offset")
|
||||
{
|
||||
|
@ -0,0 +1,10 @@
|
||||
contract Test {
|
||||
uint constant x = 2;
|
||||
function f() public pure {
|
||||
assembly {
|
||||
let y := x.length
|
||||
}
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError 3622: (91-99): The suffix ".length" is not supported by this variable or type.
|
Loading…
Reference in New Issue
Block a user