Comments (2)
Thanks @bshastry. I reduced the example to this:
pragma solidity >=0.0;
contract C {
struct S {
mapping(uint224 => int64) b;
}
function f() external returns(bool) {}
fallback() external virtual
{
(, C.S[2] memory ret) = abi.decode(abi.encodeCall(this.f, ()), (bool, C.S[2]));
}
}
I'm wondering whether this issue might be related to the fact that if a struct includes a map, it's restricted to storage use only. So, this might not being detected by the compiler when doing low-level calls, and if that is the case, we may need to remove that assert and properly handle this case. For instance, if you do a direct call:
C.S[2] memory ret = this.f();
It will throw the error:
Error: Type struct C.S[2] memory is only valid in storage because it contains a (nested) mapping.
Maybe @ekpyron or @cameel has a better idea of the issue?
from solidity.
It's just a fluke of type-checking. The order in which we check things is a mess in our current analysis, so it happens easily like in this case that we assert against something assuming that it ought to already have triggered an error, while the error is only actually emitted later. So in the end this boils down to "this should be a better, more graceful error", but it's not particularly high priority to fix.
from solidity.
Related Issues (20)
- Verifying blobhash causes failure to obtain gasLimit HOT 2
- Security vulnerability: Why do % and MOD result in different outputs despite being technically the same function? HOT 2
- SMT logic error for a conditional with empty tuple types
- Code Deduplication Creates Wrong Source Mappings HOT 1
- `memory-safe` Assembly Worsens Optimizations HOT 2
- Reduce default font weight for readability HOT 2
- Providing an empty string to `--yul-optimizations` without enabling yul optimization triggers uncaught exception HOT 1
- Version the `list.json` file for build information
- SMT logic error for bitwise operators HOT 2
- Abnormal execution time of the SMTChecker HOT 2
- Type conversion can trigger SMT Logic Error under certain conditions
- Standard ERC-721 "name" and "symbol" function error with Cancun EVM HOT 1
- Support named parameters in abi.encodeCall
- Inconsistent storage caused by function-type variable assignment HOT 1
- SMTChecker: Unable to support keccak256 well
- Incorrect `src` start position in ast. HOT 2
- AbiCoder v1 incorrectly encodes arrays containing overflow values
- Resuming compilation from AST import does not produce identical metadata HOT 1
- IR-based Code Generator truncates overflow values, resulting in inconsistent variable values. HOT 2
- SMTChecker: Fail to parse abi.encodeCall
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from solidity.