transform: update reflect-implements test to opaque pointers
Этот коммит содержится в:
		
							родитель
							
								
									383e7ae14a
								
							
						
					
					
						коммит
						db08b5aaa5
					
				
					 2 изменённых файлов: 23 добавлений и 23 удалений
				
			
		
							
								
								
									
										24
									
								
								transform/testdata/reflect-implements.ll
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										24
									
								
								transform/testdata/reflect-implements.ll
									
										
									
									
										предоставленный
									
									
								
							| 
						 | 
					@ -1,13 +1,13 @@
 | 
				
			||||||
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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%runtime._interface = type { i8*, i8* }
 | 
					%runtime._interface = type { ptr, ptr }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@"reflect/types.type:named:error" = internal constant { i8, i8*, i8* } { i8 52, i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:pointer:named:error", i32 0, i32 0), i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:interface:{Error:func:{}{basic:string}}", i32 0, i32 0) }, align 4
 | 
					@"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:interface:{Error:func:{}{basic:string}}" = internal constant { i8, i8* } { i8 20, i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}", i32 0, i32 0) }, 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, i8* } { i8 21, i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:interface:{Error:func:{}{basic:string}}", i32 0, i32 0) }, 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, i8* } { i8 21, i8* getelementptr inbounds ({ i8, i8*, i8* }, { i8, i8*, i8* }* @"reflect/types.type:named:error", i32 0, i32 0) }, 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:reflect.rawType" = internal constant { i8*, i8, i8* } { i8* null, i8 21, i8* null }, align 4
 | 
					@"reflect/types.type:pointer:named:reflect.rawType" = internal constant { ptr, i8, ptr } { ptr null, i8 21, 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()
 | 
				
			||||||
| 
						 | 
					@ -17,9 +17,9 @@ target triple = "i686--linux"
 | 
				
			||||||
; The type itself is stored in %typ.value, %typ.typecode just refers to the
 | 
					; The type itself is stored in %typ.value, %typ.typecode just refers to the
 | 
				
			||||||
; type of reflect.Type. This function can be optimized because errorType is
 | 
					; type of reflect.Type. This function can be optimized because errorType is
 | 
				
			||||||
; known at compile time (after the interp pass has run).
 | 
					; known at compile time (after the interp pass has run).
 | 
				
			||||||
define i1 @main.isError(i8* %typ.typecode, i8* %typ.value, i8* %context) {
 | 
					define i1 @main.isError(ptr %typ.typecode, ptr %typ.value, ptr %context) {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %result = call i1 @"reflect.Type.Implements$invoke"(i8* %typ.value, i8* getelementptr inbounds ({ i8*, i8, i8* }, { i8*, i8, i8* }* @"reflect/types.type:pointer:named:reflect.rawType", i32 0, i32 1), i8* getelementptr inbounds ({ i8, i8*, i8* }, { i8, i8*, i8* }* @"reflect/types.type:named:error", i32 0, i32 0), i8* %typ.typecode, i8* undef)
 | 
					  %result = call i1 @"reflect.Type.Implements$invoke"(ptr %typ.value, ptr getelementptr inbounds ({ ptr, i8, ptr }, ptr @"reflect/types.type:pointer:named:reflect.rawType", i32 0, i32 1), ptr @"reflect/types.type:named:error", ptr %typ.typecode, ptr undef)
 | 
				
			||||||
  ret i1 %result
 | 
					  ret i1 %result
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,14 +28,14 @@ entry:
 | 
				
			||||||
; func isUnknown(typ, itf reflect.Type) bool {
 | 
					; func isUnknown(typ, itf reflect.Type) bool {
 | 
				
			||||||
;   return typ.Implements(itf)
 | 
					;   return typ.Implements(itf)
 | 
				
			||||||
; }
 | 
					; }
 | 
				
			||||||
define i1 @main.isUnknown(i8* %typ.typecode, i8* %typ.value, i8* %itf.typecode, i8* %itf.value, i8* %context) {
 | 
					define i1 @main.isUnknown(ptr %typ.typecode, ptr %typ.value, ptr %itf.typecode, ptr %itf.value, ptr %context) {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %result = call i1 @"reflect.Type.Implements$invoke"(i8* %typ.value, i8* %itf.typecode, i8* %itf.value, i8* %typ.typecode, i8* undef)
 | 
					  %result = call i1 @"reflect.Type.Implements$invoke"(ptr %typ.value, ptr %itf.typecode, ptr %itf.value, ptr %typ.typecode, ptr undef)
 | 
				
			||||||
  ret i1 %result
 | 
					  ret i1 %result
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare i1 @"reflect.Type.Implements$invoke"(i8*, i8*, i8*, i8*, i8*) #0
 | 
					declare i1 @"reflect.Type.Implements$invoke"(ptr, ptr, ptr, ptr, ptr) #0
 | 
				
			||||||
declare i1 @"interface:{Error:func:{}{basic:string}}.$typeassert"(i8* %0) #1
 | 
					declare i1 @"interface:{Error:func:{}{basic:string}}.$typeassert"(ptr %0) #1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
attributes #0 = { "tinygo-invoke"="reflect/methods.Implements(reflect.Type) bool" "tinygo-methods"="reflect/methods.Align() int; reflect/methods.Implements(reflect.Type) bool" }
 | 
					attributes #0 = { "tinygo-invoke"="reflect/methods.Implements(reflect.Type) bool" "tinygo-methods"="reflect/methods.Align() int; reflect/methods.Implements(reflect.Type) bool" }
 | 
				
			||||||
attributes #1 = { "tinygo-methods"="reflect/methods.Error() string" }
 | 
					attributes #1 = { "tinygo-methods"="reflect/methods.Error() string" }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										22
									
								
								transform/testdata/reflect-implements.out.ll
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										22
									
								
								transform/testdata/reflect-implements.out.ll
									
										
									
									
										предоставленный
									
									
								
							| 
						 | 
					@ -1,28 +1,28 @@
 | 
				
			||||||
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, i8*, i8* } { i8 52, i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:pointer:named:error", i32 0, i32 0), i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:interface:{Error:func:{}{basic:string}}", i32 0, i32 0) }, align 4
 | 
					@"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:interface:{Error:func:{}{basic:string}}" = internal constant { i8, i8* } { i8 20, i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:pointer:interface:{Error:func:{}{basic:string}}", i32 0, i32 0) }, 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, i8* } { i8 21, i8* getelementptr inbounds ({ i8, i8* }, { i8, i8* }* @"reflect/types.type:interface:{Error:func:{}{basic:string}}", i32 0, i32 0) }, 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, i8* } { i8 21, i8* getelementptr inbounds ({ i8, i8*, i8* }, { i8, i8*, i8* }* @"reflect/types.type:named:error", i32 0, i32 0) }, 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:reflect.rawType" = internal constant { i8*, i8, i8* } { i8* null, i8 21, i8* null }, align 4
 | 
					@"reflect/types.type:pointer:named:reflect.rawType" = internal constant { ptr, i8, ptr } { ptr null, i8 21, 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(i8* %typ.typecode, i8* %typ.value, i8* %context) {
 | 
					define i1 @main.isError(ptr %typ.typecode, ptr %typ.value, ptr %context) {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %0 = call i1 @"interface:{Error:func:{}{basic:string}}.$typeassert"(i8* %typ.value)
 | 
					  %0 = call i1 @"interface:{Error:func:{}{basic:string}}.$typeassert"(ptr %typ.value)
 | 
				
			||||||
  ret i1 %0
 | 
					  ret i1 %0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define i1 @main.isUnknown(i8* %typ.typecode, i8* %typ.value, i8* %itf.typecode, i8* %itf.value, i8* %context) {
 | 
					define i1 @main.isUnknown(ptr %typ.typecode, ptr %typ.value, ptr %itf.typecode, ptr %itf.value, ptr %context) {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %result = call i1 @"reflect.Type.Implements$invoke"(i8* %typ.value, i8* %itf.typecode, i8* %itf.value, i8* %typ.typecode, i8* undef)
 | 
					  %result = call i1 @"reflect.Type.Implements$invoke"(ptr %typ.value, ptr %itf.typecode, ptr %itf.value, ptr %typ.typecode, ptr undef)
 | 
				
			||||||
  ret i1 %result
 | 
					  ret i1 %result
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare i1 @"reflect.Type.Implements$invoke"(i8*, i8*, i8*, i8*, i8*) #0
 | 
					declare i1 @"reflect.Type.Implements$invoke"(ptr, ptr, ptr, ptr, ptr) #0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare i1 @"interface:{Error:func:{}{basic:string}}.$typeassert"(i8*) #1
 | 
					declare i1 @"interface:{Error:func:{}{basic:string}}.$typeassert"(ptr) #1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
attributes #0 = { "tinygo-invoke"="reflect/methods.Implements(reflect.Type) bool" "tinygo-methods"="reflect/methods.Align() int; reflect/methods.Implements(reflect.Type) bool" }
 | 
					attributes #0 = { "tinygo-invoke"="reflect/methods.Implements(reflect.Type) bool" "tinygo-methods"="reflect/methods.Align() int; reflect/methods.Implements(reflect.Type) bool" }
 | 
				
			||||||
attributes #1 = { "tinygo-methods"="reflect/methods.Error() string" }
 | 
					attributes #1 = { "tinygo-methods"="reflect/methods.Error() string" }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче