[llvm-bugs] [Bug 27230] New: Naked functions that return values are broken

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Apr 5 15:19:25 PDT 2016


https://llvm.org/bugs/show_bug.cgi?id=27230

            Bug ID: 27230
           Summary: Naked functions that return values are broken
           Product: clang
           Version: 3.7
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: hausen at gmx.at
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

Naked functions that return values are compiled incorrectly as soon as
optimizations are turned on. Take the following example:

int foo(void) __attribute__((naked,noinline));
int foo(void) {
  // assembly as generated for "return 41;"
  asm volatile("mov $41,%%eax; retq" : : : "memory");
}
int main() {
  return foo()+1;
}

The program returns the intended value of 42 when compiling with -O0. With -O1
however, the call to foo is replaced with a jump and the program returns 41.

As far as I can tell, the issue is caused by the fact that the end of a naked
functions is "unreachable". This seems to cause optimization passes to make
incorrect assumptions about the behavior of such functions.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20160405/3b7ee8d9/attachment.html>


More information about the llvm-bugs mailing list