reflect: track flags when size changes from fits-in-pointer to not
Fixes #3328
Этот коммит содержится в:
		
							родитель
							
								
									5293d3e5f0
								
							
						
					
					
						коммит
						86f125cf72
					
				
					 3 изменённых файлов: 16 добавлений и 1 удалений
				
			
		|  | @ -507,7 +507,7 @@ func (v Value) Field(i int) Value { | ||||||
| 		ptr := unsafe.Pointer(uintptr(v.value) + structField.Offset) | 		ptr := unsafe.Pointer(uintptr(v.value) + structField.Offset) | ||||||
| 		value := unsafe.Pointer(loadValue(ptr, fieldSize)) | 		value := unsafe.Pointer(loadValue(ptr, fieldSize)) | ||||||
| 		return Value{ | 		return Value{ | ||||||
| 			flags:    0, | 			flags:    flags &^ valueFlagIndirect, | ||||||
| 			typecode: fieldType, | 			typecode: fieldType, | ||||||
| 			value:    value, | 			value:    value, | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								testdata/reflect.go
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										1
									
								
								testdata/reflect.go
									
										
									
									
										предоставленный
									
									
								
							|  | @ -129,6 +129,7 @@ func main() { | ||||||
| 		&linkedList{ | 		&linkedList{ | ||||||
| 			foo: 42, | 			foo: 42, | ||||||
| 		}, | 		}, | ||||||
|  | 		struct{ A, B uintptr }{2, 3}, | ||||||
| 		// interfaces | 		// interfaces | ||||||
| 		[]interface{}{3, "str", -4 + 2.5i}, | 		[]interface{}{3, "str", -4 + 2.5i}, | ||||||
| 	} { | 	} { | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								testdata/reflect.txt
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										14
									
								
								testdata/reflect.txt
									
										
									
									
										предоставленный
									
									
								
							|  | @ -334,6 +334,20 @@ reflect type: ptr | ||||||
|     exported: false |     exported: false | ||||||
|     reflect type: int addrable=true caninterface=false |     reflect type: int addrable=true caninterface=false | ||||||
|       int: 42 |       int: 42 | ||||||
|  | reflect type: struct | ||||||
|  |   struct: 2 | ||||||
|  |   field: 0 A | ||||||
|  |   tag:  | ||||||
|  |   embedded: false | ||||||
|  |   exported: true | ||||||
|  |   reflect type: uintptr | ||||||
|  |     uint: 2 | ||||||
|  |   field: 1 B | ||||||
|  |   tag:  | ||||||
|  |   embedded: false | ||||||
|  |   exported: true | ||||||
|  |   reflect type: uintptr | ||||||
|  |     uint: 3 | ||||||
| reflect type: slice comparable=false | reflect type: slice comparable=false | ||||||
|   slice: interface 3 3 |   slice: interface 3 3 | ||||||
|   pointer: true |   pointer: true | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Damian Gryski
						Damian Gryski