Fix ICE when printing an error message related to mappings

This commit is contained in:
Marenz
2021-10-06 17:02:36 +02:00
parent a709216e37
commit 4368da0201
6 changed files with 46 additions and 1 deletions
@@ -0,0 +1,28 @@
type A is uint;
type B is uint;
library L {
function f(mapping(A=>B) storage _m, B _v) public { _m[A.wrap(uint(2))] = _v; }
function f(mapping(uint=>uint) storage _m, uint _v) public { _m[uint(3)] = _v; }
}
contract C {
mapping(uint=>uint) uintMap;
mapping(A=>B) abMap;
function testAB() public returns (bool) {
L.f(abMap, B.wrap(3));
return B.unwrap(abMap[A.wrap(uint(2))]) == 3;
}
function testUint() public returns (bool) {
L.f(uintMap, 4);
return uintMap[3] == 4;
}
}
// ====
// compileViaYul: also
// ----
// library: L
// testAB() -> true
// testUint() -> true
@@ -0,0 +1,5 @@
library L {
function f(mapping(uint=>uint) memory) public {}
}
// ----
// TypeError 4061: (25-51): Type mapping(uint256 => uint256) is only valid in storage because it contains a (nested) mapping.
@@ -0,0 +1,6 @@
type T is uint;
library L {
function f(mapping(T=>T) memory) public {}
}
// ----
// TypeError 4061: (41-61): Type mapping(T => T) is only valid in storage because it contains a (nested) mapping.