Merge pull request #1210 from visualfc/ssa_typeassert

ssa: fix TypeAssert check null
This commit is contained in:
xushiwei
2025-08-08 19:48:27 +08:00
committed by GitHub
5 changed files with 409 additions and 318 deletions

85
_demo/ifaceconv/main.go Normal file
View File

@@ -0,0 +1,85 @@
package main
// Tests of interface conversions and type assertions.
type I0 interface {
}
type I1 interface {
f()
}
type I2 interface {
f()
g()
}
type C0 struct{}
type C1 struct{}
func (C1) f() {}
type C2 struct{}
func (C2) f() {}
func (C2) g() {}
func main() {
var i0 I0
var i1 I1
var i2 I2
// Nil always causes a type assertion to fail, even to the
// same type.
if _, ok := i0.(I0); ok {
panic("nil i0.(I0) succeeded")
}
if _, ok := i1.(I1); ok {
panic("nil i1.(I1) succeeded")
}
if _, ok := i2.(I2); ok {
panic("nil i2.(I2) succeeded")
}
// Conversions can't fail, even with nil.
_ = I0(i0)
_ = I0(i1)
_ = I1(i1)
_ = I0(i2)
_ = I1(i2)
_ = I2(i2)
// Non-nil type assertions pass or fail based on the concrete type.
i1 = C1{}
if _, ok := i1.(I0); !ok {
panic("C1 i1.(I0) failed")
}
if _, ok := i1.(I1); !ok {
panic("C1 i1.(I1) failed")
}
if _, ok := i1.(I2); ok {
panic("C1 i1.(I2) succeeded")
}
i1 = C2{}
if _, ok := i1.(I0); !ok {
panic("C2 i1.(I0) failed")
}
if _, ok := i1.(I1); !ok {
panic("C2 i1.(I1) failed")
}
if _, ok := i1.(I2); !ok {
panic("C2 i1.(I2) failed")
}
// Conversions can't fail.
i1 = C1{}
if I0(i1) == nil {
panic("C1 I0(i1) was nil")
}
if I1(i1) == nil {
panic("C1 I1(i1) was nil")
}
println("pass")
}

View File

