Coder Social home page Coder Social logo

Comments (2)

r0qs avatar r0qs commented on June 7, 2024

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.

ekpyron avatar ekpyron commented on June 7, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.