Fixes ICE when overriding an implemented modifier with an unimplemented one.

This commit is contained in:
Christian Parpart
2021-06-09 13:15:20 +02:00
parent 8de575f738
commit a14ac1923d
7 changed files with 63 additions and 8 deletions
@@ -0,0 +1,11 @@
contract A {
modifier m() virtual { _; }
}
abstract contract B is A {
modifier m() virtual override;
}
contract C is B {
function f() m public {}
}
// ----
// TypeError 4593: (78-108): Overriding an implemented modifier with an unimplemented modifier is not allowed.
@@ -0,0 +1,11 @@
contract A {
modifier m() virtual { _; }
}
abstract contract B {
modifier m() virtual;
}
contract C is A, B {
modifier m() override(A, B) { _; }
function f() m public {}
}
// ----
@@ -0,0 +1,11 @@
abstract contract A {
modifier m() virtual;
}
abstract contract B is A {
modifier m() virtual override;
}
abstract contract C is B {
modifier m() virtual override;
function f() m public {}
}
// ----
@@ -0,0 +1,8 @@
abstract contract A {
modifier m() virtual;
function f() m public {}
}
contract B is A {
modifier m() virtual override { _; }
}
// ----
@@ -0,0 +1,8 @@
abstract contract A {
modifier m() virtual;
function f() m public virtual {}
}
abstract contract B is A {
function f() public override {}
}
// ----