Still allow empty structs for non-0.5.0 mode

This commit is contained in:
Alex Beregszaszi 2018-03-27 15:00:33 +01:00
parent b540ba527a
commit ebb12756ad
4 changed files with 16 additions and 3 deletions

View File

@ -3,6 +3,7 @@
Features:
* General: Support accessing dynamic return data in post-byzantium EVMs.
* Interfaces: Allow overriding external functions in interfaces with public in an implementing contract.
* Syntax Checker: Issue warning for empty structs (or error as experimental 0.5.0 feature).
Bugfixes:
* Code Generator: Allow ``block.blockhash`` without being called.
@ -12,7 +13,6 @@ Bugfixes:
* Commandline interface: Support ``--evm-version constantinople`` properly.
* DocString Parser: Fix error message for empty descriptions.
* Standard JSON: Support ``constantinople`` as ``evmVersion`` properly.
* Syntax Checker: Issue error for empty structs.
* Type System: Make external library functions accessible.
### 0.4.21 (2018-03-07)

View File

@ -258,7 +258,14 @@ bool SyntaxChecker::visit(VariableDeclaration const& _declaration)
bool SyntaxChecker::visit(StructDefinition const& _struct)
{
bool const v050 = m_sourceUnit->annotation().experimentalFeatures.count(ExperimentalFeature::V050);
if (_struct.members().empty())
m_errorReporter.syntaxError(_struct.location(), "Defining empty structs is disallowed.");
{
if (v050)
m_errorReporter.syntaxError(_struct.location(), "Defining empty structs is disallowed.");
else
m_errorReporter.warning(_struct.location(), "Defining empty structs is deprecated.");
}
return true;
}

View File

@ -2,4 +2,4 @@ contract test {
struct A {}
}
// ----
// SyntaxError: Defining empty structs is disallowed.
// Warning: Defining empty structs is deprecated.

View File

@ -0,0 +1,6 @@
pragma experimental "v0.5.0";
contract test {
struct A {}
}
// ----
// SyntaxError: Defining empty structs is disallowed.