Merge pull request #11480 from ethereum/event-mapping-fatal-error

Errors about nested mapping in event parameter are fatal.
This commit is contained in:
chriseth 2021-06-03 11:39:26 +02:00 committed by GitHub
commit a30cf6c3e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 30 additions and 6 deletions

View File

@ -26,6 +26,7 @@ Bugfixes:
* Standard JSON: Properly allow the ``inliner`` setting under ``settings.optimizer.details``. * Standard JSON: Properly allow the ``inliner`` setting under ``settings.optimizer.details``.
* Type Checker: Fix internal compiler error related to having mapping types in constructor parameter for abstract contracts. * Type Checker: Fix internal compiler error related to having mapping types in constructor parameter for abstract contracts.
* Type Checker: Fix internal compiler error when attempting to use an invalid external function type on pre-byzantium EVMs. * Type Checker: Fix internal compiler error when attempting to use an invalid external function type on pre-byzantium EVMs.
* Type Checker: Make errors about (nested) mapping type in event or error parameter into fatal type errors.
AST Changes: AST Changes:

View File

@ -3411,7 +3411,7 @@ void TypeChecker::checkErrorAndEventParameters(CallableDeclaration const& _calla
for (ASTPointer<VariableDeclaration> const& var: _callable.parameters()) for (ASTPointer<VariableDeclaration> const& var: _callable.parameters())
{ {
if (type(*var)->containsNestedMapping()) if (type(*var)->containsNestedMapping())
m_errorReporter.typeError( m_errorReporter.fatalTypeError(
3448_error, 3448_error,
var->location(), var->location(),
"Type containing a (nested) mapping is not allowed as " + kind + " parameter type." "Type containing a (nested) mapping is not allowed as " + kind + " parameter type."

View File

@ -0,0 +1,9 @@
error E1(function() internal);
error E2(S);
struct S {
S[] ss;
}
// ----
// TypeError 3417: (9-29): Internal or recursive type is not allowed as error parameter type.
// TypeError 3417: (40-41): Internal or recursive type is not allowed as error parameter type.

View File

@ -4,6 +4,3 @@ contract C {
} }
// ---- // ----
// TypeError 3448: (14-35): Type containing a (nested) mapping is not allowed as error parameter type. // TypeError 3448: (14-35): Type containing a (nested) mapping is not allowed as error parameter type.
// TypeError 3417: (14-35): Internal or recursive type is not allowed as error parameter type.
// TypeError 3448: (70-91): Type containing a (nested) mapping is not allowed as error parameter type.
// TypeError 3417: (70-91): Internal or recursive type is not allowed as error parameter type.

View File

@ -3,5 +3,3 @@ contract c {
} }
// ---- // ----
// TypeError 3448: (41-72): Type containing a (nested) mapping is not allowed as event parameter type. // TypeError 3448: (41-72): Type containing a (nested) mapping is not allowed as event parameter type.
// TypeError 3417: (41-72): Internal or recursive type is not allowed as event parameter type.
// TypeError 8598: (17-132): More than 4 indexed arguments for anonymous event.

View File

@ -0,0 +1,11 @@
struct S {
S[] ss;
}
contract C {
event E1(function() internal);
event E2(S);
}
// ----
// TypeError 3417: (52-72): Internal or recursive type is not allowed as event parameter type.
// TypeError 3417: (87-88): Internal or recursive type is not allowed as event parameter type.

View File

@ -0,0 +1,3 @@
error E (mapping (uint => uint));
// ----
// TypeError 3448: (9-31): Type containing a (nested) mapping is not allowed as error parameter type.

View File

@ -0,0 +1,5 @@
contract C {
event E (mapping (uint => uint) [2]);
}
// ----
// TypeError 3448: (26-52): Type containing a (nested) mapping is not allowed as event parameter type.