mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #5092 from ethereum/create2-evmversion
CREATE2 is part of Constantinople now
This commit is contained in:
		
						commit
						46f630c5a6
					
				| @ -88,7 +88,7 @@ Language Features: | ||||
| 
 | ||||
| Compiler Features: | ||||
|  * C API (``libsolc``): Export the ``solidity_license``, ``solidity_version`` and ``solidity_compile`` methods. | ||||
|  * Code Generator: ``CREATE2`` instruction has been updated to match EIP1014 (aka "Skinny CREATE2"). | ||||
|  * Code Generator: ``CREATE2`` instruction has been updated to match EIP1014 (aka "Skinny CREATE2"). It also is accepted as part of Constantinople. | ||||
|  * Type Checker: Nicer error message when trying to reference overloaded identifiers in inline assembly. | ||||
|  * Type Checker: Show named argument in case of error. | ||||
|  * Type System: IntegerType is split into IntegerType and AddressType internally. | ||||
|  | ||||
| @ -565,18 +565,10 @@ void AsmAnalyzer::warnOnInstructions(solidity::Instruction _instr, SourceLocatio | ||||
| 	// We assume that returndatacopy, returndatasize and staticcall are either all available
 | ||||
| 	// or all not available.
 | ||||
| 	solAssert(m_evmVersion.supportsReturndata() == m_evmVersion.hasStaticCall(), ""); | ||||
| 	// Similarly we assume bitwise shifting and create2 go together.
 | ||||
| 	solAssert(m_evmVersion.hasBitwiseShifting() == m_evmVersion.hasCreate2(), ""); | ||||
| 
 | ||||
| 	if (_instr == solidity::Instruction::CREATE2) | ||||
| 		m_errorReporter.warning( | ||||
| 			_location, | ||||
| 			"The \"" + | ||||
| 			boost::to_lower_copy(instructionInfo(_instr).name) | ||||
| 			+ "\" instruction is not supported by the VM version \"" + | ||||
| 			"" + m_evmVersion.name() + | ||||
| 			"\" you are currently compiling for. " + | ||||
| 			"It will be interpreted as an invalid instruction on this VM." | ||||
| 		); | ||||
| 	else if (( | ||||
| 	if (( | ||||
| 		_instr == solidity::Instruction::RETURNDATACOPY || | ||||
| 		_instr == solidity::Instruction::RETURNDATASIZE || | ||||
| 		_instr == solidity::Instruction::STATICCALL | ||||
| @ -593,7 +585,8 @@ void AsmAnalyzer::warnOnInstructions(solidity::Instruction _instr, SourceLocatio | ||||
| 	else if (( | ||||
| 		_instr == solidity::Instruction::SHL || | ||||
| 		_instr == solidity::Instruction::SHR || | ||||
| 		_instr == solidity::Instruction::SAR | ||||
| 		_instr == solidity::Instruction::SAR || | ||||
| 		_instr == solidity::Instruction::CREATE2 | ||||
| 	) && !m_evmVersion.hasBitwiseShifting()) | ||||
| 		m_errorReporter.warning( | ||||
| 			_location, | ||||
|  | ||||
| @ -75,6 +75,7 @@ public: | ||||
| 	bool supportsReturndata() const { return *this >= byzantium(); } | ||||
| 	bool hasStaticCall() const { return *this >= byzantium(); } | ||||
| 	bool hasBitwiseShifting() const { return *this >= constantinople(); } | ||||
| 	bool hasCreate2() const { return *this >= constantinople(); } | ||||
| 
 | ||||
| 	/// Whether we have to retain the costs for the call opcode itself (false),
 | ||||
| 	/// or whether we can just forward easily all remaining gas (true).
 | ||||
|  | ||||
| @ -396,7 +396,7 @@ BOOST_AUTO_TEST_CASE(returndatasize_as_variable) | ||||
| 		{Error::Type::Warning, "Variable is shadowed in inline assembly by an instruction of the same name"} | ||||
| 	}); | ||||
| 	if (!dev::test::Options::get().evmVersion().supportsReturndata()) | ||||
| 		expectations.emplace_back(make_pair(Error::Type::Warning, std::string("\"returndatasize\" instruction is only available for Byzantium-compatible"))); | ||||
| 		expectations.emplace_back(make_pair(Error::Type::Warning, std::string("\"returndatasize\" instruction is only available for Byzantium-compatible VMs."))); | ||||
| 	CHECK_ALLOW_MULTI(text, expectations); | ||||
| } | ||||
| 
 | ||||
| @ -407,10 +407,12 @@ BOOST_AUTO_TEST_CASE(create2_as_variable) | ||||
| 	)"; | ||||
| 	// This needs special treatment, because the message mentions the EVM version,
 | ||||
| 	// so cannot be run via isoltest.
 | ||||
| 	CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{ | ||||
| 		{Error::Type::Warning, "Variable is shadowed in inline assembly by an instruction of the same name"}, | ||||
| 		{Error::Type::Warning, "The \"create2\" instruction is not supported by the VM version"}, | ||||
| 	})); | ||||
| 	vector<pair<Error::Type, std::string>> expectations(vector<pair<Error::Type, std::string>>{ | ||||
| 		{Error::Type::Warning, "Variable is shadowed in inline assembly by an instruction of the same name"} | ||||
| 	}); | ||||
| 	if (!dev::test::Options::get().evmVersion().hasCreate2()) | ||||
| 		expectations.emplace_back(make_pair(Error::Type::Warning, std::string("\"create2\" instruction is only available for Constantinople-compatible VMs."))); | ||||
| 	CHECK_ALLOW_MULTI(text, expectations); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(getter_is_memory_type) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user