mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	codegen: clean not only booleans but all types before storing them into memory
This commit is contained in:
		
							parent
							
								
									5d7a1fda39
								
							
						
					
					
						commit
						d77c8f730c
					
				| @ -941,7 +941,7 @@ void CompilerUtils::cleanHigherOrderBits(IntegerType const& _typeOnStack) | ||||
| 		m_context << ((u256(1) << _typeOnStack.numBits()) - 1) << Instruction::AND; | ||||
| } | ||||
| 
 | ||||
| unsigned CompilerUtils::prepareMemoryStore(Type const& _type, bool _padToWordBoundaries) const | ||||
| unsigned CompilerUtils::prepareMemoryStore(Type const& _type, bool _padToWordBoundaries) | ||||
| { | ||||
| 	unsigned numBytes = _type.calldataEncodedSize(_padToWordBoundaries); | ||||
| 	bool leftAligned = _type.category() == Type::Category::FixedBytes; | ||||
| @ -950,8 +950,7 @@ unsigned CompilerUtils::prepareMemoryStore(Type const& _type, bool _padToWordBou | ||||
| 	else | ||||
| 	{ | ||||
| 		solAssert(numBytes <= 32, "Memory store of more than 32 bytes requested."); | ||||
| 		if (_type.category() == Type::Category::Bool) | ||||
| 			m_context << Instruction::ISZERO << Instruction::ISZERO; | ||||
| 		convertType(_type, _type, true); | ||||
| 		if (numBytes != 32 && !leftAligned && !_padToWordBoundaries) | ||||
| 			// shift the value accordingly before storing
 | ||||
| 			m_context << (u256(1) << ((32 - numBytes) * 8)) << Instruction::MUL; | ||||
|  | ||||
| @ -185,7 +185,7 @@ private: | ||||
| 	void cleanHigherOrderBits(IntegerType const& _typeOnStack); | ||||
| 
 | ||||
| 	/// Prepares the given type for storing in memory by shifting it if necessary.
 | ||||
| 	unsigned prepareMemoryStore(Type const& _type, bool _padToWordBoundaries) const; | ||||
| 	unsigned prepareMemoryStore(Type const& _type, bool _padToWordBoundaries); | ||||
| 	/// Loads type from memory assuming memory offset is on stack top.
 | ||||
| 	unsigned loadFromMemoryHelper(Type const& _type, bool _fromCalldata, bool _padToWordBoundaries); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user