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

            Bug ID: 40345
           Summary: Function merging pass miscompiles identical vararg
                    functions
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Interprocedural Optimizations
          Assignee: unassignedb...@nondot.org
          Reporter: v...@apple.com
                CC: llvm-bugs@lists.llvm.org

Example:

```
#include <stdarg.h>

void escape(int);

void simple_va(const char* fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    int i = va_arg(args, int);
    escape(i);
    va_end(args);
}

void simple_va2(const char* fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    int i = va_arg(args, int);
    escape(i);
    va_end(args);
}
```

Clang emits (https://godbolt.org/z/C54W53):

```
; Function Attrs: minsize optsize uwtable
define dso_local void @_Z9simple_vaPKcz(i8* nocapture readnone, ...)
local_unnamed_addr #3 {
  tail call void (i8*, ...) @_Z10simple_va2PKcz(i8* nocapture readnone %0) #3
  ret void
}
```

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to