mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #3775 from federicobond/improve-error-fractional-shift
Improve error message when attempting to shift by fractional number
This commit is contained in:
		
						commit
						3bb54e8bd5
					
				| @ -12,6 +12,7 @@ Bugfixes: | |||||||
|  * Commandline interface: Support ``--evm-version constantinople`` properly. |  * Commandline interface: Support ``--evm-version constantinople`` properly. | ||||||
|  * DocString Parser: Fix error message for empty descriptions. |  * DocString Parser: Fix error message for empty descriptions. | ||||||
|  * Standard JSON: Support ``constantinople`` as ``evmVersion`` properly. |  * Standard JSON: Support ``constantinople`` as ``evmVersion`` properly. | ||||||
|  |  * Type System: Improve error message when attempting to shift by a fractional amount. | ||||||
|  * Type System: Make external library functions accessible. |  * Type System: Make external library functions accessible. | ||||||
| 
 | 
 | ||||||
| ### 0.4.21 (2018-03-07) | ### 0.4.21 (2018-03-07) | ||||||
|  | |||||||
| @ -327,7 +327,7 @@ bool isValidShiftAndAmountType(Token::Value _operator, Type const& _shiftAmountT | |||||||
| 	else if (IntegerType const* otherInt = dynamic_cast<decltype(otherInt)>(&_shiftAmountType)) | 	else if (IntegerType const* otherInt = dynamic_cast<decltype(otherInt)>(&_shiftAmountType)) | ||||||
| 		return !otherInt->isAddress(); | 		return !otherInt->isAddress(); | ||||||
| 	else if (RationalNumberType const* otherRat = dynamic_cast<decltype(otherRat)>(&_shiftAmountType)) | 	else if (RationalNumberType const* otherRat = dynamic_cast<decltype(otherRat)>(&_shiftAmountType)) | ||||||
| 		return otherRat->integerType() && !otherRat->integerType()->isSigned(); | 		return !otherRat->isFractional() && otherRat->integerType() && !otherRat->integerType()->isSigned(); | ||||||
| 	else | 	else | ||||||
| 		return false; | 		return false; | ||||||
| } | } | ||||||
|  | |||||||
| @ -5643,6 +5643,16 @@ BOOST_AUTO_TEST_CASE(shift_constant_right_excessive_rvalue) | |||||||
| 	CHECK_ERROR(text, TypeError, "Operator >> not compatible with types int_const 66 and int_const 4294967296"); | 	CHECK_ERROR(text, TypeError, "Operator >> not compatible with types int_const 66 and int_const 4294967296"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | BOOST_AUTO_TEST_CASE(shift_constant_right_fractional) | ||||||
|  | { | ||||||
|  | 	char const* text = R"( | ||||||
|  | 		contract C { | ||||||
|  | 			uint public a = 0x42 >> (1 / 2); | ||||||
|  | 		} | ||||||
|  | 	)"; | ||||||
|  | 	CHECK_ERROR(text, TypeError, "Operator >> not compatible with types int_const 66 and rational_const 1 / 2"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| BOOST_AUTO_TEST_CASE(inline_assembly_unbalanced_positive_stack) | BOOST_AUTO_TEST_CASE(inline_assembly_unbalanced_positive_stack) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user