Merge pull request #4063 from ethereum/emit-non-event

Show proper error when trying to emit a non-event
This commit is contained in:
chriseth 2018-05-04 15:02:04 +02:00 committed by GitHub
commit 150d226603
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 0 deletions

View File

@ -8,6 +8,7 @@ Features:
* Type Checker: Make literals (without explicit type casting) an error for tight packing as experimental 0.5.0 feature. * Type Checker: Make literals (without explicit type casting) an error for tight packing as experimental 0.5.0 feature.
Bugfixes: Bugfixes:
* Type Checker: Show proper error when trying to ``emit`` a non-event.
* Type Checker: Warn about empty tuple components (this will turn into an error with version 0.5.0). * Type Checker: Warn about empty tuple components (this will turn into an error with version 0.5.0).

View File

@ -1067,6 +1067,7 @@ void TypeChecker::endVisit(EmitStatement const& _emit)
{ {
if ( if (
_emit.eventCall().annotation().kind != FunctionCallKind::FunctionCall || _emit.eventCall().annotation().kind != FunctionCallKind::FunctionCall ||
type(_emit.eventCall().expression())->category() != Type::Category::Function ||
dynamic_cast<FunctionType const&>(*type(_emit.eventCall().expression())).kind() != FunctionType::Kind::Event dynamic_cast<FunctionType const&>(*type(_emit.eventCall().expression())).kind() != FunctionType::Kind::Event
) )
m_errorReporter.typeError(_emit.eventCall().expression().location(), "Expression has to be an event invocation."); m_errorReporter.typeError(_emit.eventCall().expression().location(), "Expression has to be an event invocation.");

View File

@ -0,0 +1,10 @@
contract C {
uint256 Test;
function f() {
emit Test();
}
}
// ----
// TypeError: (56-62): Type is not callable
// TypeError: (56-60): Expression has to be an event invocation.