@@ -98,7 +98,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
define void @"github.com/goplus/llgo/cl/_testgo/ifaceconv.main"() { define void @"github.com/goplus/llgo/cl/_testgo/ifaceconv.main"() {
_llgo_0: _llgo_0:
%0 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I0", align 8 %0 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I0", align 8
br i1 true, label %_llgo_23, label %_llgo_24 br i1 false, label %_llgo_23, label %_llgo_24
_llgo_1: ; preds = %_llgo_25 _llgo_1: ; preds = %_llgo_25
%1 = load ptr, ptr @_llgo_string, align 8 %1 = load ptr, ptr @_llgo_string, align 8
@@ -112,7 +112,7 @@ _llgo_1: ; preds = %_llgo_25
_llgo_2: ; preds = %_llgo_25 _llgo_2: ; preds = %_llgo_25
%5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer) %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer)
%6 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8 %6 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8
br i1 true, label %_llgo_26, label %_llgo_27 br i1 false, label %_llgo_26, label %_llgo_27
_llgo_3: ; preds = %_llgo_28 _llgo_3: ; preds = %_llgo_28
%7 = load ptr, ptr @_llgo_string, align 8 %7 = load ptr, ptr @_llgo_string, align 8
@@ -126,7 +126,7 @@ _llgo_3: ; preds = %_llgo_28
_llgo_4: ; preds = %_llgo_28 _llgo_4: ; preds = %_llgo_28
%11 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer) %11 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer)
%12 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8 %12 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8
br i1 true, label %_llgo_29, label %_llgo_30 br i1 false, label %_llgo_29, label %_llgo_30
_llgo_5: ; preds = %_llgo_31 _llgo_5: ; preds = %_llgo_31
%13 = load ptr, ptr @_llgo_string, align 8 %13 = load ptr, ptr @_llgo_string, align 8
@@ -173,125 +173,127 @@ _llgo_7: ; preds = %_llgo_34
_llgo_8: ; preds = %_llgo_34 _llgo_8: ; preds = %_llgo_34
%41 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %33) %41 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %33)
%42 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8 %42 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8
%43 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 1
br i1 true, label %_llgo_35, label %_llgo_36 br i1 true, label %_llgo_35, label %_llgo_36
_llgo_9: ; preds = %_llgo_37 _llgo_9: ; preds = %_llgo_37
%43 = load ptr, ptr @_llgo_string, align 8 %44 = load ptr, ptr @_llgo_string, align 8
%44 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %45 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 17 }, ptr %44, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 17 }, ptr %45, align 8
%45 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %43, 0 %46 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %44, 0
%46 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %45, ptr %44, 1 %47 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %46, ptr %45, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %46) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %47)
unreachable unreachable
_llgo_10: ; preds = %_llgo_37 _llgo_10: ; preds = %_llgo_37
%47 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %33) %48 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %33)
%48 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8 %49 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8
%49 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %48, ptr %47) %50 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %49, ptr %48)
br i1 %49, label %_llgo_38, label %_llgo_39 br i1 %50, label %_llgo_38, label %_llgo_39
_llgo_11: ; preds = %_llgo_40 _llgo_11: ; preds = %_llgo_40
%50 = load ptr, ptr @_llgo_string, align 8 %51 = load ptr, ptr @_llgo_string, align 8
%51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %52 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 20 }, ptr %51, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 20 }, ptr %52, align 8
%52 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %50, 0 %53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %51, 0
%53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %52, ptr %51, 1 %54 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %53, ptr %52, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %53) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %54)
unreachable unreachable
_llgo_12: ; preds = %_llgo_40 _llgo_12: ; preds = %_llgo_40
%54 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8 %55 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8
%55 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %56 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2" zeroinitializer, ptr %55, align 1 store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2" zeroinitializer, ptr %56, align 1
%56 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8 %57 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8
%57 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %56, ptr %54) %58 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %57, ptr %55)
%58 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %57, 0 %59 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %58, 0
%59 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %58, ptr %55, 1 %60 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, ptr %56, 1
%60 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %59) %61 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %60)
%61 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I0", align 8 %62 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I0", align 8
%62 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %61, ptr %60) %63 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %62, ptr %61)
br i1 %62, label %_llgo_41, label %_llgo_42 br i1 %63, label %_llgo_41, label %_llgo_42
_llgo_13: ; preds = %_llgo_43 _llgo_13: ; preds = %_llgo_43
%63 = load ptr, ptr @_llgo_string, align 8 %64 = load ptr, ptr @_llgo_string, align 8
%64 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @16, i64 17 }, ptr %64, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @16, i64 17 }, ptr %65, align 8
%65 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %63, 0 %66 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %64, 0
%66 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %65, ptr %64, 1 %67 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %66, ptr %65, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %66) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %67)
unreachable unreachable
_llgo_14: ; preds = %_llgo_43 _llgo_14: ; preds = %_llgo_43
%67 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %59) %68 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %60)
%68 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8 %69 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8
%70 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %60, 1
br i1 true, label %_llgo_44, label %_llgo_45 br i1 true, label %_llgo_44, label %_llgo_45
_llgo_15: ; preds = %_llgo_46 _llgo_15: ; preds = %_llgo_46
%69 = load ptr, ptr @_llgo_string, align 8 %71 = load ptr, ptr @_llgo_string, align 8
%70 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %72 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @17, i64 17 }, ptr %70, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @17, i64 17 }, ptr %72, align 8
%71 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %69, 0 %73 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %71, 0
%72 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %71, ptr %70, 1 %74 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %73, ptr %72, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %72) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %74)
unreachable unreachable
_llgo_16: ; preds = %_llgo_46 _llgo_16: ; preds = %_llgo_46
%73 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %59) %75 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %60)
%74 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8 %76 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8
%75 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %74, ptr %73) %77 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %76, ptr %75)
br i1 %75, label %_llgo_47, label %_llgo_48 br i1 %77, label %_llgo_47, label %_llgo_48
_llgo_17: ; preds = %_llgo_49 _llgo_17: ; preds = %_llgo_49
%76 = load ptr, ptr @_llgo_string, align 8 %78 = load ptr, ptr @_llgo_string, align 8
%77 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %79 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @18, i64 17 }, ptr %77, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @18, i64 17 }, ptr %79, align 8
%78 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %76, 0 %80 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %78, 0
%79 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %78, ptr %77, 1 %81 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %80, ptr %79, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %79) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %81)
unreachable unreachable
_llgo_18: ; preds = %_llgo_49 _llgo_18: ; preds = %_llgo_49
%80 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8 %82 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8
%81 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %83 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" zeroinitializer, ptr %81, align 1 store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" zeroinitializer, ptr %83, align 1
%82 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8 %84 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8
%83 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %82, ptr %80) %85 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %84, ptr %82)
%84 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %83, 0 %86 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %85, 0
%85 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %84, ptr %81, 1 %87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %86, ptr %83, 1
%86 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %85) %88 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %87)
%87 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %85, 1 %89 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %87, 1
%88 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %86, 0 %90 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %88, 0
%89 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %88, ptr %87, 1 %91 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %90, ptr %89, 1
%90 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %89, %"github.com/goplus/llgo/runtime/internal/runtime.eface" zeroinitializer) %92 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %91, %"github.com/goplus/llgo/runtime/internal/runtime.eface" zeroinitializer)
br i1 %90, label %_llgo_19, label %_llgo_20 br i1 %92, label %_llgo_19, label %_llgo_20
_llgo_19: ; preds = %_llgo_18 _llgo_19: ; preds = %_llgo_18
%91 = load ptr, ptr @_llgo_string, align 8 %93 = load ptr, ptr @_llgo_string, align 8
%92 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %94 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @19, i64 17 }, ptr %92, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @19, i64 17 }, ptr %94, align 8
%93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %91, 0 %95 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %93, 0
%94 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %93, ptr %92, 1 %96 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %95, ptr %94, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %94) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %96)
unreachable unreachable
_llgo_20: ; preds = %_llgo_18 _llgo_20: ; preds = %_llgo_18
%95 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %85) %97 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %87)
%96 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %85, 1 %98 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %87, 1
%97 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %95, 0 %99 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %97, 0
%98 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %97, ptr %96, 1 %100 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %99, ptr %98, 1
%99 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer) %101 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer)
%100 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %99, 0 %102 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %101, 0
%101 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %100, ptr null, 1 %103 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %102, ptr null, 1
%102 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %98, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %101) %104 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %100, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %103)
br i1 %102, label %_llgo_21, label %_llgo_22 br i1 %104, label %_llgo_21, label %_llgo_22
_llgo_21: ; preds = %_llgo_20 _llgo_21: ; preds = %_llgo_20
%103 = load ptr, ptr @_llgo_string, align 8 %105 = load ptr, ptr @_llgo_string, align 8
%104 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %106 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @20, i64 17 }, ptr %104, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @20, i64 17 }, ptr %106, align 8
%105 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %103, 0 %107 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %105, 0
%106 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %105, ptr %104, 1 %108 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %107, ptr %106, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %106) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %108)
unreachable unreachable
_llgo_22: ; preds = %_llgo_20 _llgo_22: ; preds = %_llgo_20
@@ -306,10 +308,10 @@ _llgo_24: ; preds = %_llgo_0
br label %_llgo_25 br label %_llgo_25
_llgo_25: ; preds = %_llgo_24, %_llgo_23 _llgo_25: ; preds = %_llgo_24, %_llgo_23
%107 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } [ { %"github.com/goplus/llgo/runtime/internal/runtime.eface" zeroinitializer, i1 true }, %_llgo_23 ], [ zeroinitializer, %_llgo_24 ] %109 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } [ { %"github.com/goplus/llgo/runtime/internal/runtime.eface" zeroinitializer, i1 true }, %_llgo_23 ], [ zeroinitializer, %_llgo_24 ]
%108 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %107, 0 %110 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %109, 0
%109 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %107, 1 %111 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %109, 1
br i1 %109, label %_llgo_1, label %_llgo_2 br i1 %111, label %_llgo_1, label %_llgo_2
_llgo_26: ; preds = %_llgo_2 _llgo_26: ; preds = %_llgo_2
br label %_llgo_28 br label %_llgo_28
@@ -318,10 +320,10 @@ _llgo_27: ; preds = %_llgo_2
br label %_llgo_28 br label %_llgo_28
_llgo_28: ; preds = %_llgo_27, %_llgo_26 _llgo_28: ; preds = %_llgo_27, %_llgo_26
%110 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ { %"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer, i1 true }, %_llgo_26 ], [ zeroinitializer, %_llgo_27 ] %112 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ { %"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer, i1 true }, %_llgo_26 ], [ zeroinitializer, %_llgo_27 ]
%111 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %110, 0 %113 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %112, 0
%112 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %110, 1 %114 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %112, 1
br i1 %112, label %_llgo_3, label %_llgo_4 br i1 %114, label %_llgo_3, label %_llgo_4
_llgo_29: ; preds = %_llgo_4 _llgo_29: ; preds = %_llgo_4
br label %_llgo_31 br label %_llgo_31
@@ -330,110 +332,110 @@ _llgo_30: ; preds = %_llgo_4
br label %_llgo_31 br label %_llgo_31
_llgo_31: ; preds = %_llgo_30, %_llgo_29 _llgo_31: ; preds = %_llgo_30, %_llgo_29
%113 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ { %"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer, i1 true }, %_llgo_29 ], [ zeroinitializer, %_llgo_30 ] %115 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ { %"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer, i1 true }, %_llgo_29 ], [ zeroinitializer, %_llgo_30 ]
%114 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %113, 0 %116 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %115, 0
%115 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %113, 1 %117 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %115, 1
br i1 %115, label %_llgo_5, label %_llgo_6 br i1 %117, label %_llgo_5, label %_llgo_6
_llgo_32: ; preds = %_llgo_6 _llgo_32: ; preds = %_llgo_6
%116 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 1 %118 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 1
%117 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %34, 0 %119 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %34, 0
%118 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %117, ptr %116, 1 %120 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %119, ptr %118, 1
%119 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %118, 0 %121 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %120, 0
%120 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %119, i1 true, 1 %122 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %121, i1 true, 1
br label %_llgo_34 br label %_llgo_34
_llgo_33: ; preds = %_llgo_6 _llgo_33: ; preds = %_llgo_6
br label %_llgo_34 br label %_llgo_34
_llgo_34: ; preds = %_llgo_33, %_llgo_32 _llgo_34: ; preds = %_llgo_33, %_llgo_32
%121 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } [ %120, %_llgo_32 ], [ zeroinitializer, %_llgo_33 ] %123 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } [ %122, %_llgo_32 ], [ zeroinitializer, %_llgo_33 ]
%122 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %121, 0 %124 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %123, 0
%123 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %121, 1 %125 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %123, 1
br i1 %123, label %_llgo_8, label %_llgo_7 br i1 %125, label %_llgo_8, label %_llgo_7
_llgo_35: ; preds = %_llgo_8 _llgo_35: ; preds = %_llgo_8
%124 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 0 %126 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 0
%125 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %124, i1 true, 1 %127 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %126, i1 true, 1
br label %_llgo_37 br label %_llgo_37
_llgo_36: ; preds = %_llgo_8 _llgo_36: ; preds = %_llgo_8
br label %_llgo_37 br label %_llgo_37
_llgo_37: ; preds = %_llgo_36, %_llgo_35 _llgo_37: ; preds = %_llgo_36, %_llgo_35
%126 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %125, %_llgo_35 ], [ zeroinitializer, %_llgo_36 ] %128 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %127, %_llgo_35 ], [ zeroinitializer, %_llgo_36 ]
%127 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %126, 0 %129 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %128, 0
%128 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %126, 1 %130 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %128, 1
br i1 %128, label %_llgo_10, label %_llgo_9 br i1 %130, label %_llgo_10, label %_llgo_9
_llgo_38: ; preds = %_llgo_10 _llgo_38: ; preds = %_llgo_10
%129 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 1 %131 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 1
%130 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw", align 8 %132 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw", align 8
%131 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %130, ptr %47) %133 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %132, ptr %48)
%132 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %131, 0 %134 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %133, 0
%133 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %132, ptr %129, 1 %135 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %134, ptr %131, 1
%134 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %133, 0 %136 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %135, 0
%135 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %134, i1 true, 1 %137 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %136, i1 true, 1
br label %_llgo_40 br label %_llgo_40
_llgo_39: ; preds = %_llgo_10 _llgo_39: ; preds = %_llgo_10
br label %_llgo_40 br label %_llgo_40
_llgo_40: ; preds = %_llgo_39, %_llgo_38 _llgo_40: ; preds = %_llgo_39, %_llgo_38
%136 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %135, %_llgo_38 ], [ zeroinitializer, %_llgo_39 ] %138 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %137, %_llgo_38 ], [ zeroinitializer, %_llgo_39 ]
%137 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %136, 0 %139 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %138, 0
%138 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %136, 1 %140 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %138, 1
br i1 %138, label %_llgo_11, label %_llgo_12 br i1 %140, label %_llgo_11, label %_llgo_12
_llgo_41: ; preds = %_llgo_12 _llgo_41: ; preds = %_llgo_12
%139 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, 1 %141 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %60, 1
%140 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %60, 0 %142 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %61, 0
%141 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %140, ptr %139, 1 %143 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %142, ptr %141, 1
%142 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %141, 0 %144 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %143, 0
%143 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %142, i1 true, 1 %145 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %144, i1 true, 1
br label %_llgo_43 br label %_llgo_43
_llgo_42: ; preds = %_llgo_12 _llgo_42: ; preds = %_llgo_12
br label %_llgo_43 br label %_llgo_43
_llgo_43: ; preds = %_llgo_42, %_llgo_41 _llgo_43: ; preds = %_llgo_42, %_llgo_41
%144 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } [ %143, %_llgo_41 ], [ zeroinitializer, %_llgo_42 ] %146 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } [ %145, %_llgo_41 ], [ zeroinitializer, %_llgo_42 ]
%145 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %144, 0 %147 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %146, 0
%146 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %144, 1 %148 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.eface", i1 } %146, 1
br i1 %146, label %_llgo_14, label %_llgo_13 br i1 %148, label %_llgo_14, label %_llgo_13
_llgo_44: ; preds = %_llgo_14 _llgo_44: ; preds = %_llgo_14
%147 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, 0 %149 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %60, 0
%148 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %147, i1 true, 1 %150 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %149, i1 true, 1
br label %_llgo_46 br label %_llgo_46
_llgo_45: ; preds = %_llgo_14 _llgo_45: ; preds = %_llgo_14
br label %_llgo_46 br label %_llgo_46
_llgo_46: ; preds = %_llgo_45, %_llgo_44 _llgo_46: ; preds = %_llgo_45, %_llgo_44
%149 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %148, %_llgo_44 ], [ zeroinitializer, %_llgo_45 ] %151 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %150, %_llgo_44 ], [ zeroinitializer, %_llgo_45 ]
%150 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %149, 0 %152 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %151, 0
%151 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %149, 1 %153 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %151, 1
br i1 %151, label %_llgo_16, label %_llgo_15 br i1 %153, label %_llgo_16, label %_llgo_15
_llgo_47: ; preds = %_llgo_16 _llgo_47: ; preds = %_llgo_16
%152 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, 1 %154 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %60, 1
%153 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw", align 8 %155 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw", align 8
%154 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %153, ptr %73) %156 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %155, ptr %75)
%155 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %154, 0 %157 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %156, 0
%156 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %155, ptr %152, 1 %158 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %157, ptr %154, 1
%157 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %156, 0 %159 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %158, 0
%158 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %157, i1 true, 1 %160 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %159, i1 true, 1
br label %_llgo_49 br label %_llgo_49
_llgo_48: ; preds = %_llgo_16 _llgo_48: ; preds = %_llgo_16
br label %_llgo_49 br label %_llgo_49
_llgo_49: ; preds = %_llgo_48, %_llgo_47 _llgo_49: ; preds = %_llgo_48, %_llgo_47
%159 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %158, %_llgo_47 ], [ zeroinitializer, %_llgo_48 ] %161 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %160, %_llgo_47 ], [ zeroinitializer, %_llgo_48 ]
%160 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %159, 0 %162 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %161, 0
%161 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %159, 1 %163 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %161, 1
br i1 %161, label %_llgo_18, label %_llgo_17 br i1 %163, label %_llgo_18, label %_llgo_17
} }
define void @"github.com/goplus/llgo/cl/_testgo/ifaceconv.init$after"() { define void @"github.com/goplus/llgo/cl/_testgo/ifaceconv.init$after"() {

View File

@@ -203,111 +203,115 @@ _llgo_4: ; preds = %_llgo_2
%43 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %42, align 8 %43 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %42, align 8
%44 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %43) %44 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %43)
%45 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %45 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%46 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %43, 1
br i1 true, label %_llgo_17, label %_llgo_18 br i1 true, label %_llgo_17, label %_llgo_18
_llgo_5: ; preds = %_llgo_17 _llgo_5: ; preds = %_llgo_17
%46 = load ptr, ptr @_llgo_int, align 8 %47 = load ptr, ptr @_llgo_int, align 8
%47 = inttoptr i64 %113 to ptr %48 = inttoptr i64 %117 to ptr
%48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %46, 0 %49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %47, 0
%49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %48, ptr %47, 1 %50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %49, ptr %48, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %49) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %50)
unreachable unreachable
_llgo_6: ; preds = %_llgo_17 _llgo_6: ; preds = %_llgo_17
%50 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 %51 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8
%51 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %50, 0 %52 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %51, 0
%52 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %51) %53 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %52)
%53 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %54 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%55 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %52, 1
br i1 true, label %_llgo_19, label %_llgo_20 br i1 true, label %_llgo_19, label %_llgo_20
_llgo_7: ; preds = %_llgo_19 _llgo_7: ; preds = %_llgo_19
%54 = load ptr, ptr @_llgo_int, align 8 %56 = load ptr, ptr @_llgo_int, align 8
%55 = inttoptr i64 %124 to ptr %57 = inttoptr i64 %128 to ptr
%56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %54, 0 %58 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %56, 0
%57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %56, ptr %55, 1 %59 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %58, ptr %57, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %57) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %59)
unreachable unreachable
_llgo_8: ; preds = %_llgo_19 _llgo_8: ; preds = %_llgo_19
%58 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %60 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0
%59 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %58, align 8 %61 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %60, align 8
%60 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %59) %62 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %61)
%61 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, 0 %63 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %61, 0
%62 = getelementptr ptr, ptr %61, i64 4 %64 = getelementptr ptr, ptr %63, i64 4
%63 = load ptr, ptr %62, align 8 %65 = load ptr, ptr %64, align 8
%64 = insertvalue { ptr, ptr } undef, ptr %63, 0 %66 = insertvalue { ptr, ptr } undef, ptr %65, 0
%65 = insertvalue { ptr, ptr } %64, ptr %60, 1 %67 = insertvalue { ptr, ptr } %66, ptr %62, 1
%66 = extractvalue { ptr, ptr } %65, 1 %68 = extractvalue { ptr, ptr } %67, 1
%67 = extractvalue { ptr, ptr } %65, 0 %69 = extractvalue { ptr, ptr } %67, 0
%68 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %67(ptr %66) %70 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %69(ptr %68)
%69 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %68, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %71 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %70, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%70 = xor i1 %69, true %72 = xor i1 %71, true
br i1 %70, label %_llgo_9, label %_llgo_10 br i1 %72, label %_llgo_9, label %_llgo_10
_llgo_9: ; preds = %_llgo_8 _llgo_9: ; preds = %_llgo_8
%71 = load ptr, ptr @_llgo_string, align 8 %73 = load ptr, ptr @_llgo_string, align 8
%72 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %74 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %68, ptr %72, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %70, ptr %74, align 8
%73 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %71, 0 %75 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %73, 0
%74 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %73, ptr %72, 1 %76 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %75, ptr %74, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %74) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %76)
unreachable unreachable
_llgo_10: ; preds = %_llgo_8 _llgo_10: ; preds = %_llgo_8
%75 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 %77 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8
%76 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %75, 0 %78 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %77, 0
%77 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %76) %79 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %78)
%78 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %76, 0 %80 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %78, 0
%79 = getelementptr ptr, ptr %78, i64 4 %81 = getelementptr ptr, ptr %80, i64 4
%80 = load ptr, ptr %79, align 8 %82 = load ptr, ptr %81, align 8
%81 = insertvalue { ptr, ptr } undef, ptr %80, 0 %83 = insertvalue { ptr, ptr } undef, ptr %82, 0
%82 = insertvalue { ptr, ptr } %81, ptr %77, 1 %84 = insertvalue { ptr, ptr } %83, ptr %79, 1
%83 = extractvalue { ptr, ptr } %82, 1 %85 = extractvalue { ptr, ptr } %84, 1
%84 = extractvalue { ptr, ptr } %82, 0 %86 = extractvalue { ptr, ptr } %84, 0
%85 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %84(ptr %83) %87 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %86(ptr %85)
%86 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %85, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %88 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %87, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%87 = xor i1 %86, true %89 = xor i1 %88, true
br i1 %87, label %_llgo_11, label %_llgo_12 br i1 %89, label %_llgo_11, label %_llgo_12
_llgo_11: ; preds = %_llgo_10 _llgo_11: ; preds = %_llgo_10
%88 = load ptr, ptr @_llgo_string, align 8 %90 = load ptr, ptr @_llgo_string, align 8
%89 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %85, ptr %89, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %87, ptr %91, align 8
%90 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %88, 0 %92 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %90, 0
%91 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %90, ptr %89, 1 %93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %92, ptr %91, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %91) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %93)
unreachable unreachable
_llgo_12: ; preds = %_llgo_10 _llgo_12: ; preds = %_llgo_10
%92 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %94 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0
%93 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %92, align 8 %95 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %94, align 8
%94 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %93) %96 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %95)
%95 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %97 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%98 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %95, 1
br i1 true, label %_llgo_21, label %_llgo_22 br i1 true, label %_llgo_21, label %_llgo_22
_llgo_13: ; preds = %_llgo_21 _llgo_13: ; preds = %_llgo_21
%96 = load ptr, ptr @_llgo_string, align 8 %99 = load ptr, ptr @_llgo_string, align 8
%97 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %100 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %135, ptr %97, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %139, ptr %100, align 8
%98 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %96, 0 %101 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %99, 0
%99 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %98, ptr %97, 1 %102 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %101, ptr %100, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %99) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %102)
unreachable unreachable
_llgo_14: ; preds = %_llgo_21 _llgo_14: ; preds = %_llgo_21
%100 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 %103 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8
%101 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %100, 0 %104 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %103, 0
%102 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %101) %105 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %104)
%103 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %106 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%107 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %104, 1
br i1 true, label %_llgo_23, label %_llgo_24 br i1 true, label %_llgo_23, label %_llgo_24
_llgo_15: ; preds = %_llgo_23 _llgo_15: ; preds = %_llgo_23
%104 = load ptr, ptr @_llgo_string, align 8 %108 = load ptr, ptr @_llgo_string, align 8
%105 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %109 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %147, ptr %105, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %151, ptr %109, align 8
%106 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %104, 0 %110 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %108, 0
%107 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %106, ptr %105, 1 %111 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %110, ptr %109, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %107) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %111)
unreachable unreachable
_llgo_16: ; preds = %_llgo_23 _llgo_16: ; preds = %_llgo_23
@@ -316,85 +320,85 @@ _llgo_16: ; preds = %_llgo_23
ret void ret void
_llgo_17: ; preds = %_llgo_4 _llgo_17: ; preds = %_llgo_4
%108 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %112 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%109 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %108, i32 0, i32 0 %113 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %112, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %43, ptr %109, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %43, ptr %113, align 8
%110 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %108, 1 %114 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %112, 1
%111 = extractvalue { ptr, ptr } %110, 1 %115 = extractvalue { ptr, ptr } %114, 1
%112 = extractvalue { ptr, ptr } %110, 0 %116 = extractvalue { ptr, ptr } %114, 0
%113 = call i64 %112(ptr %111) %117 = call i64 %116(ptr %115)
%114 = icmp ne i64 %113, 1 %118 = icmp ne i64 %117, 1
br i1 %114, label %_llgo_5, label %_llgo_6 br i1 %118, label %_llgo_5, label %_llgo_6
_llgo_18: ; preds = %_llgo_4 _llgo_18: ; preds = %_llgo_4
%115 = load ptr, ptr @_llgo_string, align 8 %119 = load ptr, ptr @_llgo_string, align 8
%116 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %120 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %116, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %120, align 8
%117 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %115, 0 %121 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %119, 0
%118 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %117, ptr %116, 1 %122 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %121, ptr %120, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %118) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %122)
unreachable unreachable
_llgo_19: ; preds = %_llgo_6 _llgo_19: ; preds = %_llgo_6
%119 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %123 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%120 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %119, i32 0, i32 0 %124 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %123, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %51, ptr %120, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %52, ptr %124, align 8
%121 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %119, 1 %125 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %123, 1
%122 = extractvalue { ptr, ptr } %121, 1 %126 = extractvalue { ptr, ptr } %125, 1
%123 = extractvalue { ptr, ptr } %121, 0 %127 = extractvalue { ptr, ptr } %125, 0
%124 = call i64 %123(ptr %122) %128 = call i64 %127(ptr %126)
%125 = icmp ne i64 %124, 1 %129 = icmp ne i64 %128, 1
br i1 %125, label %_llgo_7, label %_llgo_8 br i1 %129, label %_llgo_7, label %_llgo_8
_llgo_20: ; preds = %_llgo_6 _llgo_20: ; preds = %_llgo_6
%126 = load ptr, ptr @_llgo_string, align 8 %130 = load ptr, ptr @_llgo_string, align 8
%127 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %131 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %127, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %131, align 8
%128 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %126, 0 %132 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %130, 0
%129 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %128, ptr %127, 1 %133 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %132, ptr %131, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %129) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %133)
unreachable unreachable
_llgo_21: ; preds = %_llgo_12 _llgo_21: ; preds = %_llgo_12
%130 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %134 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%131 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %130, i32 0, i32 0 %135 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %134, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %93, ptr %131, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %95, ptr %135, align 8
%132 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %130, 1 %136 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %134, 1
%133 = extractvalue { ptr, ptr } %132, 1 %137 = extractvalue { ptr, ptr } %136, 1
%134 = extractvalue { ptr, ptr } %132, 0 %138 = extractvalue { ptr, ptr } %136, 0
%135 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %134(ptr %133) %139 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %138(ptr %137)
%136 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %135, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %140 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %139, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%137 = xor i1 %136, true %141 = xor i1 %140, true
br i1 %137, label %_llgo_13, label %_llgo_14 br i1 %141, label %_llgo_13, label %_llgo_14
_llgo_22: ; preds = %_llgo_12 _llgo_22: ; preds = %_llgo_12
%138 = load ptr, ptr @_llgo_string, align 8 %142 = load ptr, ptr @_llgo_string, align 8
%139 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %143 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %139, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %143, align 8
%140 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %138, 0 %144 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %142, 0
%141 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %140, ptr %139, 1 %145 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %144, ptr %143, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %141) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %145)
unreachable unreachable
_llgo_23: ; preds = %_llgo_14 _llgo_23: ; preds = %_llgo_14
%142 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %146 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%143 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %142, i32 0, i32 0 %147 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %146, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %101, ptr %143, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %104, ptr %147, align 8
%144 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %142, 1 %148 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %146, 1
%145 = extractvalue { ptr, ptr } %144, 1 %149 = extractvalue { ptr, ptr } %148, 1
%146 = extractvalue { ptr, ptr } %144, 0 %150 = extractvalue { ptr, ptr } %148, 0
%147 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %146(ptr %145) %151 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %150(ptr %149)
%148 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %147, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %152 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %151, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%149 = xor i1 %148, true %153 = xor i1 %152, true
br i1 %149, label %_llgo_15, label %_llgo_16 br i1 %153, label %_llgo_15, label %_llgo_16
_llgo_24: ; preds = %_llgo_14 _llgo_24: ; preds = %_llgo_14
%150 = load ptr, ptr @_llgo_string, align 8 %154 = load ptr, ptr @_llgo_string, align 8
%151 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %155 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %151, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %155, align 8
%152 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %150, 0 %156 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %154, 0
%153 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %152, ptr %151, 1 %157 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %156, ptr %155, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %153) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %157)
unreachable unreachable
} }

