From 082e7b6a9ea5f4651bed0b2ab037dbba05af26eb Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 16 Oct 2017 13:28:44 +0200 Subject: [PATCH] Allow ``gas`` in view functions. --- Changelog.md | 1 + libevmasm/SemanticInformation.cpp | 2 +- test/libsolidity/ViewPureChecker.cpp | 7 +++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Changelog.md b/Changelog.md index d78dbbba8..ac27ca7fb 100644 --- a/Changelog.md +++ b/Changelog.md @@ -19,6 +19,7 @@ Bugfixes: (such as ``balance``, ``transfer``, etc.) * Type Checker: Prevent duplicate event declarations. * Type Checker: Do not mark event parameters as shadowing state variables. + * Type Checker: Allow ``gas`` in view functions. ### 0.4.17 (2017-09-21) diff --git a/libevmasm/SemanticInformation.cpp b/libevmasm/SemanticInformation.cpp index 83cfe2c6d..61a6ccda4 100644 --- a/libevmasm/SemanticInformation.cpp +++ b/libevmasm/SemanticInformation.cpp @@ -198,6 +198,7 @@ bool SemanticInformation::invalidInPureFunctions(Instruction _instruction) case Instruction::ORIGIN: case Instruction::CALLER: case Instruction::CALLVALUE: + case Instruction::GAS: case Instruction::GASPRICE: case Instruction::EXTCODESIZE: case Instruction::EXTCODECOPY: @@ -223,7 +224,6 @@ bool SemanticInformation::invalidInViewFunctions(Instruction _instruction) case Instruction::SSTORE: case Instruction::JUMP: case Instruction::JUMPI: - case Instruction::GAS: case Instruction::LOG0: case Instruction::LOG1: case Instruction::LOG2: diff --git a/test/libsolidity/ViewPureChecker.cpp b/test/libsolidity/ViewPureChecker.cpp index 802415196..6353ae8a8 100644 --- a/test/libsolidity/ViewPureChecker.cpp +++ b/test/libsolidity/ViewPureChecker.cpp @@ -349,7 +349,7 @@ BOOST_AUTO_TEST_CASE(assembly) assembly { x := 7 } } function g() view public { - assembly { for {} 1 { pop(sload(0)) } { } } + assembly { for {} 1 { pop(sload(0)) } { } pop(gas) } } function h() view public { assembly { function g() { pop(blockhash(20)) } } @@ -357,6 +357,9 @@ BOOST_AUTO_TEST_CASE(assembly) function j() public { assembly { pop(call(0, 1, 2, 3, 4, 5, 6)) } } + function k() public { + assembly { pop(call(gas, 1, 2, 3, 4, 5, 6)) } + } } )"; CHECK_SUCCESS_NO_WARNINGS(text); @@ -367,7 +370,7 @@ BOOST_AUTO_TEST_CASE(assembly_staticcall) string text = R"( contract C { function i() view public { - assembly { pop(staticcall(0, 1, 2, 3, 4, 5)) } + assembly { pop(staticcall(gas, 1, 2, 3, 4, 5)) } } } )";