Skip to content

ICE on call of unimplemented modifier. #11506

@christianparpart

Description

@christianparpart

In reference to issue #11468 and its PR #11471 these additionally found ICEs have been isolated.

contract A {
    modifier m() virtual { _; }
}
abstract contract B {
    modifier m() virtual;
}
contract C is A, B {
    modifier m() override(A, B) { _; }
    function f() B.m public {}
}

Here contract A has an implemented modifier m and abstract contract B has has an unimplemented modifier m.
Now, contract C inherits from both and overrides m with an implemented one.
C.f() however explictely references B.m, which results into a call to an unimplemented modifier (currently causing ICE in ContractCompiler).

abstract contract A {
    modifier m() virtual;
}
contract B is A {
    modifier m() virtual override { _; }
}
contract C is B {
    function f() A.m public {}
}

In this case, A.m is unimplemented, B inheriting from A overrides and implements m. C inheriting from B implements a function f that statically binds to A.m, which also results into an ICE in ContractCompiler.

Metadata

Metadata

Labels

bug 🐛should report better errorError is just badly reported. Should be a proper type error - source is not fine.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions