<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><br></div><div>First time post to this list -- I think I posted to the wrong place before (cfe-dev). Hopefully I'm right this time.</div><div><br></div><div>The problem I was noticing is that a naked function would cause very unexpected behaviour. I simplified it to this test case:</div><div><br></div><div>test.c:</div><div><br></div><div><div><font face="Courier New">__attribute__((naked)) void NakedTest(int value, int value2)</font></div><div><font face="Courier New">{</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; "> </span>asm("");</font></div><div><font face="Courier New">}</font></div></div><div><br></div><div><br></div><div>clang -S test.cpp </div><div>test.s:</div><div><br></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">      </span>.section<span class="Apple-tab-span" style="white-space: pre; "> </span>__TEXT,__text,regular,pure_instructions</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">     </span>.globl<span class="Apple-tab-span" style="white-space: pre; ">   </span>__Z9NakedTestii</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">     </span>.align<span class="Apple-tab-span" style="white-space: pre; ">   </span>4, 0x90</font></div><div><font face="Courier New">__Z9NakedTestii:                        ## @_Z9NakedTestii</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">  </span>.cfi_startproc</font></div><div><font face="Courier New">## BB#0:</font></div><div><b><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">        </span>movl<span class="Apple-tab-span" style="white-space: pre; ">     </span>%edi, -4(%rbp)</font></b></div><div><b><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">   </span>movl<span class="Apple-tab-span" style="white-space: pre; ">     </span>%esi, -8(%rbp)</font></b></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">    </span>## InlineAsm Start</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">  </span>## InlineAsm End</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">    </span>ret</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; "> </span>.cfi_endproc</font></div></div><div><br></div><div><br></div><div>clang -flto -S test.cpp</div><div>test.s:</div><div><br></div><div><div><font face="Courier New">define void @_Z9NakedTestii(i32 %value, i32 %value2) nounwind uwtable noinline ssp naked {</font></div><div><font face="Courier New">entry:</font></div><div><font face="Courier New"><b>  %value.addr = alloca i32, align 4</b></font></div><div><font face="Courier New"><b>  %value2.addr = alloca i32, align 4</b></font></div><div><font face="Courier New"><b>  store i32 %value, i32* %value.addr, align 4</b></font></div><div><font face="Courier New"><b>  store i32 %value2, i32* %value2.addr, align 4</b></font></div><div><font face="Courier New">  call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0</font></div><div><font face="Courier New">  ret void</font></div><div><font face="Courier New">}</font></div><div><br></div></div><div>The bolded instructions above are generated in debug builds, causing problems. This happens in all architectures that I've tested on (ARM, x86, x64)</div><div><br></div><div><br></div><div>I've attached a patch file which I fixes the problem. I don't know if I've done it the right way (I only downloaded and looked at the source for clang for the first time 2 hours ago), but here's the newer result:</div><div><br></div><div>clang -S test.cpp</div><div>test.s:</div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">       </span>.section<span class="Apple-tab-span" style="white-space: pre; "> </span>__TEXT,__text,regular,pure_instructions</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">     </span>.globl<span class="Apple-tab-span" style="white-space: pre; ">   </span>__Z9NakedTestii</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">     </span>.align<span class="Apple-tab-span" style="white-space: pre; ">   </span>4, 0x90</font></div><div><font face="Courier New">__Z9NakedTestii:                        ## @_Z9NakedTestii</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">  </span>.cfi_startproc</font></div><div><font face="Courier New">## BB#0:                                ## %entry</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">        </span>## InlineAsm Start</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">  </span>## InlineAsm End</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; ">    </span>ret</font></div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space: pre; "> </span>.cfi_endproc</font></div></div><div><br></div><div><br></div><div>clang -flto -S test.cpp</div><div>test.s:</div><div><div><br></div><div><font face="Courier New">define void @_Z9NakedTestii(i32, i32) nounwind uwtable noinline ssp naked {</font></div><div><font face="Courier New">entry:</font></div><div><font face="Courier New">  call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0</font></div><div><font face="Courier New">  ret void</font></div><div><font face="Courier New">}</font></div></div><div><br></div><div>Any comments, or alternative fixes to this problem would be greatly appreciated!</div><div><br></div><div>Thanks,</div><div>Jeffrey Lim</div><div><br></div><div></div></div></body></html>