aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/ast/Types.h1
-rw-r--r--test/libsolidity/SolidityEndToEndTest.cpp9
3 files changed, 11 insertions, 0 deletions
diff --git a/Changelog.md b/Changelog.md
index bc79b88a..fb3b23c7 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -8,6 +8,7 @@ Features:
Bugfixes:
* Disallow unknown options in `solc`
+ * Code Generator: expect zero stack increase after `super` as an expression
* Inline assembly: support the `address` opcode
* Inline assembly: fix parsing of assignment after a label.
diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h
index 9173f39a..f65d25fb 100644
--- a/libsolidity/ast/Types.h
+++ b/libsolidity/ast/Types.h
@@ -623,6 +623,7 @@ public:
}
virtual unsigned storageBytes() const override { return 20; }
virtual bool canLiveOutsideStorage() const override { return true; }
+ virtual unsigned sizeOnStack() const override { return m_super ? 0 : 1; }
virtual bool isValueType() const override { return true; }
virtual std::string toString(bool _short) const override;
virtual std::string canonicalName(bool _addDataLocation) const override;
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp
index 155f117f..692abe57 100644
--- a/test/libsolidity/SolidityEndToEndTest.cpp
+++ b/test/libsolidity/SolidityEndToEndTest.cpp
@@ -2513,6 +2513,15 @@ BOOST_AUTO_TEST_CASE(super_in_constructor)
BOOST_CHECK(callContractFunction("f()") == encodeArgs(1 | 2 | 4 | 8));
}
+BOOST_AUTO_TEST_CASE(super_alone)
+{
+ char const* sourceCode = R"(
+ contract A { function f() { super; } }
+ )";
+ compileAndRun(sourceCode, 0, "A");
+ BOOST_CHECK(callContractFunction("f()") == encodeArgs());
+}
+
BOOST_AUTO_TEST_CASE(fallback_function)
{
char const* sourceCode = R"(