transform: fix OptimizeReflectImplements pass for new named elem offset
Этот коммит содержится в:
		
							родитель
							
								
									229f479a7d
								
							
						
					
					
						коммит
						e0329b25de
					
				
					 3 изменённых файлов: 7 добавлений и 7 удалений
				
			
		|  | @ -142,7 +142,7 @@ func OptimizeReflectImplements(mod llvm.Module) { | ||||||
| 
 | 
 | ||||||
| 		if strings.HasPrefix(interfaceType.Name(), "reflect/types.type:named:") { | 		if strings.HasPrefix(interfaceType.Name(), "reflect/types.type:named:") { | ||||||
| 			// Get the underlying type. | 			// Get the underlying type. | ||||||
| 			interfaceType = stripPointerCasts(builder.CreateExtractValue(interfaceType.Initializer(), 2, "")) | 			interfaceType = stripPointerCasts(builder.CreateExtractValue(interfaceType.Initializer(), 3, "")) | ||||||
| 		} | 		} | ||||||
| 		if !strings.HasPrefix(interfaceType.Name(), "reflect/types.type:interface:") { | 		if !strings.HasPrefix(interfaceType.Name(), "reflect/types.type:interface:") { | ||||||
| 			// This is an error. The Type passed to Implements should be of | 			// This is an error. The Type passed to Implements should be of | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								transform/testdata/reflect-implements.ll
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										6
									
								
								transform/testdata/reflect-implements.ll
									
										
									
									
										предоставленный
									
									
								
							|  | @ -3,11 +3,11 @@ target triple = "i686--linux" | ||||||
| 
 | 
 | ||||||
| %runtime._interface = type { ptr, ptr } | %runtime._interface = type { ptr, ptr } | ||||||
| 
 | 
 | ||||||
| @"reflect/types.type:named:error" = internal constant { i8, ptr, ptr } { i8 52, ptr @"reflect/types.type:pointer:named:error", ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | @"reflect/types.type:named:error" = internal constant { i8, i16, ptr, ptr } { i8 52, i16 0, ptr @"reflect/types.type:pointer:named:error", ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | ||||||
| @"reflect/types.type:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 20, ptr @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" }, align 4 | @"reflect/types.type:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 20, ptr @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" }, align 4 | ||||||
| @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 21, ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 21, ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | ||||||
| @"reflect/types.type:pointer:named:error" = internal constant { i8, ptr } { i8 21, ptr @"reflect/types.type:named:error" }, align 4 | @"reflect/types.type:pointer:named:error" = internal constant { i8, i16, ptr } { i8 21, i16 0, ptr @"reflect/types.type:named:error" }, align 4 | ||||||
| @"reflect/types.type:pointer:named:reflect.rawType" = internal constant { ptr, i8, ptr } { ptr null, i8 21, ptr null }, align 4 | @"reflect/types.type:pointer:named:reflect.rawType" = internal constant { ptr, i8, i16, ptr } { ptr null, i8 21, i16 0, ptr null }, align 4 | ||||||
| @"reflect/methods.Implements(reflect.Type) bool" = internal constant i8 0, align 1 | @"reflect/methods.Implements(reflect.Type) bool" = internal constant i8 0, align 1 | ||||||
| 
 | 
 | ||||||
| ; var errorType = reflect.TypeOf((*error)(nil)).Elem() | ; var errorType = reflect.TypeOf((*error)(nil)).Elem() | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								transform/testdata/reflect-implements.out.ll
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										6
									
								
								transform/testdata/reflect-implements.out.ll
									
										
									
									
										предоставленный
									
									
								
							|  | @ -1,11 +1,11 @@ | ||||||
| target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" | target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" | ||||||
| target triple = "i686--linux" | target triple = "i686--linux" | ||||||
| 
 | 
 | ||||||
| @"reflect/types.type:named:error" = internal constant { i8, ptr, ptr } { i8 52, ptr @"reflect/types.type:pointer:named:error", ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | @"reflect/types.type:named:error" = internal constant { i8, i16, ptr, ptr } { i8 52, i16 0, ptr @"reflect/types.type:pointer:named:error", ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | ||||||
| @"reflect/types.type:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 20, ptr @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" }, align 4 | @"reflect/types.type:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 20, ptr @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" }, align 4 | ||||||
| @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 21, ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}" = internal constant { i8, ptr } { i8 21, ptr @"reflect/types.type:interface:{Error:func:{}{basic:string}}" }, align 4 | ||||||
| @"reflect/types.type:pointer:named:error" = internal constant { i8, ptr } { i8 21, ptr @"reflect/types.type:named:error" }, align 4 | @"reflect/types.type:pointer:named:error" = internal constant { i8, i16, ptr } { i8 21, i16 0, ptr @"reflect/types.type:named:error" }, align 4 | ||||||
| @"reflect/types.type:pointer:named:reflect.rawType" = internal constant { ptr, i8, ptr } { ptr null, i8 21, ptr null }, align 4 | @"reflect/types.type:pointer:named:reflect.rawType" = internal constant { ptr, i8, i16, ptr } { ptr null, i8 21, i16 0, ptr null }, align 4 | ||||||
| @"reflect/methods.Implements(reflect.Type) bool" = internal constant i8 0, align 1 | @"reflect/methods.Implements(reflect.Type) bool" = internal constant i8 0, align 1 | ||||||
| 
 | 
 | ||||||
| define i1 @main.isError(ptr %typ.typecode, ptr %typ.value, ptr %context) { | define i1 @main.isError(ptr %typ.typecode, ptr %typ.value, ptr %context) { | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Damian Gryski
						Damian Gryski