Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 65 additions & 38 deletions cl/_testgo/cgodefer/cgodefer.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ package main
*/
import "C"

func main() {
p := C.malloc(1024)
defer C.free(p)
}

// CHECK-LABEL: define [0 x i8] @main._Cfunc_free(ptr %0){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %1 = call ptr @"{{.*}}/runtime/internal/runtime.AllocZ"(i64 8)
Expand All @@ -15,6 +20,27 @@ import "C"
// CHECK-NEXT: ret [0 x i8] %4
// CHECK-NEXT: }

// CHECK-LABEL: define ptr @main._Cgo_ptr(ptr %0){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: ret ptr %0
// CHECK-NEXT: }

// CHECK-LABEL: define void @main.init(){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %0 = load i1, ptr @"main.init$guard", align 1
// CHECK-NEXT: br i1 %0, label %_llgo_2, label %_llgo_1
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_1: ; preds = %_llgo_0
// CHECK-NEXT: store i1 true, ptr @"main.init$guard", align 1
// CHECK-NEXT: call void @syscall.init()
// CHECK-NEXT: store ptr @_cgo_{{.*}}_Cfunc_free, ptr @main._cgo_{{.*}}_Cfunc_free, align 8
// CHECK-NEXT: store ptr @_cgo_{{.*}}_Cfunc__Cmalloc, ptr @main._cgo_{{.*}}_Cfunc__Cmalloc, align 8
// CHECK-NEXT: br label %_llgo_2
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_2: ; preds = %_llgo_1, %_llgo_0
// CHECK-NEXT: ret void
// CHECK-NEXT: }

// CHECK-LABEL: define void @main.main(){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %0 = call ptr @"{{.*}}/runtime/internal/runtime.AllocZ"(i64 8)
Expand Down Expand Up @@ -45,7 +71,7 @@ import "C"
// CHECK-NEXT: %17 = getelementptr inbounds %"{{.*}}/runtime/internal/runtime.Defer", ptr %10, i32 0, i32 4
// CHECK-NEXT: %18 = getelementptr inbounds %"{{.*}}/runtime/internal/runtime.Defer", ptr %10, i32 0, i32 5
// CHECK-NEXT: store ptr null, ptr %18, align 8
// CHECK-NEXT: %19 = call i32 @{{.*}}sigsetjmp(ptr %9, i32 0)
// CHECK-NEXT: %19 = call i32 @{{(__)?}}sigsetjmp(ptr %9, i32 0)
// CHECK-NEXT: %20 = icmp eq i32 %19, 0
// CHECK-NEXT: br i1 %20, label %_llgo_4, label %_llgo_5
// CHECK-EMPTY:
Expand Down Expand Up @@ -91,44 +117,45 @@ import "C"
// CHECK-NEXT: store ptr %32, ptr %18, align 8
// CHECK-NEXT: %33 = extractvalue { ptr, i64, { ptr, ptr } } %31, 2
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.FreeDeferNode"(ptr %30)
// CHECK-NEXT: %34 = extractvalue { ptr, ptr } %33, 1
// CHECK-NEXT: %35 = extractvalue { ptr, ptr } %33, 0
// CHECK-NEXT: %__llgo_funcval_code1 = call ptr asm "", "=r,0"(ptr %35)
// CHECK-NEXT: call void %__llgo_funcval_code1(ptr {{(nest|swiftself)}} %34)
// CHECK-NEXT: %34 = extractvalue { ptr, ptr } %33, 0
// CHECK-NEXT: %35 = call ptr @"{{.*}}/runtime/internal/runtime.StartRecoverFrame"(ptr %34)
// CHECK-NEXT: %36 = extractvalue { ptr, ptr } %33, 1
// CHECK-NEXT: %37 = extractvalue { ptr, ptr } %33, 0
// CHECK-NEXT: %__llgo_funcval_code1 = call ptr asm "", "=r,0"(ptr %37)
// CHECK-NEXT: call void %__llgo_funcval_code1(ptr {{(nest|swiftself)}} %36)
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.EndRecoverFrame"(ptr %35)
// CHECK-NEXT: br label %_llgo_8
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_8: ; preds = %_llgo_7, %_llgo_2
// CHECK-NEXT: %36 = load %"{{.*}}/runtime/internal/runtime.Defer", ptr %10, align 8
// CHECK-NEXT: %37 = extractvalue %"{{.*}}/runtime/internal/runtime.Defer" %36, 2
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.SetThreadDefer"(ptr %37)
// CHECK-NEXT: %38 = load ptr, ptr %17, align 8
// CHECK-NEXT: indirectbr ptr %38, [label %_llgo_3, label %_llgo_6]
// CHECK-NEXT: %38 = load %"{{.*}}/runtime/internal/runtime.Defer", ptr %10, align 8
// CHECK-NEXT: %39 = extractvalue %"{{.*}}/runtime/internal/runtime.Defer" %38, 2
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.SetThreadDefer"(ptr %39)
// CHECK-NEXT: %40 = load ptr, ptr %17, align 8
// CHECK-NEXT: indirectbr ptr %40, [label %_llgo_3, label %_llgo_6]
// CHECK-NEXT: }

