mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #12966 from a3d4/fix-ice-structtype-nativemembers
Fix ICE caused by an immutable struct with mapping
This commit is contained in:
		
						commit
						3ed9a38abc
					
				| @ -36,6 +36,7 @@ Bugfixes: | ||||
|  * Common Subexpression Eliminator: Process assembly items in chunks with maximum size of 2000. It helps to avoid extremely time-consuming searches during code optimization. | ||||
|  * Yul IR Code Generation: More robust cleanup in corner cases during memory to storage copies. | ||||
|  * Yul Optimizer: Do not remove ``returndatacopy`` in cases in which it might perform out-of-bounds reads that unconditionally revert as out-of-gas. Previously, any ``returndatacopy`` that wrote to memory that was never read from was removed without accounting for the out-of-bounds condition. | ||||
|  * DocString Parser: Fix ICE caused by an immutable struct with mapping. | ||||
| 
 | ||||
| 
 | ||||
| ### 0.8.14 (2022-05-17) | ||||
|  | ||||
| @ -479,12 +479,6 @@ bool CompilerStack::analyze() | ||||
| 			if (auto sourceAst = source->ast) | ||||
| 				noErrors = contractLevelChecker.check(*sourceAst); | ||||
| 
 | ||||
| 		// Requires ContractLevelChecker
 | ||||
| 		DocStringAnalyser docStringAnalyser(m_errorReporter); | ||||
| 		for (Source const* source: m_sourceOrder) | ||||
| 			if (source->ast && !docStringAnalyser.analyseDocStrings(*source->ast)) | ||||
| 				noErrors = false; | ||||
| 
 | ||||
| 		// Now we run full type checks that go down to the expression level. This
 | ||||
| 		// cannot be done earlier, because we need cross-contract types and information
 | ||||
| 		// about whether a contract is abstract for the `new` expression.
 | ||||
| @ -497,6 +491,15 @@ bool CompilerStack::analyze() | ||||
| 			if (source->ast && !typeChecker.checkTypeRequirements(*source->ast)) | ||||
| 				noErrors = false; | ||||
| 
 | ||||
| 		if (noErrors) | ||||
| 		{ | ||||
| 			// Requires ContractLevelChecker and TypeChecker
 | ||||
| 			DocStringAnalyser docStringAnalyser(m_errorReporter); | ||||
| 			for (Source const* source: m_sourceOrder) | ||||
| 				if (source->ast && !docStringAnalyser.analyseDocStrings(*source->ast)) | ||||
| 					noErrors = false; | ||||
| 		} | ||||
| 
 | ||||
| 		if (noErrors) | ||||
| 		{ | ||||
| 			// Checks that can only be done when all types of all AST nodes are known.
 | ||||
|  | ||||
| @ -0,0 +1,9 @@ | ||||
| contract Contract { | ||||
|     struct S { | ||||
|         int k; | ||||
|     } | ||||
| 
 | ||||
|     S immutable s; | ||||
| } | ||||
| // ---- | ||||
| // TypeError 6377: (61-74): Immutable variables cannot have a non-value type. | ||||
| @ -0,0 +1,9 @@ | ||||
| contract Contract { | ||||
|     struct S { | ||||
|         mapping(uint => address) map; | ||||
|     } | ||||
| 
 | ||||
|     S immutable s; | ||||
| } | ||||
| // ---- | ||||
| // TypeError 6377: (84-97): Immutable variables cannot have a non-value type. | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user