fix(0128): foreign cstring returns + conflicting same-symbol bindings

Two genuine defects behind the 0128 filing (whose original repros were
both poisoned by binding getenv, which std already declares -> *u8):

1. Re-declaring a C symbol was silent first-wins: every call through
   the later declaration was typed by the older signature. Foreign
   registration now dedupes — equal signatures share one FuncId,
   conflicting ones are diagnosed.

2. Foreign -> string / -> ?string returns read garbage: C returns one
   char*, but the LLVM signature declared the fat {ptr,i64} (len =
   register garbage), and ?string was mis-declared SRET (the hidden
   out-pointer landed in the callee's first arg register). cstrRetKind
   now classifies such returns, declares them as plain ptr (never
   sret), and the call site synthesizes {ptr, strlen} via a
   branch-guarded strlen (NULL -> {null,0} / optional null), wrapping
   {string, i1} for ?string.

?[:0]u8 itself resolves fine (it is ?string); the spelling works in
return, param, local, and alias positions.

Regression: examples/1221 (plain + optional non-null + NULL paths) and
examples/1172 (conflict diagnostic); both FAIL pre-fix. The extern
dedupe collapses duplicate libc decls, so affected .ir snapshots were
regenerated. zig build test 426/426; run_examples 602/602;
distribution suite 21/21.
This commit is contained in:
agra
2026-06-12 14:13:01 +03:00
parent a8fbded567
commit d88bdd7242
50 changed files with 24903 additions and 28907 deletions

View File

@@ -4,50 +4,50 @@
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@__sx_objc_cstr_dealloc = internal constant [8 x i8] c"dealloc\00"
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.145 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.146 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.147 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.148 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.149 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.150 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.151 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.152 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.153 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.154 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.155 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.156 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.157 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.158 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.159 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.160 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1
@str.161 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1
@str.162 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1
@str.163 = private unnamed_addr constant [8 x i8] c"release\00", align 1
@str.164 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.165 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.166 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.167 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.168 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.169 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.170 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.171 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.172 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.173 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.174 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.175 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.176 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@str.177 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.178 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@str.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.127 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1
@str.128 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1
@str.129 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1
@str.130 = private unnamed_addr constant [8 x i8] c"release\00", align 1
@str.131 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.132 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.133 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.134 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.135 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.136 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.137 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.138 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.139 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.140 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.141 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.142 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.143 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@str.144 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.145 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@OBJC_IVAR_NAME_ = private unnamed_addr constant [11 x i8] c"__sx_state\00"
@OBJC_IVAR_TYPE_ = private unnamed_addr constant [3 x i8] c"^v\00"
@OBJC_CLASS_NAME_ = private unnamed_addr constant [9 x i8] c"NSObject\00"
@OBJC_CLASS_NAME_.179 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_CLASS_NAME_.146 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [5 x i8] c"bump\00"
@OBJC_METH_VAR_TYPE_ = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.180 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.181 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.182 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.183 = private unnamed_addr constant [4 x i8] c"@@:\00"
@OBJC_METH_VAR_NAME_.147 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.148 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.150 = private unnamed_addr constant [4 x i8] c"@@:\00"
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -277,7 +277,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.112, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -373,7 +373,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.146, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.113, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -381,7 +381,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.147, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -391,13 +391,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.148, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.149, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -405,7 +405,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.150, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -419,7 +419,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.151, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -427,7 +427,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.152, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -438,7 +438,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.153, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -495,7 +495,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.154, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -503,7 +503,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.155, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -514,7 +514,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.156, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -534,7 +534,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.157, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -542,7 +542,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.158, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -553,7 +553,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.159, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -700,7 +700,7 @@ declare i32 @mode_to_flags(ptr, i64) #0
declare i64 @open_file(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @read_file(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare ptr @read_file(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @write_file(ptr, ptr, ptr) #0
@@ -784,10 +784,10 @@ declare i32 @system(ptr) #0
declare void @run(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @env(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare ptr @env(ptr, ptr) #0
; Function Attrs: nounwind
declare void @find_executable(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare ptr @find_executable(ptr, ptr) #0
; Function Attrs: nounwind
declare void @_exit(i32) #0
@@ -813,167 +813,131 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @read.3(i32, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @close.4(i32) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.5(ptr, ptr, ptr, i64, i64, i64) #0
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.6(ptr, ptr, i64) #0
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.7(ptr, ptr, ptr) #0
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.8(ptr) #0
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.9(ptr, ptr, i64) #0
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.10(ptr, ptr, ptr) #0
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.11(ptr, ptr, i64) #0
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.12(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.13(ptr, ptr) #0
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.14(ptr, ptr) #0
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.15(ptr, ptr, i64) #0
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.16(ptr, ptr, ptr) #0
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.17(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.18(ptr, ptr) #0
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.19(ptr, ptr, i64) #0
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.20(ptr, ptr, ptr) #0
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.21(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.22(ptr, ptr) #0
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.23(ptr, ptr) #0
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.24(ptr, ptr, i64) #0
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.25(ptr, ptr, ptr) #0
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @open.26(ptr, i32, ...) #0
declare i1 @File.is_valid.24(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @close.27(i32) #0
declare i1 @File.close.25(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @read.28(i32, ptr, i64) #0
declare i64 @File.read.26(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @lseek.29(i32, i64, i32) #0
declare i64 @File.write.27(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @unlink.30(ptr) #0
declare i64 @File.seek.28(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @rmdir.31(ptr) #0
declare i32 @mode_to_flags.29(ptr, i64) #0
; Function Attrs: nounwind
declare i32 @mkdir.32(ptr, i32) #0
declare i64 @open_file.30(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @access.33(ptr, i32) #0
declare ptr @read_file.31(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @chmod.34(ptr, i32) #0
declare i1 @write_file.32(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @rename.35(ptr, ptr) #0
declare i1 @append_file.33(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.is_valid.36(ptr, ptr) #0
declare i1 @exists.34(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.close.37(ptr, ptr) #0
declare i1 @delete_file.35(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.read.38(ptr, ptr, ptr) #0
declare i1 @delete_dir.36(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.write.39(ptr, ptr, ptr) #0
declare i1 @create_dir.37(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.seek.40(ptr, ptr, i64, i64) #0
declare i1 @set_mode.38(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @mode_to_flags.41(ptr, i64) #0
declare i1 @move.39(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @open_file.42(ptr, ptr, i64) #0
declare i1 @create_dir_all.40(ptr, ptr) #0
; Function Attrs: nounwind
declare void @read_file.43(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare i1 @copy_file.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @write_file.44(ptr, ptr, ptr) #0
declare ptr @basename.42(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @append_file.45(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @exists.46(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_file.47(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_dir.48(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir.49(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @set_mode.50(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i1 @move.51(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir_all.52(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @copy_file.53(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @basename.54(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname.55(ptr, ptr) #0
declare ptr @dirname.43(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1174,64 +1138,31 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0
; Function Attrs: nounwind
declare ptr @spaces.56(ptr, i32) #0
declare ptr @spaces.44(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @sx_trace_len.57() #0
declare ptr @to_string.45(ptr) #0
; Function Attrs: nounwind
declare i32 @sx_trace_truncated.58() #0
declare void @print_current.46(ptr) #0
; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.59(i32) #0
declare void @print_interpreter_frames.47(ptr) #0
; Function Attrs: nounwind
declare ptr @to_string.60(ptr) #0
declare void @run.48(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @print_current.61(ptr) #0
declare ptr @env.49(ptr, ptr) #0
; Function Attrs: nounwind
declare void @print_interpreter_frames.62(ptr) #0
declare ptr @find_executable.50(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @popen.63(ptr, ptr) #0
declare void @exit.51(ptr, i8, ptr) #0
; Function Attrs: nounwind
declare i32 @pclose.64(ptr) #0
; Function Attrs: nounwind
declare i64 @fread.65(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind
declare i32 @feof.66(ptr) #0
; Function Attrs: nounwind
declare ptr @getenv.67(ptr) #0
; Function Attrs: nounwind
declare i64 @strlen.68(ptr) #0
; Function Attrs: nounwind
declare i32 @system.69(ptr) #0
; Function Attrs: nounwind
declare void @run.70(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @env.71(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @find_executable.72(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @_exit.73(i32) #0
; Function Attrs: nounwind
declare void @exit.74(ptr, i8, ptr) #0
; Function Attrs: nounwind
declare void @assert.75(ptr, i1, ptr, ptr) #0
declare void @assert.52(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0
@@ -1261,97 +1192,67 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind
declare void @parse.76(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
declare void @parse.53(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @open.77(ptr, i32, ...) #0
declare i1 @File.is_valid.54(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @close.78(i32) #0
declare i1 @File.close.55(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @read.79(i32, ptr, i64) #0
declare i64 @File.read.56(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @lseek.80(i32, i64, i32) #0
declare i64 @File.write.57(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @unlink.81(ptr) #0
declare i64 @File.seek.58(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @rmdir.82(ptr) #0
declare i32 @mode_to_flags.59(ptr, i64) #0
; Function Attrs: nounwind
declare i32 @mkdir.83(ptr, i32) #0
declare i64 @open_file.60(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @access.84(ptr, i32) #0
declare ptr @read_file.61(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @chmod.85(ptr, i32) #0
declare i1 @write_file.62(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @rename.86(ptr, ptr) #0
declare i1 @append_file.63(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.is_valid.87(ptr, ptr) #0
declare i1 @exists.64(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.close.88(ptr, ptr) #0
declare i1 @delete_file.65(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.read.89(ptr, ptr, ptr) #0
declare i1 @delete_dir.66(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.write.90(ptr, ptr, ptr) #0
declare i1 @create_dir.67(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.seek.91(ptr, ptr, i64, i64) #0
declare i1 @set_mode.68(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @mode_to_flags.92(ptr, i64) #0
declare i1 @move.69(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @open_file.93(ptr, ptr, i64) #0
declare i1 @create_dir_all.70(ptr, ptr) #0
; Function Attrs: nounwind
declare void @read_file.94(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare i1 @copy_file.71(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @write_file.95(ptr, ptr, ptr) #0
declare ptr @basename.72(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @append_file.96(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @exists.97(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_file.98(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_dir.99(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir.100(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @set_mode.101(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i1 @move.102(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir_all.103(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @copy_file.104(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @basename.105(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname.106(ptr, ptr) #0
declare ptr @dirname.73(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0
@@ -1393,118 +1294,118 @@ declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.107(ptr, i1) #0
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.108(i64, ptr) #0
declare void @BuildOptions.add_link_flag.75(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.109(i64, ptr) #0
declare void @BuildOptions.add_framework.76(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.110(i64, ptr) #0
declare void @BuildOptions.set_output_path.77(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.111(i64, ptr) #0
declare void @BuildOptions.set_wasm_shell.78(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.112(i64, ptr, ptr) #0
declare void @BuildOptions.add_asset_dir.79(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.113(i64) #0
declare i64 @BuildOptions.asset_dir_count.80(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.114(i64, i64) #0
declare ptr @BuildOptions.asset_dir_src_at.81(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.115(i64, i64) #0
declare ptr @BuildOptions.asset_dir_dest_at.82(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.116(i64, ptr) #0
declare void @BuildOptions.set_post_link_callback.83(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.117(i64, ptr) #0
declare void @BuildOptions.set_post_link_module.84(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.118(i64) #0
declare ptr @BuildOptions.binary_path.85(i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.119(i64, ptr) #0
declare void @BuildOptions.set_bundle_path.86(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.120(i64, ptr) #0
declare void @BuildOptions.set_bundle_id.87(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.121(i64, ptr) #0
declare void @BuildOptions.set_codesign_identity.88(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.122(i64, ptr) #0
declare void @BuildOptions.set_provisioning_profile.89(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.123(i64) #0
declare ptr @BuildOptions.bundle_path.90(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.124(i64) #0
declare ptr @BuildOptions.bundle_id.91(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.125(i64) #0
declare ptr @BuildOptions.codesign_identity.92(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.126(i64) #0
declare ptr @BuildOptions.provisioning_profile.93(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.127(i64) #0
declare ptr @BuildOptions.target_triple.94(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.128(i64) #0
declare i1 @BuildOptions.is_macos.95(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.129(i64) #0
declare i1 @BuildOptions.is_ios.96(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.130(i64) #0
declare i1 @BuildOptions.is_ios_device.97(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.131(i64) #0
declare i1 @BuildOptions.is_ios_simulator.98(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.132(i64) #0
declare i1 @BuildOptions.is_android.99(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.133(i64) #0
declare i64 @BuildOptions.framework_count.100(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.134(i64, i64) #0
declare ptr @BuildOptions.framework_at.101(i64, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.135(i64) #0
declare i64 @BuildOptions.framework_path_count.102(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.136(i64, i64) #0
declare ptr @BuildOptions.framework_path_at.103(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.137(i64, ptr) #0
declare void @BuildOptions.set_manifest_path.104(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.138(i64, ptr) #0
declare void @BuildOptions.set_keystore_path.105(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.139(i64) #0
declare ptr @BuildOptions.manifest_path.106(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.140(i64) #0
declare ptr @BuildOptions.keystore_path.107(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.141(i64) #0
declare i64 @BuildOptions.jni_main_count.108(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.142(i64, i64) #0
declare ptr @BuildOptions.jni_main_foreign_path_at.109(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.143(i64, i64) #0
declare ptr @BuildOptions.jni_main_java_source_at.110(i64, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.144() #0
declare i64 @build_options.111() #0
; Function Attrs: nounwind
declare ptr @objc_getClass(ptr) #0
@@ -1591,7 +1492,7 @@ entry:
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%call = call ptr @objc_getClass(ptr @str.160)
%call = call ptr @objc_getClass(ptr @str.127)
store ptr %call, ptr %alloca, align 8
%load = load ptr, ptr %alloca, align 8
%icmp = icmp eq ptr %load, null
@@ -1602,7 +1503,7 @@ if.then.0: ; preds = %entry
ret i32 1
if.merge.1: ; preds = %entry
%callN = call ptr @sel_registerName(ptr @str.161)
%callN = call ptr @sel_registerName(ptr @str.128)
store ptr %callN, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load ptr, ptr %allocaN, align 8
@@ -1617,7 +1518,7 @@ if.then.39: ; preds = %if.merge.1
ret i32 1
if.merge.40: ; preds = %if.merge.1
%callN = call ptr @sel_registerName(ptr @str.162)
%callN = call ptr @sel_registerName(ptr @str.129)
store ptr %callN, ptr %allocaN, align 8
store ptr @objc_msgSend, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
@@ -1634,7 +1535,7 @@ if.then.41: ; preds = %if.merge.40
ret i32 1
if.merge.42: ; preds = %if.merge.40
%callN = call ptr @sel_registerName(ptr @str.163)
%callN = call ptr @sel_registerName(ptr @str.130)
store ptr %callN, ptr %allocaN, align 8
store ptr @objc_msgSend, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
@@ -1681,14 +1582,14 @@ entry:
define internal void @print__ct_s354c93d7643e1bdf__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.164, i64 27 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.131, i64 27 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.165, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.132, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 27)
@@ -1704,7 +1605,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.166, i64 27 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.133, i64 27 })
ret { ptr, i64 } %call
}
@@ -1712,14 +1613,14 @@ entry:
define internal void @print__ct_sfe783e2b27a4beff__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.167, i64 26 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.134, i64 26 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.168, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.135, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 26)
@@ -1735,7 +1636,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_1(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.169, i64 26 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.136, i64 26 })
ret { ptr, i64 } %call
}
@@ -1743,14 +1644,14 @@ entry:
define internal void @print__ct_scaebdbbd10c81716__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.170, i64 27 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.137, i64 27 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.171, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.138, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 27)
@@ -1766,7 +1667,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_2(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.172, i64 27 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.139, i64 27 })
ret { ptr, i64 } %call
}
@@ -1774,14 +1675,14 @@ entry:
define internal void @print__ct_s7c1052877b8cc801__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.173, i64 35 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.140, i64 35 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.174, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.141, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 35)
@@ -1797,7 +1698,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_3(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.175, i64 35 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.142, i64 35 })
ret { ptr, i64 } %call
}
@@ -1805,14 +1706,14 @@ entry:
define internal void @print__ct_sed4e79fbcbd67966__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.176, i64 12 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.143, i64 12 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.177, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.144, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 12)
@@ -1828,7 +1729,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_4(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.178, i64 12 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.145, i64 12 })
ret { ptr, i64 } %call
}
@@ -1886,17 +1787,17 @@ declare i8 @class_addIvar(ptr, ptr, i64, i8, ptr)
define internal void @__sx_objc_defined_class_init() {
entry:
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.179, i64 0)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.146, i64 0)
%0 = call i8 @class_addIvar(ptr %cls, ptr @OBJC_IVAR_NAME_, i64 8, i8 3, ptr @OBJC_IVAR_TYPE_)
%metacls = call ptr @object_getClass(ptr %cls)
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
%1 = call i1 @class_addMethod(ptr %cls, ptr %sel, ptr @__SxFoo_bump_imp, ptr @OBJC_METH_VAR_TYPE_)
call void @objc_registerClassPair(ptr %cls)
store ptr %cls, ptr @__SxFoo_class, align 8
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.180)
%2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.181)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.182)
%3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.183)
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.147)
%2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.148)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.149)
%3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.150)
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
ret void