Fix IR bug about calling the wrong modifier during construction

This commit is contained in:
hrkrshnn 2021-02-10 18:57:21 +01:00
parent 43319574e7
commit 2f30fdaa21
3 changed files with 21 additions and 1 deletions

View File

@ -727,7 +727,7 @@ void IRGenerator::generateImplicitConstructors(ContractDefinition const& _contra
generateModifier(modifier, *constructor, next);
}
body =
IRNames::modifierInvocation(*constructor->modifiers().at(0)) +
IRNames::modifierInvocation(*realModifiers.at(0)) +
"(" +
joinHumanReadable(params) +
")";

View File

@ -0,0 +1,7 @@
// The IR of this contract used to throw
contract A { modifier m1{_;} }
contract B is A { constructor() A() m1{} }
// ====
// compileViaYul: also
// ----
// constructor() ->

View File

@ -0,0 +1,13 @@
// The IR of this contract used to throw
contract A {
constructor() m1 { }
modifier m1 { _; }
}
contract B is A {
modifier m2 { _; }
constructor() A() m1 m2 { }
}
// ====
// compileViaYul: also
// ----
// constructor() ->