mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Use "none" and "full" optimizer settings in the optimizer tests.
This commit is contained in:
		
							parent
							
								
									2fd6661b09
								
							
						
					
					
						commit
						d788a88873
					
				| @ -57,7 +57,7 @@ ExecutionFramework::ExecutionFramework(): | ||||
| ExecutionFramework::ExecutionFramework(string const& _ipcPath, langutil::EVMVersion _evmVersion): | ||||
| 	m_rpc(RPCSession::instance(_ipcPath)), | ||||
| 	m_evmVersion(_evmVersion), | ||||
| 	m_optimize(dev::test::Options::get().optimize), | ||||
| 	m_optimiserSettings(dev::test::Options::get().optimize ? solidity::OptimiserSettings::enabled() : solidity::OptimiserSettings::minimal()), | ||||
| 	m_showMessages(dev::test::Options::get().showMessages), | ||||
| 	m_sender(m_rpc.account(0)) | ||||
| { | ||||
|  | ||||
| @ -25,6 +25,8 @@ | ||||
| #include <test/Options.h> | ||||
| #include <test/RPCSession.h> | ||||
| 
 | ||||
| #include <libsolidity/interface/OptimiserSettings.h> | ||||
| 
 | ||||
| #include <liblangutil/EVMVersion.h> | ||||
| 
 | ||||
| #include <libdevcore/FixedHash.h> | ||||
| @ -265,8 +267,7 @@ protected: | ||||
| 	}; | ||||
| 
 | ||||
| 	langutil::EVMVersion m_evmVersion; | ||||
| 	unsigned m_optimizeRuns = 200; | ||||
| 	bool m_optimize = false; | ||||
| 	solidity::OptimiserSettings m_optimiserSettings = solidity::OptimiserSettings::minimal(); | ||||
| 	bool m_showMessages = false; | ||||
| 	bool m_transactionSuccessful = true; | ||||
| 	Address m_sender; | ||||
|  | ||||
| @ -41,7 +41,7 @@ namespace test | ||||
| 		u256 gasOpt{_gasOpt}; \ | ||||
| 		u256 gasNoOpt{_gasNoOpt}; \ | ||||
| 		u256 tolerance{_tolerance}; \ | ||||
| 		u256 gas = m_optimize ? gasOpt : gasNoOpt; \ | ||||
| 		u256 gas = m_optimiserSettings == OptimiserSettings::minimal() ? gasNoOpt : gasOpt; \ | ||||
| 		u256 diff = gas < m_gasUsed ? m_gasUsed - gas : gas - m_gasUsed; \ | ||||
| 		BOOST_CHECK_MESSAGE( \ | ||||
| 			diff <= tolerance, \ | ||||
|  | ||||
| @ -73,7 +73,7 @@ public: | ||||
| 		m_compiler.addSource("", sourceCode); | ||||
| 		m_compiler.setLibraries(_libraryAddresses); | ||||
| 		m_compiler.setEVMVersion(m_evmVersion); | ||||
| 		m_compiler.setOptimiserSettings(m_optimize, m_optimizeRuns); | ||||
| 		m_compiler.setOptimiserSettings(m_optimiserSettings); | ||||
| 		if (!m_compiler.compile()) | ||||
| 		{ | ||||
| 			langutil::SourceReferenceFormatter formatter(std::cerr); | ||||
|  | ||||
| @ -54,13 +54,13 @@ public: | ||||
| 		unsigned const _optimizeRuns = 200 | ||||
| 	) | ||||
| 	{ | ||||
| 		bool const c_optimize = m_optimize; | ||||
| 		unsigned const c_optimizeRuns = m_optimizeRuns; | ||||
| 		m_optimize = _optimize; | ||||
| 		m_optimizeRuns = _optimizeRuns; | ||||
| 		OptimiserSettings previousSettings = std::move(m_optimiserSettings); | ||||
| 		// This uses "none" / "full" while most other test frameworks use
 | ||||
| 		// "minimal" / "enabled".
 | ||||
| 		m_optimiserSettings = _optimize ? OptimiserSettings::full() : OptimiserSettings::none(); | ||||
| 		m_optimiserSettings.expectedExecutionsPerDeployment = _optimizeRuns; | ||||
| 		bytes const& ret = compileAndRun(_sourceCode, _value, _contractName); | ||||
| 		m_optimize = c_optimize; | ||||
| 		m_optimizeRuns = c_optimizeRuns; | ||||
| 		m_optimiserSettings = std::move(previousSettings); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| @ -685,21 +685,19 @@ BOOST_AUTO_TEST_CASE(shift_optimizer_bug) | ||||
| 	char const* sourceCode = R"( | ||||
| 		contract C | ||||
| 		{ | ||||
| 			function f(uint x, uint y, uint z) public returns (uint) | ||||
| 			function f(uint x) public returns (uint) | ||||
| 			{ | ||||
| 				return (x << y) << z; | ||||
| 				return (x << 1) << uint(-1); | ||||
| 			} | ||||
| 			function g(uint x, uint y, uint z) public returns (uint) | ||||
| 			function g(uint x) public returns (uint) | ||||
| 			{ | ||||
| 				return (x >> y) > z; | ||||
| 				return (x >> 1) >> uint(-1); | ||||
| 			} | ||||
| 		} | ||||
| 	)"; | ||||
| 	compileBothVersions(sourceCode); | ||||
| 	compareVersions("f(uint256,uint256,uint256)", 7, u256(-1), 5); | ||||
| 	compareVersions("g(uint256,uint256,uint256)", 7, u256(-1), 5); | ||||
| 	compareVersions("f(uint256,uint256,uint256)", 7, 128, 120); | ||||
| 	compareVersions("g(uint256,uint256,uint256)", 0x71117, 2, 2); | ||||
| 	compareVersions("f(uint256)", 7); | ||||
| 	compareVersions("g(uint256)", u256(-1)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user