
This removes the parentHandle argument from the internal calling convention. It was formerly used to implment coroutines. Now that coroutines have been removed, it is no longer necessary.
78 строки
2,5 КиБ
LLVM
78 строки
2,5 КиБ
LLVM
; ModuleID = 'pointer.go'
|
|
source_filename = "pointer.go"
|
|
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128-ni:1:10:20"
|
|
target triple = "wasm32-unknown-wasi"
|
|
|
|
declare noalias nonnull i8* @runtime.alloc(i32, i8*, i8*)
|
|
|
|
declare void @runtime.trackPointer(i8* nocapture readonly, i8*)
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden void @main.init(i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden [0 x i32] @main.pointerDerefZero([0 x i32]* %x, i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
ret [0 x i32] zeroinitializer
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden i32* @main.pointerCastFromUnsafe(i8* %x, i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
%0 = bitcast i8* %x to i32*
|
|
call void @runtime.trackPointer(i8* %x, i8* undef) #0
|
|
ret i32* %0
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden i8* @main.pointerCastToUnsafe(i32* dereferenceable_or_null(4) %x, i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
%0 = bitcast i32* %x to i8*
|
|
call void @runtime.trackPointer(i8* %0, i8* undef) #0
|
|
ret i8* %0
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden i8* @main.pointerCastToUnsafeNoop(i8* dereferenceable_or_null(1) %x, i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
call void @runtime.trackPointer(i8* %x, i8* undef) #0
|
|
ret i8* %x
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden i8* @main.pointerUnsafeGEPFixedOffset(i8* dereferenceable_or_null(1) %ptr, i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
call void @runtime.trackPointer(i8* %ptr, i8* undef) #0
|
|
%0 = getelementptr inbounds i8, i8* %ptr, i32 10
|
|
call void @runtime.trackPointer(i8* nonnull %0, i8* undef) #0
|
|
call void @runtime.trackPointer(i8* nonnull %0, i8* undef) #0
|
|
ret i8* %0
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden i8* @main.pointerUnsafeGEPByteOffset(i8* dereferenceable_or_null(1) %ptr, i32 %offset, i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
call void @runtime.trackPointer(i8* %ptr, i8* undef) #0
|
|
%0 = getelementptr inbounds i8, i8* %ptr, i32 %offset
|
|
call void @runtime.trackPointer(i8* %0, i8* undef) #0
|
|
call void @runtime.trackPointer(i8* %0, i8* undef) #0
|
|
ret i8* %0
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define hidden i32* @main.pointerUnsafeGEPIntOffset(i32* dereferenceable_or_null(4) %ptr, i32 %offset, i8* %context) unnamed_addr #0 {
|
|
entry:
|
|
%0 = bitcast i32* %ptr to i8*
|
|
call void @runtime.trackPointer(i8* %0, i8* undef) #0
|
|
%1 = getelementptr i32, i32* %ptr, i32 %offset
|
|
%2 = bitcast i32* %1 to i8*
|
|
call void @runtime.trackPointer(i8* %2, i8* undef) #0
|
|
%3 = bitcast i32* %1 to i8*
|
|
call void @runtime.trackPointer(i8* %3, i8* undef) #0
|
|
ret i32* %1
|
|
}
|
|
|
|
attributes #0 = { nounwind }
|