mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	[cond-expr] add a test to assign memory to storage
This commit is contained in:
		
							parent
							
								
									41039705ac
								
							
						
					
					
						commit
						1cd3288311
					
				| @ -754,8 +754,12 @@ bool TypeChecker::visit(Conditional const& _conditional) | ||||
| 	TypePointer const& trueType = type(_conditional.trueExpression()); | ||||
| 	TypePointer const& falseType = type(_conditional.falseExpression()); | ||||
| 
 | ||||
| 	// we fake it as an equal operator, but any other comparison operator can work.
 | ||||
| 	TypePointer commonType = trueType->binaryOperatorResult(Token::Equal, falseType); | ||||
| 	TypePointer commonType; | ||||
| 	if (*trueType == *falseType) | ||||
| 		commonType = trueType; | ||||
| 	else | ||||
| 		// we fake it as an equal operator, but any other comparison operator can work.
 | ||||
| 		TypePointer commonType = trueType->binaryOperatorResult(Token::Equal, falseType); | ||||
| 	if (!commonType) | ||||
| 	{ | ||||
| 		typeError( | ||||
|  | ||||
| @ -141,6 +141,39 @@ BOOST_AUTO_TEST_CASE(conditional_expression_with_return_values) | ||||
| 	BOOST_CHECK(callContractFunction("f(bool,uint256)", false, u256(20)) == encodeArgs(u256(0), u256(20))); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(conditional_expression_storage_memory) | ||||
| { | ||||
| 	char const* sourceCode = R"( | ||||
| 		contract test { | ||||
| 			bytes2[2] data1; | ||||
| 			function f(bool cond) returns (uint) { | ||||
| 				bytes2[2] memory x; | ||||
| 				x[0] = "aa"; | ||||
| 				bytes2[2] memory y; | ||||
| 				y[0] = "bb"; | ||||
| 
 | ||||
| 				data1 = cond ? x : y; | ||||
| 
 | ||||
| 				uint ret = 0; | ||||
| 				if (data1[0] == "aa") | ||||
| 				{ | ||||
| 					ret = 1; | ||||
| 				} | ||||
| 
 | ||||
| 				if (data1[0] == "bb") | ||||
| 				{ | ||||
| 					ret = 2; | ||||
| 				} | ||||
| 
 | ||||
| 				return ret; | ||||
| 			}     | ||||
| 		} | ||||
| 	)"; | ||||
| 	compileAndRun(sourceCode); | ||||
| 	BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(u256(1))); | ||||
| 	BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(u256(2))); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(recursive_calls) | ||||
| { | ||||
| 	char const* sourceCode = "contract test {\n" | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user