// CHECK-LABEL: define { ptr, ptr } @"main.main$1"(ptr {{(nest|swiftself)}} %0){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %1 = call ptr @"{{.*}}/runtime/internal/runtime.AllocZ"(i64 8)
// CHECK-NEXT: %2 = load { ptr }, ptr %0, align 8
// CHECK-NEXT: %3 = extractvalue { ptr } %2, 0
// CHECK-NEXT: %4 = load ptr, ptr %3, align 8
// CHECK-NEXT: store ptr %4, ptr %1, align 8
// CHECK-NEXT: %5 = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 8)
// CHECK-NEXT: %6 = getelementptr inbounds { ptr }, ptr %5, i32 0, i32 0
// CHECK-NEXT: store ptr %1, ptr %6, align 8
// CHECK-NEXT: %7 = insertvalue { ptr, ptr } { ptr @"main.main$1$1", ptr undef }, ptr %5, 1
// CHECK-NEXT: ret { ptr, ptr } %7
// CHECK-NEXT: }

// CHECK-LABEL: define void @"main.main$1$1"(ptr {{(nest|swiftself)}} %0){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %1 = load { ptr }, ptr %0, align 8
// CHECK-NEXT: %2 = extractvalue { ptr } %1, 0
// CHECK-NEXT: %3 = load ptr, ptr %2, align 8
// CHECK-NEXT: %4 = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_Pointer, ptr undef }, ptr %3, 1
// CHECK-NEXT: %5 = extractvalue { ptr } %1, 0
// CHECK-NEXT: %6 = load ptr, ptr %5, align 8
// CHECK-NEXT: %7 = call [0 x i8] @main._Cfunc_free(ptr %6)
// CHECK-NEXT: ret void
// CHECK-NEXT: }
func main() {
// CHECK-LABEL: define { ptr, ptr } @"main.main$1"(ptr {{(nest|swiftself)}} %0){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %1 = call ptr @"{{.*}}/runtime/internal/runtime.AllocZ"(i64 8)
// CHECK-NEXT: %2 = load { ptr }, ptr %0, align 8
// CHECK-NEXT: %3 = extractvalue { ptr } %2, 0
// CHECK-NEXT: %4 = load ptr, ptr %3, align 8
// CHECK-NEXT: store ptr %4, ptr %1, align 8
// CHECK-NEXT: %5 = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 8)
// CHECK-NEXT: %6 = getelementptr inbounds { ptr }, ptr %5, i32 0, i32 0
// CHECK-NEXT: store ptr %1, ptr %6, align 8
// CHECK-NEXT: %7 = insertvalue { ptr, ptr } { ptr @"main.main$1$1", ptr undef }, ptr %5, 1
// CHECK-NEXT: ret { ptr, ptr } %7
// CHECK-NEXT: }
p := C.malloc(1024)
// CHECK-LABEL: define void @"main.main$1$1"(ptr {{(nest|swiftself)}} %0){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %1 = load { ptr }, ptr %0, align 8
// CHECK-NEXT: %2 = extractvalue { ptr } %1, 0
// CHECK-NEXT: %3 = load ptr, ptr %2, align 8
// CHECK-NEXT: %4 = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_Pointer, ptr undef }, ptr %3, 1
// CHECK-NEXT: %5 = extractvalue { ptr } %1, 0
// CHECK-NEXT: %6 = load ptr, ptr %5, align 8
// CHECK-NEXT: %7 = call [0 x i8] @main._Cfunc_free(ptr %6)
// CHECK-NEXT: ret void
// CHECK-NEXT: }
defer C.free(p)
}
63 changes: 33 additions & 30 deletions cl/_testgo/closureall/in.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import _ "unsafe" // for go:linkname

import "github.com/goplus/lib/c"

// CHECK: @0 = private unnamed_addr constant [46 x i8] c"{{.*}}/cl/_testgo/closureall.S", align 1
// CHECK: @1 = private unnamed_addr constant [3 x i8] c"Inc", align 1
// CHECK: @7 = private unnamed_addr constant [3 x i8] c"Add", align 1
// CHECK: @9 = private unnamed_addr constant [23 x i8] c"interface{Add(int) int}", align 1
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [46 x i8] c"{{.*}}/cl/_testgo/closureall.S", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [3 x i8] c"Inc", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [3 x i8] c"Add", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [23 x i8] c"interface{Add(int) int}", align 1{{$}}

//go:linkname cSqrt C.sqrt
func cSqrt(x c.Double) c.Double
Expand All @@ -30,29 +30,10 @@ type S struct {
v int
}

// CHECK-LABEL: define i64 @main.S.Inc(%main.S %0, i64 %1){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %2 = alloca %main.S, align 8
// CHECK-NEXT: call void @llvm.memset.p0.i64(ptr %2, i8 0, i64 8, i1 false)
// CHECK-NEXT: store %main.S %0, ptr %2, align 8
// CHECK-NEXT: %3 = getelementptr inbounds %main.S, ptr %2, i32 0, i32 0
// CHECK-NEXT: %4 = load i64, ptr %3, align 8
// CHECK-NEXT: %5 = add i64 %4, %1
// CHECK-NEXT: ret i64 %5
// CHECK-NEXT: }

func (s S) Inc(x int) int {
return s.v + x
}

// CHECK-LABEL: define i64 @"main.(*S).Add"(ptr %0, i64 %1){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %2 = getelementptr inbounds %main.S, ptr %0, i32 0, i32 0
// CHECK-NEXT: %3 = load i64, ptr %2, align 8
// CHECK-NEXT: %4 = add i64 %3, %1
// CHECK-NEXT: ret i64 %4
// CHECK-NEXT: }

func (s *S) Add(x int) int {
return s.v + x
}
Expand Down Expand Up @@ -100,10 +81,29 @@ func makeWithFree(base int) Fn {
return func(x int) int { return x + base }
}

// CHECK-LABEL: define i64 @main.S.Inc(%main.S %0, i64 %1){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %2 = alloca %main.S, align 8
// CHECK-NEXT: call void @llvm.memset.p0.i64(ptr %2, i8 0, i64 8, i1 false)
// CHECK-NEXT: store %main.S %0, ptr %2, align 8
// CHECK-NEXT: %3 = getelementptr inbounds %main.S, ptr %2, i32 0, i32 0
// CHECK-NEXT: %4 = load i64, ptr %3, align 8
// CHECK-NEXT: %5 = add i64 %4, %1
// CHECK-NEXT: ret i64 %5
// CHECK-NEXT: }

// CHECK-LABEL: define i64 @"main.(*S).Add"(ptr %0, i64 %1){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %2 = getelementptr inbounds %main.S, ptr %0, i32 0, i32 0
// CHECK-NEXT: %3 = load i64, ptr %2, align 8
// CHECK-NEXT: %4 = add i64 %3, %1
// CHECK-NEXT: ret i64 %4
// CHECK-NEXT: }

// CHECK-LABEL: define i64 @"main.(*S).Inc"(ptr %0, i64 %1){{.*}} {
// CHECK-NEXT: _llgo_0:
// CHECK-NEXT: %2 = icmp eq ptr %0, null
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PanicWrapNilPointer"(i1 %2, %"{{.*}}/runtime/internal/runtime.String" { ptr @0, i64 46 }, %"{{.*}}/runtime/internal/runtime.String" { ptr @1, i64 3 })
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PanicWrapNilPointer"(i1 %2, %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 46 }, %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 3 })
// CHECK-NEXT: %3 = load %main.S, ptr %0, align 8
// CHECK-NEXT: %4 = call i64 @main.S.Inc(%main.S %3, i64 %1)
// CHECK-NEXT: ret i64 %4
Expand Down Expand Up @@ -184,13 +184,13 @@ func makeWithFree(base int) Fn {
// CHECK-NEXT: %27 = extractvalue { ptr, ptr } %25, 0
// CHECK-NEXT: %__llgo_funcval_code3 = call ptr asm "", "=r,0"(ptr %27)
// CHECK-NEXT: %28 = call i64 %__llgo_funcval_code3(ptr {{(nest|swiftself)}} %26, i64 9)
// CHECK-NEXT: %29 = call double @sqrt(double 4.000000e+00)
// CHECK-NEXT: %29 = call double @{{(sqrt|main.cSqrt)}}(double 4.000000e+00)
// CHECK-NEXT: %30 = call i32 @main.callCInt({ ptr, ptr } { ptr @abs, ptr null }, i32 -3)
// CHECK-NEXT: %31 = call i32 @main.callCallback(ptr @"main.main$1", i32 7)
// CHECK-NEXT: ret void
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_2: ; preds = %_llgo_0
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PanicTypeAssert"(ptr %21, %"{{.*}}/runtime/internal/runtime.String" { ptr @9, i64 23 }, %"{{.*}}/runtime/internal/runtime.String" { ptr @7, i64 3 })
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PanicTypeAssert"(ptr %21, %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 23 }, %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 3 })
// CHECK-NEXT: unreachable
// CHECK-NEXT: }

Expand Down Expand Up @@ -258,8 +258,11 @@ func makeWithFree(base int) Fn {
// CHECK-NEXT: %7 = load ptr, ptr %6, align 8
// CHECK-NEXT: %8 = insertvalue { ptr, ptr } undef, ptr %7, 0
// CHECK-NEXT: %9 = insertvalue { ptr, ptr } %8, ptr %4, 1
// CHECK-NEXT: %10 = extractvalue { ptr, ptr } %9, 1
// CHECK-NEXT: %11 = extractvalue { ptr, ptr } %9, 0
// CHECK-NEXT: %12 = call i64 %11(ptr %10, i64 %1)
// CHECK-NEXT: ret i64 %12
// CHECK-NEXT: %10 = extractvalue { ptr, ptr } %9, 0
// CHECK-NEXT: %11 = call ptr @"{{.*}}/runtime/internal/runtime.StartRecoverFrameAlias"(ptr @"main.interface{Add(int) int}.Add$bound", ptr %10)
// CHECK-NEXT: %12 = extractvalue { ptr, ptr } %9, 1
// CHECK-NEXT: %13 = extractvalue { ptr, ptr } %9, 0
// CHECK-NEXT: %14 = call i64 %13(ptr %12, i64 %1)
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.EndRecoverFrame"(ptr %11)
// CHECK-NEXT: ret i64 %14
// CHECK-NEXT: }
43 changes: 23 additions & 20 deletions cl/_testgo/closureenv/in.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// LITTEST
package main

// CHECK: {{^}}@0 = private unnamed_addr constant [18 x i8] c"zero-sized capture", align 1{{$}}
// CHECK: {{^}}@2 = private unnamed_addr constant [26 x i8] c"zero-sized capture address", align 1{{$}}
// CHECK: {{^}}@3 = private unnamed_addr constant [26 x i8] c"zero-sized pointer capture", align 1{{$}}
// CHECK: {{^}}@6 = private unnamed_addr constant [5 x i8] c"IsNil", align 1{{$}}
// CHECK: {{^}}@10 = private unnamed_addr constant [23 x i8] c"interface{IsNil() bool}", align 1{{$}}
// CHECK: {{^}}@11 = private unnamed_addr constant [25 x i8] c"nil receiver method value", align 1{{$}}
// CHECK: {{^}}@12 = private unnamed_addr constant [2 x i8] c"ok", align 1{{$}}
// CHECK: {{^}}@13 = private unnamed_addr constant [32 x i8] c"typed-nil interface method value", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [18 x i8] c"zero-sized capture", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [26 x i8] c"zero-sized capture address", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [26 x i8] c"zero-sized pointer capture", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [5 x i8] c"IsNil", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [23 x i8] c"interface{IsNil() bool}", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [25 x i8] c"nil receiver method value", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [2 x i8] c"ok", align 1{{$}}
// CHECK: {{^}}@{{[0-9]+}} = private unnamed_addr constant [32 x i8] c"typed-nil interface method value", align 1{{$}}

type nilReceiver struct{}

Expand Down Expand Up @@ -86,7 +86,7 @@ func main() {
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_1: ; preds = %_llgo_0
// CHECK-NEXT: %5 = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 16)
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @0, i64 18 }, ptr %5, align 8
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 18 }, ptr %5, align 8
// CHECK-NEXT: %6 = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %5, 1
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.Panic"(%"{{.*}}/runtime/internal/runtime.eface" %6)
// CHECK-NEXT: unreachable
Expand All @@ -104,7 +104,7 @@ func main() {
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_3: ; preds = %_llgo_2
// CHECK-NEXT: %14 = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 16)
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @2, i64 26 }, ptr %14, align 8
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 26 }, ptr %14, align 8
// CHECK-NEXT: %15 = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %14, 1
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.Panic"(%"{{.*}}/runtime/internal/runtime.eface" %15)
// CHECK-NEXT: unreachable
Expand All @@ -119,7 +119,7 @@ func main() {
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_5: ; preds = %_llgo_4
// CHECK-NEXT: %20 = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 16)
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @3, i64 26 }, ptr %20, align 8
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 26 }, ptr %20, align 8
// CHECK-NEXT: %21 = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %20, 1
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.Panic"(%"{{.*}}/runtime/internal/runtime.eface" %21)
// CHECK-NEXT: unreachable
Expand All @@ -137,13 +137,13 @@ func main() {
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_7: ; preds = %_llgo_6
// CHECK-NEXT: %28 = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 16)
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @11, i64 25 }, ptr %28, align 8
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 25 }, ptr %28, align 8
// CHECK-NEXT: %29 = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %28, 1
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.Panic"(%"{{.*}}/runtime/internal/runtime.eface" %29)
// CHECK-NEXT: unreachable
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_8: ; preds = %_llgo_6
// CHECK-NEXT: %30 = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$36psrSzSiKQuwmDQNUwPgWt23w6DHhlw0KM1_Hu7IbY", ptr @"*_llgo_main.nilReceiver")
// CHECK-NEXT: %30 = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*_llgo_main.nilReceiver")
// CHECK-NEXT: %31 = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr %30, 0
// CHECK-NEXT: %32 = insertvalue %"{{.*}}/runtime/internal/runtime.iface" %31, ptr null, 1
// CHECK-NEXT: %33 = call ptr @"{{.*}}/runtime/internal/runtime.IfaceType"(%"{{.*}}/runtime/internal/runtime.iface" %32)
Expand All @@ -152,13 +152,13 @@ func main() {
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_9: ; preds = %_llgo_11
// CHECK-NEXT: %35 = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 16)
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @13, i64 32 }, ptr %35, align 8
// CHECK-NEXT: store %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 32 }, ptr %35, align 8
// CHECK-NEXT: %36 = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %35, 1
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.Panic"(%"{{.*}}/runtime/internal/runtime.eface" %36)
// CHECK-NEXT: unreachable
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_10: ; preds = %_llgo_11
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PrintString"(%"{{.*}}/runtime/internal/runtime.String" { ptr @12, i64 2 })
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PrintString"(%"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 2 })
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PrintByte"(i8 10)
// CHECK-NEXT: ret void
// CHECK-EMPTY:
Expand All @@ -174,7 +174,7 @@ func main() {
// CHECK-NEXT: br i1 %42, label %_llgo_10, label %_llgo_9
// CHECK-EMPTY:
// CHECK-NEXT: _llgo_12: ; preds = %_llgo_8
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PanicTypeAssert"(ptr %33, %"{{.*}}/runtime/internal/runtime.String" { ptr @10, i64 23 }, %"{{.*}}/runtime/internal/runtime.String" { ptr @6, i64 5 })
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.PanicTypeAssert"(ptr %33, %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 23 }, %"{{.*}}/runtime/internal/runtime.String" { ptr @{{[0-9]+}}, i64 5 })
// CHECK-NEXT: unreachable
// CHECK-NEXT: }

Expand Down Expand Up @@ -248,8 +248,11 @@ func main() {
// CHECK-NEXT: %6 = load ptr, ptr %5, align 8
// CHECK-NEXT: %7 = insertvalue { ptr, ptr } undef, ptr %6, 0
// CHECK-NEXT: %8 = insertvalue { ptr, ptr } %7, ptr %3, 1
// CHECK-NEXT: %9 = extractvalue { ptr, ptr } %8, 1
// CHECK-NEXT: %10 = extractvalue { ptr, ptr } %8, 0
// CHECK-NEXT: %11 = call i1 %10(ptr %9)
// CHECK-NEXT: ret i1 %11
// CHECK-NEXT: %9 = extractvalue { ptr, ptr } %8, 0
// CHECK-NEXT: %10 = call ptr @"{{.*}}/runtime/internal/runtime.StartRecoverFrameAlias"(ptr @"main.interface{IsNil() bool}.IsNil$bound", ptr %9)
// CHECK-NEXT: %11 = extractvalue { ptr, ptr } %8, 1
// CHECK-NEXT: %12 = extractvalue { ptr, ptr } %8, 0
// CHECK-NEXT: %13 = call i1 %12(ptr %11)
// CHECK-NEXT: call void @"{{.*}}/runtime/internal/runtime.EndRecoverFrame"(ptr %10)
// CHECK-NEXT: ret i1 %13
// CHECK-NEXT: }
Loading
Loading