compiler: allow slices of empty structs.
Fixes https://github.com/tinygo-org/tinygo/issues/2749
Этот коммит содержится в:
		
							родитель
							
								
									3dc1e403ea
								
							
						
					
					
						коммит
						7af24c7864
					
				
					 2 изменённых файлов: 8 добавлений и 1 удалений
				
			
		|  | @ -1554,7 +1554,11 @@ func (c *compilerContext) maxSliceSize(elementType llvm.Type) uint64 { | ||||||
| 	// Determine the maximum allowed size for a slice. The biggest possible | 	// Determine the maximum allowed size for a slice. The biggest possible | ||||||
| 	// pointer (starting from 0) would be maxPointerValue*sizeof(elementType) so | 	// pointer (starting from 0) would be maxPointerValue*sizeof(elementType) so | ||||||
| 	// divide by the element type to get the real maximum size. | 	// divide by the element type to get the real maximum size. | ||||||
| 	maxSize := maxPointerValue / c.targetData.TypeAllocSize(elementType) | 	elementSize := c.targetData.TypeAllocSize(elementType) | ||||||
|  | 	if elementSize == 0 { | ||||||
|  | 		elementSize = 1 | ||||||
|  | 	} | ||||||
|  | 	maxSize := maxPointerValue / elementSize | ||||||
| 
 | 
 | ||||||
| 	// len(slice) is an int. Make sure the length remains small enough to fit in | 	// len(slice) is an int. Make sure the length remains small enough to fit in | ||||||
| 	// an int. | 	// an int. | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								testdata/slice.go
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										3
									
								
								testdata/slice.go
									
										
									
									
										предоставленный
									
									
								
							|  | @ -19,6 +19,9 @@ func main() { | ||||||
| 	printslice("foo[1:2]", foo[1:2]) | 	printslice("foo[1:2]", foo[1:2]) | ||||||
| 	println("sum foo:", sum(foo)) | 	println("sum foo:", sum(foo)) | ||||||
| 
 | 
 | ||||||
|  | 	// creating a slice of uncommon base type | ||||||
|  | 	assert(len(make([]struct{}, makeInt(4))) == 4) | ||||||
|  | 
 | ||||||
| 	// creating a slice with uncommon len, cap types | 	// creating a slice with uncommon len, cap types | ||||||
| 	assert(len(make([]int, makeInt(2), makeInt(3))) == 2) | 	assert(len(make([]int, makeInt(2), makeInt(3))) == 2) | ||||||
| 	assert(len(make([]int, makeInt8(2), makeInt8(3))) == 2) | 	assert(len(make([]int, makeInt8(2), makeInt8(3))) == 2) | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Dan Kegel
						Dan Kegel