View File

@@ -393,48 +393,49 @@ _llgo_1: ; preds = %_llgo_0
call void @"github.com/goplus/llgo/cl/_testgo/invoke.invoke"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %124) call void @"github.com/goplus/llgo/cl/_testgo/invoke.invoke"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %124)
%125 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %116, 0 %125 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %116, 0
%126 = load ptr, ptr @_llgo_any, align 8 %126 = load ptr, ptr @_llgo_any, align 8
%127 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %116, 1
br i1 true, label %_llgo_3, label %_llgo_4 br i1 true, label %_llgo_3, label %_llgo_4
_llgo_2: ; preds = %_llgo_0 _llgo_2: ; preds = %_llgo_0
%127 = load ptr, ptr @_llgo_string, align 8 %128 = load ptr, ptr @_llgo_string, align 8
%128 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %129 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 71 }, ptr %128, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 71 }, ptr %129, align 8
%129 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %127, 0 %130 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %128, 0
%130 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %129, ptr %128, 1 %131 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %130, ptr %129, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %130) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %131)
unreachable unreachable
_llgo_3: ; preds = %_llgo_1 _llgo_3: ; preds = %_llgo_1
%131 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %116, 0 %132 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %116, 0
%132 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 %133 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8
%133 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %132, ptr %131) %134 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %133, ptr %132)
br i1 %133, label %_llgo_5, label %_llgo_6 br i1 %134, label %_llgo_5, label %_llgo_6
_llgo_4: ; preds = %_llgo_1 _llgo_4: ; preds = %_llgo_1
%134 = load ptr, ptr @_llgo_string, align 8 %135 = load ptr, ptr @_llgo_string, align 8
%135 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %136 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 32 }, ptr %135, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 32 }, ptr %136, align 8
%136 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %134, 0 %137 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %135, 0
%137 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %136, ptr %135, 1 %138 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %137, ptr %136, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %137) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %138)
unreachable unreachable
_llgo_5: ; preds = %_llgo_3 _llgo_5: ; preds = %_llgo_3
%138 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %116, 1 %139 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %116, 1
%139 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 %140 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8
%140 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %139, ptr %131) %141 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %140, ptr %132)
%141 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %140, 0 %142 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %141, 0
%142 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %141, ptr %138, 1 %143 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %142, ptr %139, 1
call void @"github.com/goplus/llgo/cl/_testgo/invoke.invoke"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %142) call void @"github.com/goplus/llgo/cl/_testgo/invoke.invoke"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %143)
ret void ret void
_llgo_6: ; preds = %_llgo_3 _llgo_6: ; preds = %_llgo_3
%143 = load ptr, ptr @_llgo_string, align 8 %144 = load ptr, ptr @_llgo_string, align 8
%144 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %145 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @26, i64 52 }, ptr %144, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @26, i64 52 }, ptr %145, align 8
%145 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %143, 0 %146 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %144, 0
%146 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %145, ptr %144, 1 %147 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %146, ptr %145, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %146) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %147)
unreachable unreachable
} }

View File

@@ -241,11 +241,10 @@ func (b Builder) TypeAssert(x Expr, assertedTyp Type, commaOk bool) Expr {
} }
tx := b.faceAbiType(x) tx := b.faceAbiType(x)
tabi := b.abiType(assertedTyp.raw.Type) tabi := b.abiType(assertedTyp.raw.Type)
var eq Expr var eq Expr
var val func() Expr var val func() Expr
if x.RawType() == assertedTyp.RawType() { if x.RawType() == assertedTyp.RawType() {
eq = b.Const(constant.MakeBool(true), b.Prog.Bool()) eq = b.Const(constant.MakeBool(!b.faceData(x.impl).IsNull()), b.Prog.Bool())
val = func() Expr { return x } val = func() Expr { return x }
} else { } else {
if rawIntf, ok := assertedTyp.raw.Type.Underlying().(*types.Interface); ok { if rawIntf, ok := assertedTyp.raw.Type.Underlying().(*types.Interface); ok {