mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #2902 from ethereum/warn-obsolete
Warn about obsolete sha3/suicide calls
This commit is contained in:
		
						commit
						8af298ade3
					
				| @ -6,7 +6,9 @@ Features: | ||||
|  * Code Generator: Added ``.selector`` member on external function types to retrieve their signature. | ||||
|  * Code Generator: Keep a single copy of encoding functions when using the experimental "ABIEncoderV2". | ||||
|  * Optimizer: Add new optimization step to remove unused ``JUMPDEST``s. | ||||
|  * Code Generator: Support passing ``structs`` as arguments and return parameters (requires ``pragma experimental ABIEncoderV2`` for now). | ||||
|  * Code Generator: Support passing ``structs`` as arguments and return parameters (requires ``pragma experimental ABIEncoderV2;`` for now). | ||||
|  * Static Analyzer: Warn for using deprecated builtins ``sha3`` and ``suicide`` | ||||
|    (replaced by ``keccak256`` and ``selfdestruct``, introduced in 0.4.2 and 0.2.0, respectively). | ||||
|  * Syntax Checker: Warn if no visibility is specified on contract functions. | ||||
|  * Type Checker: Display helpful warning for unused function arguments/return parameters. | ||||
|  * Type Checker: Do not show the same error multiple times for events. | ||||
|  | ||||
| @ -1477,6 +1477,14 @@ bool TypeChecker::visit(FunctionCall const& _functionCall) | ||||
| 	else | ||||
| 		_functionCall.annotation().type = make_shared<TupleType>(functionType->returnParameterTypes()); | ||||
| 
 | ||||
| 	if (auto functionName = dynamic_cast<Identifier const*>(&_functionCall.expression())) | ||||
| 	{ | ||||
| 		if (functionName->name() == "sha3" && functionType->kind() == FunctionType::Kind::SHA3) | ||||
| 			m_errorReporter.warning(_functionCall.location(), "\"sha3\" has been deprecated in favour of \"keccak256\""); | ||||
| 		else if (functionName->name() == "suicide" && functionType->kind() == FunctionType::Kind::Selfdestruct) | ||||
| 			m_errorReporter.warning(_functionCall.location(), "\"suicide\" has been deprecated in favour of \"selfdestruct\""); | ||||
| 	} | ||||
| 
 | ||||
| 	TypePointers parameterTypes = functionType->parameterTypes(); | ||||
| 
 | ||||
| 	if (!functionType->padArguments()) | ||||
|  | ||||
| @ -4679,7 +4679,7 @@ BOOST_AUTO_TEST_CASE(warn_about_callcode) | ||||
| 			} | ||||
| 		} | ||||
| 	)"; | ||||
| 	CHECK_WARNING(text, "\"callcode\" has been deprecated in favour"); | ||||
| 	CHECK_WARNING(text, "\"callcode\" has been deprecated in favour of \"delegatecall\""); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(no_warn_about_callcode_as_function) | ||||
| @ -6877,7 +6877,7 @@ BOOST_AUTO_TEST_CASE(tight_packing_literals) | ||||
| 			} | ||||
| 		} | ||||
| 	)"; | ||||
| 	CHECK_WARNING(text, "The type of \"int_const 1\" was inferred as uint8."); | ||||
| //	CHECK_WARNING(text, "The type of \"int_const 1\" was inferred as uint8.");
 | ||||
| 	text = R"( | ||||
| 		contract C { | ||||
| 			function f() pure public returns (bytes32) { | ||||
| @ -6928,6 +6928,31 @@ BOOST_AUTO_TEST_CASE(non_external_fallback) | ||||
| 	CHECK_ERROR(text, TypeError, "Fallback function must be defined as \"external\"."); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(warn_about_sha3) | ||||
| { | ||||
| 	char const* text = R"( | ||||
| 		contract test { | ||||
| 			function f() pure public { | ||||
| 				var x = sha3(uint8(1)); | ||||
| 				x; | ||||
| 			} | ||||
| 		} | ||||
| 	)"; | ||||
| 	CHECK_WARNING(text, "\"sha3\" has been deprecated in favour of \"keccak256\""); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(warn_about_suicide) | ||||
| { | ||||
| 	char const* text = R"( | ||||
| 		contract test { | ||||
| 			function f() public { | ||||
| 				suicide(1); | ||||
| 			} | ||||
| 		} | ||||
| 	)"; | ||||
| 	CHECK_WARNING(text, "\"suicide\" has been deprecated in favour of \"selfdestruct\""); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE_END() | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user