llvm / llvm/llvm-project

`lld-link` fails when I try to use my own `_fltused` symbol with `/merge:.data=.text`

Open
#194,995 1 comment 0 reactions 0 assignees View on GitHub
lld:COFF
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

I wrote my own language, [Flux](https://github.com/kvthweatt/Flux)

The IR compiles by `llc` just fine. Here's my Flux source:
```
#import "standard.fx";

using standard::io::console;

def !!__chkstk() -> void {};
int _fltused = 1;

object Test
{
def __init() -> this
{
return this;
};

def __expr() -> Test* { return this; };

def __exit() -> void { return; };
};

def main() -> int
{
print(_fltused);
return 0;
};
```

For some reason `lld-link` loses its mind over me defining `_fltused`;

```
[INFO] [linker] ► Linking executable: ./testh.exe
[ERROR] [linker] Linking failed: PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: "C:\\Program Files\\LLVM\\bin\\lld-link.exe" /entry:FRTStartup /stack:67108864 /subsystem:console /opt:ref /opt:icf /section:.text,ERW /merge:.data=.text /release /fixed /opt:lldlto=3 /opt:lldltojobs=all build\\testh\\testh.obj legacy_stdio_definitions.lib kernel32.lib ucrt.lib opengl32.lib Ws2_32.lib shell32.lib freetype.lib ole32.lib mmdevapi.lib comdlg32.lib d2d1.lib dwrite.lib user32.lib gdi32.lib /out:build\\./testh\\./testh.exe
Exception Code: 0xC0000005
#0 0x00007ff7dd09bae9 (C:\Program Files\LLVM\bin\lld-link.exe+0x1a9bae9)
#1 0x00007ff7dbe3be98 (C:\Program Files\LLVM\bin\lld-link.exe+0x83be98)
#2 0x00007ff7dbe307ad (C:\Program Files\LLVM\bin\lld-link.exe+0x8307ad)
#3 0x00007ff7dbc88b70 (C:\Program Files\LLVM\bin\lld-link.exe+0x688b70)
#4 0x00007ff7dbc7c1aa (C:\Program Files\LLVM\bin\lld-link.exe+0x67c1aa)
#5 0x00007ff7dbc7b73f (C:\Program Files\LLVM\bin\lld-link.exe+0x67b73f)
#6 0x00007ff7dba2c100 (C:\Program Files\LLVM\bin\lld-link.exe+0x42c100)
#7 0x00007ff7dba2b6d3 (C:\Program Files\LLVM\bin\lld-link.exe+0x42b6d3)
#8 0x00007ff7dd09982c (C:\Program Files\LLVM\bin\lld-link.exe+0x1a9982c)
#9 0x00007ffafa64e8d7 (C:\Windows\System32\KERNEL32.DLL+0x2e8d7)
#10 0x00007ffafb3cc53c (C:\Windows\SYSTEM32\ntdll.dll+0x8c53c)
```

IR:
```
define i32 @"main__0__ret_intE1"()
{
entry:
%"_fltused" = load i32, i32* @"_fltused"
call void @"standard__io__console__print__1__intE1__ret_voidE1"(i32 %"_fltused")
ret i32 0
}

define i32 @"main__2__intE1__byteE1_ptr2__ret_intE1"(i32 %".1", i8** %".2")
{
entry:
%".4" = call i32 @"main__0__ret_intE1"()
ret i32 %".4"
}

define i32 @"FRTStartup"()
{
entry:
%"return_code" = alloca i32
store i32 0, i32* %"return_code"
%"argc" = alloca i32
store i32 0, i32* %"argc"
%"argi" = alloca i32
store i32 0, i32* %"argi"
%"pos" = alloca i32
store i32 0, i32* %"pos"
%"start" = alloca i32
store i32 0, i32* %"start"
%"len" = alloca i32
store i32 0, i32* %"len"
%"j" = alloca i32
store i32 0, i32* %"j"
%"k" = alloca i32
store i32 0, i32* %"k"
%"arg" = alloca i8*
store i8* null, i8** %"arg"
%"argv" = alloca i8**
store i8** null, i8*** %"argv"
%"quoted" = alloca i1
store i1 0, i1* %"quoted"
%"cmdLine" = alloca i16*
store i16* null, i16** %"cmdLine"
%".14" = sub i32 0, 11
%".15" = call i64 @"GetStdHandle"(i32 %".14")
store i64 %".15", i64* @"WIN_STDOUT_HANDLE"
%"op_overload_result" = call i1 @"standard__memory__allocators__stdheap__table_init__0__ret_boolE1"()
%".17" = call i16* @"GetCommandLineW"()
store i16* %".17", i16** %"cmdLine"
br label %"while.cond"
while.cond:
%"cmdLine.1" = load i16*, i16** %"cmdLine"
%"pos.1" = load i32, i32* %"pos"
%"ptr_gep" = getelementptr inbounds i16, i16* %"cmdLine.1", i32 %"pos.1"
%"ptr_load" = load i16, i16* %"ptr_gep"
%".20" = trunc i32 0 to i16
%".21" = icmp ne i16 %"ptr_load", %".20"
br i1 %".21", label %"while.body", label %"while.end"
while.body:
br label %"while.cond.1"
while.end:
%"argc.2" = load i32, i32* %"argc"
%".78" = zext i32 %"argc.2" to i64
%".79" = sext i32 8 to i64
%".80" = mul i64 %".78", %".79"
%".81" = call i64 @"standard__memory__allocators__stdheap__fmalloc__1__dataE1_ubits64__ret_dataE1_ubits64"(i64 %".80")
%"int_to_ptr" = inttoptr i64 %".81" to i8**
store i8** %"int_to_ptr", i8*** %"argv"
store i32 0, i32* %"argi"
store i32 0, i32* %"pos"
br label %"while.cond.4"
while.cond.1:
%"cmdLine.2" = load i16*, i16** %"cmdLine"
%"pos.2" = load i32, i32* %"pos"
%"ptr_gep.1" = getelementptr inbounds i16, i16* %"cmdLine.2", i32 %"pos.2"
%"ptr_load.1" = load i16, i16* %"ptr_gep.1"
%".24" = trunc i32 32 to i16
%".25" = icmp eq i16 %"ptr_load.1", %".24"
%"cmdLine.3" = load i16*, i16** %"cmdLine"
%"pos.3" = load i32, i32* %"pos"
%"ptr_gep.2" = getelementptr inbounds i16, i16* %"cmdLine.3", i32 %"pos.3"
%"ptr_load.2" = load i16, i16* %"ptr_gep.2"
%".26" = trunc i32 9 to i16
%".27" = icmp eq i16 %"ptr_load.2", %".26"
%".28" = or i1 %".25", %".27"
br i1 %".28", label %"while.body.1", label %"while.end.1"
while.body.1:
%"pos.4" = load i32, i32* %"pos"
%".30" = add i32 %"pos.4", 1
store i32 %".30", i32* %"pos"
br label %"while.cond.1"
while.end.1:
%"cmdLine.4" = load i16*, i16** %"cmdLine"
%"pos.5" = load i32, i32* %"pos"
%"ptr_gep.3" = getelementptr inbounds i16, i16* %"cmdLine.4", i32 %"pos.5"
%"ptr_load.3" = load i16, i16* %"ptr_gep.3"
%".33" = trunc i32 0 to i16
%".34" = icmp eq i16 %"ptr_load.3", %".33"
br i1 %".34", label %"then", label %"else"
then:
br label %"while.end"
else:
br label %"ifcont"
ifcont:
%"cmdLine.5" = load i16*, i16** %"cmdLine"
%"pos.6" = load i32, i32* %"pos"
%"ptr_gep.4" = getelementptr inbounds i16, i16* %"cmdLine.5", i32 %"pos.6"
%"ptr_load.4" = load i16, i16* %"ptr_gep.4"
%".38" = trunc i32 34 to i16
%".39" = icmp eq i16 %"ptr_load.4", %".38"
br i1 %".39", label %"then.1", label %"else.1"
then.1:
%"pos.7" = load i32, i32* %"pos"
%".41" = add i32 %"pos.7", 1
store i32 %".41", i32* %"pos"
br label %"while.cond.2"
else.1:
br label %"while.cond.3"
ifcont.1:
%"argc.1" = load i32, i32* %"argc"
%".75" = add i32 %"argc.1", 1
store i32 %".75", i32* %"argc"
br label %"while.cond"
while.cond.2:
%"cmdLine.6" = load i16*, i16** %"cmdLine"
%"pos.8" = load i32, i32* %"pos"
%"ptr_gep.5" = getelementptr inbounds i16, i16* %"cmdLine.6", i32 %"pos.8"
%"ptr_load.5" = load i16, i16* %"ptr_gep.5"
%".44" = trunc i32 0 to i16
%".45" = icmp ne i16 %"ptr_load.5", %".44"
%"cmdLine.7" = load i16*, i16** %"cmdLine"
%"pos.9" = load i32, i32* %"pos"
%"ptr_gep.6" = getelementptr inbounds i16, i16* %"cmdLine.7", i32 %"pos.9"
%"ptr_load.6" = load i16, i16* %"ptr_gep.6"
%".46" = trunc i32 34 to i16
%".47" = icmp ne i16 %"ptr_load.6", %".46"
%".48" = and i1 %".45", %".47"
br i1 %".48", label %"while.body.2", label %"while.end.2"
while.body.2:
%"pos.10" = load i32, i32* %"pos"
%".50" = add i32 %"pos.10", 1
store i32 %".50", i32* %"pos"
br label %"while.cond.2"
while.end.2:
%"cmdLine.8" = load i16*, i16** %"cmdLine"
%"pos.11" = load i32, i32* %"pos"
%"ptr_gep.7" = getelementptr inbounds i16, i16* %"cmdLine.8", i32 %"pos.11"
%"ptr_load.7" = load i16, i16* %"ptr_gep.7"
%".53" = trunc i32 34 to i16
%".54" = icmp eq i16 %"ptr_load.7", %".53"
br i1 %".54", label %"then.2", label %"else.2"
then.2:
%"pos.12" = load i32, i32* %"pos"
%".56" = add i32 %"pos.12", 1
store i32 %".56", i32* %"pos"
br label %"ifcont.2"
else.2:
br label %"ifcont.2"
ifcont.2:
br label %"ifcont.1"
while.cond.3:
%"cmdLine.9" = load i16*, i16** %"cmdLine"
%"pos.13" = load i32, i32* %"pos"
%"ptr_gep.8" = getelementptr inbounds i16, i16* %"cmdLine.9", i32 %"pos.13"
%"ptr_load.8" = load i16, i16* %"ptr_gep.8"
%".62" = trunc i32 0 to i16
%".63" = icmp ne i16 %"ptr_load.8", %".62"
%"cmdLine.10" = load i16*, i16** %"cmdLine"
%"pos.14" = load i32, i32* %"pos"
%"ptr_gep.9" = getelementptr inbounds i16, i16* %"cmdLine.10", i32 %"pos.14"
%"ptr_load.9" = load i16, i16* %"ptr_gep.9"
%".64" = trunc i32 32 to i16
%".65" = icmp ne i16 %"ptr_load.9", %".64"
%".66" = and i1 %".63", %".65"
%"cmdLine.11" = load i16*, i16** %"cmdLine"
%"pos.15" = load i32, i32* %"pos"
%"ptr_gep.10" = getelementptr inbounds i16, i16* %"cmdLine.11", i32 %"pos.15"
%"ptr_load.10" = load i16, i16* %"ptr_gep.10"
%".67" = trunc i32 9 to i16
%".68" = icmp ne i16 %"ptr_load.10", %".67"
%".69" = and i1 %".66", %".68"
br i1 %".69", label %"while.body.3", label %"while.end.3"
while.body.3:
%"pos.16" = load i32, i32* %"pos"
%".71" = add i32 %"pos.16", 1
store i32 %".71", i32* %"pos"
br label %"while.cond.3"
while.end.3:
br label %"ifcont.1"
while.cond.4:
%"cmdLine.12" = load i16*, i16** %"cmdLine"
%"pos.17" = load i32, i32* %"pos"
%"ptr_gep.11" = getelementptr inbounds i16, i16* %"cmdLine.12", i32 %"pos.17"
%"ptr_load.11" = load i16, i16* %"ptr_gep.11"
%".86" = trunc i32 0 to i16
%".87" = icmp ne i16 %"ptr_load.11", %".86"
br i1 %".87", label %"while.body.4", label %"while.end.4"
while.body.4:
br label %"while.cond.5"
while.end.4:
%"argc.3" = load i32, i32* %"argc"
%".173" = icmp sgt i32 %"argc.3", 1
br i1 %".173", label %"then.6", label %"else.6"
while.cond.5:
%"cmdLine.13" = load i16*, i16** %"cmdLine"
%"pos.18" = load i32, i32* %"pos"
%"ptr_gep.12" = getelementptr inbounds i16, i16* %"cmdLine.13", i32 %"pos.18"
%"ptr_load.12" = load i16, i16* %"ptr_gep.12"
%".90" = trunc i32 32 to i16
%".91" = icmp eq i16 %"ptr_load.12", %".90"
%"cmdLine.14" = load i16*, i16** %"cmdLine"
%"pos.19" = load i32, i32* %"pos"
%"ptr_gep.13" = getelementptr inbounds i16, i16* %"cmdLine.14", i32 %"pos.19"
%"ptr_load.13" = load i16, i16* %"ptr_gep.13"
%".92" = trunc i32 9 to i16
%".93" = icmp eq i16 %"ptr_load.13", %".92"
%".94" = or i1 %".91", %".93"
br i1 %".94", label %"while.body.5", label %"while.end.5"
while.body.5:
%"pos.20" = load i32, i32* %"pos"
%".96" = add i32 %"pos.20", 1
store i32 %".96", i32* %"pos"
br label %"while.cond.5"
while.end.5:
%"cmdLine.15" = load i16*, i16** %"cmdLine"
%"pos.21" = load i32, i32* %"pos"
%"ptr_gep.14" = getelementptr inbounds i16, i16* %"cmdLine.15", i32 %"pos.21"
%"ptr_load.14" = load i16, i16* %"ptr_gep.14"
%".99" = trunc i32 0 to i16
%".100" = icmp eq i16 %"ptr_load.14", %".99"
br i1 %".100", label %"then.3", label %"else.3"
then.3:
br label %"while.end.4"
else.3:
br label %"ifcont.3"
ifcont.3:
%"pos.22" = load i32, i32* %"pos"
store i32 %"pos.22", i32* %"start"
store i32 0, i32* %"len"
%"cmdLine.16" = load i16*, i16** %"cmdLine"
%"pos.23" = load i32, i32* %"pos"
%"ptr_gep.15" = getelementptr inbounds i16, i16* %"cmdLine.16", i32 %"pos.23"
%"ptr_load.15" = load i16, i16* %"ptr_gep.15"
%".106" = trunc i32 34 to i16
%".107" = icmp eq i16 %"ptr_load.15", %".106"
br i1 %".107", label %"then.4", label %"else.4"
then.4:
store i1 true, i1* %"quoted"
%"pos.24" = load i32, i32* %"pos"
%".110" = add i32 %"pos.24", 1
store i32 %".110", i32* %"pos"
%"pos.25" = load i32, i32* %"pos"
store i32 %"pos.25", i32* %"start"
br label %"while.cond.6"
else.4:
br label %"while.cond.7"
ifcont.4:
%"len.3" = load i32, i32* %"len"
%".149" = zext i32 %"len.3" to i64
%".150" = sext i32 1 to i64
%".151" = add i64 %".149", %".150"
%".152" = call i64 @"standard__memory__allocators__stdheap__fmalloc__1__dataE1_ubits64__ret_dataE1_ubits64"(i64 %".151")
%"int_to_ptr.1" = inttoptr i64 %".152" to i8*
store i8* %"int_to_ptr.1", i8** %"arg"
store i32 0, i32* %"j"
br label %"while.cond.8"
while.cond.6:
%"cmdLine.17" = load i16*, i16** %"cmdLine"
%"pos.26" = load i32, i32* %"pos"
%"ptr_gep.16" = getelementptr inbounds i16, i16* %"cmdLine.17", i32 %"pos.26"
%"ptr_load.16" = load i16, i16* %"ptr_gep.16"
%".114" = trunc i32 0 to i16
%".115" = icmp ne i16 %"ptr_load.16", %".114"
%"cmdLine.18" = load i16*, i16** %"cmdLine"
%"pos.27" = load i32, i32* %"pos"
%"ptr_gep.17" = getelementptr inbounds i16, i16* %"cmdLine.18", i32 %"pos.27"
%"ptr_load.17" = load i16, i16* %"ptr_gep.17"
%".116" = trunc i32 34 to i16
%".117" = icmp ne i16 %"ptr_load.17", %".116"
%".118" = and i1 %".115", %".117"
br i1 %".118", label %"while.body.6", label %"while.end.6"
while.body.6:
%"len.1" = load i32, i32* %"len"
%".120" = add i32 %"len.1", 1
store i32 %".120", i32* %"len"
%"pos.28" = load i32, i32* %"pos"
%".122" = add i32 %"pos.28", 1
store i32 %".122", i32* %"pos"
br label %"while.cond.6"
while.end.6:
%"cmdLine.19" = load i16*, i16** %"cmdLine"
%"pos.29" = load i32, i32* %"pos"
%"ptr_gep.18" = getelementptr inbounds i16, i16* %"cmdLine.19", i32 %"pos.29"
%"ptr_load.18" = load i16, i16* %"ptr_gep.18"
%".125" = trunc i32 34 to i16
%".126" = icmp eq i16 %"ptr_load.18", %".125"
br i1 %".126", label %"then.5", label %"else.5"
then.5:
%"pos.30" = load i32, i32* %"pos"
%".128" = add i32 %"pos.30", 1
store i32 %".128", i32* %"pos"
br label %"ifcont.5"
else.5:
br label %"ifcont.5"
ifcont.5:
br label %"ifcont.4"
while.cond.7:
%"cmdLine.20" = load i16*, i16** %"cmdLine"
%"pos.31" = load i32, i32* %"pos"
%"ptr_gep.19" = getelementptr inbounds i16, i16* %"cmdLine.20", i32 %"pos.31"
%"ptr_load.19" = load i16, i16* %"ptr_gep.19"
%".134" = trunc i32 0 to i16
%".135" = icmp ne i16 %"ptr_load.19", %".134"
%"cmdLine.21" = load i16*, i16** %"cmdLine"
%"pos.32" = load i32, i32* %"pos"
%"ptr_gep.20" = getelementptr inbounds i16, i16* %"cmdLine.21", i32 %"pos.32"
%"ptr_load.20" = load i16, i16* %"ptr_gep.20"
%".136" = trunc i32 32 to i16
%".137" = icmp ne i16 %"ptr_load.20", %".136"
%".138" = and i1 %".135", %".137"
%"cmdLine.22" = load i16*, i16** %"cmdLine"
%"pos.33" = load i32, i32* %"pos"
%"ptr_gep.21" = getelementptr inbounds i16, i16* %"cmdLine.22", i32 %"pos.33"
%"ptr_load.21" = load i16, i16* %"ptr_gep.21"
%".139" = trunc i32 9 to i16
%".140" = icmp ne i16 %"ptr_load.21", %".139"
%".141" = and i1 %".138", %".140"
br i1 %".141", label %"while.body.7", label %"while.end.7"
while.body.7:
%"len.2" = load i32, i32* %"len"
%".143" = add i32 %"len.2", 1
store i32 %".143", i32* %"len"
%"pos.34" = load i32, i32* %"pos"
%".145" = add i32 %"pos.34", 1
store i32 %".145", i32* %"pos"
br label %"while.cond.7"
while.end.7:
br label %"ifcont.4"
while.cond.8:
%"j.1" = load i32, i32* %"j"
%"len.4" = load i32, i32* %"len"
%".156" = icmp slt i32 %"j.1", %"len.4"
br i1 %".156", label %"while.body.8", label %"while.end.8"
while.body.8:
%"cmdLine.23" = load i16*, i16** %"cmdLine"
%"start.1" = load i32, i32* %"start"
%"j.2" = load i32, i32* %"j"
%".158" = add i32 %"start.1", %"j.2"
%"ptr_gep.22" = getelementptr inbounds i16, i16* %"cmdLine.23", i32 %".158"
%"ptr_load.22" = load i16, i16* %"ptr_gep.22"
%".159" = trunc i16 %"ptr_load.22" to i8
%"arg.1" = load i8*, i8** %"arg"
%"j.3" = load i32, i32* %"j"
%".160" = getelementptr inbounds i8, i8* %"arg.1", i32 %"j.3"
store i8 %".159", i8* %".160"
%"j.4" = load i32, i32* %"j"
%".162" = add i32 %"j.4", 1
store i32 %".162", i32* %"j"
br label %"while.cond.8"
while.end.8:
%".165" = trunc i32 0 to i8
%"arg.2" = load i8*, i8** %"arg"
%"len.5" = load i32, i32* %"len"
%".166" = getelementptr inbounds i8, i8* %"arg.2", i32 %"len.5"
store i8 %".165", i8* %".166"
%"arg.3" = load i8*, i8** %"arg"
%"argv.1" = load i8**, i8*** %"argv"
%"argi.1" = load i32, i32* %"argi"
%".168" = getelementptr inbounds i8*, i8** %"argv.1", i32 %"argi.1"
store i8* %"arg.3", i8** %".168"
%"argi.2" = load i32, i32* %"argi"
%".170" = add i32 %"argi.2", 1
store i32 %".170", i32* %"argi"
br label %"while.cond.4"
then.6:
%"argc.4" = load i32, i32* %"argc"
%"argv.2" = load i8**, i8*** %"argv"
%".175" = call i32 @"main__2__intE1__byteE1_ptr2__ret_intE1"(i32 %"argc.4", i8** %"argv.2")
store i32 %".175", i32* %"return_code"
br label %"ifcont.6"
else.6:
%"op_overload_result.1" = call i32 @"main__0__ret_intE1"()
store i32 %"op_overload_result.1", i32* %"return_code"
br label %"ifcont.6"
ifcont.6:
br label %"while.cond.9"
while.cond.9:
%"k.1" = load i32, i32* %"k"
%"argc.5" = load i32, i32* %"argc"
%".181" = icmp slt i32 %"k.1", %"argc.5"
br i1 %".181", label %"while.body.9", label %"while.end.9"
while.body.9:
%"argv.3" = load i8**, i8*** %"argv"
%"k.2" = load i32, i32* %"k"
%"ptr_gep.23" = getelementptr inbounds i8*, i8** %"argv.3", i32 %"k.2"
%"ptr_load.23" = load i8*, i8** %"ptr_gep.23"
%"ptr_to_int" = ptrtoint i8* %"ptr_load.23" to i64
call void @"standard__memory__allocators__stdheap__ffree__1__dataE1_ubits64__ret_voidE1"(i64 %"ptr_to_int")
%"k.3" = load i32, i32* %"k"
%".184" = add i32 %"k.3", 1
store i32 %".184", i32* %"k"
br label %"while.cond.9"
while.end.9:
%"argv.4" = load i8**, i8*** %"argv"
%"ptr_to_int.1" = ptrtoint i8** %"argv.4" to i64
call void @"standard__memory__allocators__stdheap__ffree__1__dataE1_ubits64__ret_voidE1"(i64 %"ptr_to_int.1")
%"return_code.1" = load i32, i32* %"return_code"
%".188" = icmp ne i32 %"return_code.1", 0
br i1 %".188", label %"then.7", label %"else.7"
then.7:
%"return_code.2" = load i32, i32* %"return_code"
%".190" = sub i32 0, 1073741819
%".191" = icmp eq i32 %"return_code.2", %".190"
br i1 %".191", label %"then.8", label %"else.8"
else.7:
br label %"ifcont.7"
ifcont.7:
%"return_code.3" = load i32, i32* %"return_code"
ret i32 %"return_code.3"
then.8:
%"str_stack" = alloca [10 x i8]
%"str_char_0" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 0
store i8 83, i8* %"str_char_0"
%"str_char_1" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 1
store i8 69, i8* %"str_char_1"
%"str_char_2" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 2
store i8 71, i8* %"str_char_2"
%"str_char_3" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 3
store i8 70, i8* %"str_char_3"
%"str_char_4" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 4
store i8 65, i8* %"str_char_4"
%"str_char_5" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 5
store i8 85, i8* %"str_char_5"
%"str_char_6" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 6
store i8 76, i8* %"str_char_6"
%"str_char_7" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 7
store i8 84, i8* %"str_char_7"
%"str_char_8" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 8
store i8 10, i8* %"str_char_8"
%"str_char_9" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 9
store i8 0, i8* %"str_char_9"
%"arg0_decay" = getelementptr [10 x i8], [10 x i8]* %"str_stack", i32 0, i32 0
call void @"standard__io__console__print__1__byteE1_arr__ret_voidE1"(i8* %"arg0_decay")
br label %"ifcont.8"
else.8:
br label %"ifcont.8"
ifcont.8:
br label %"ifcont.7"
}

define void @"__chkstk"()
{
entry:
ret void
}

@"_fltused" = internal global i32 1
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.