[LLVMbugs] [Bug 18029] New: miscompilation on i386 with -fPIC (recent regression)

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Nov 22 01:32:54 PST 2013


            Bug ID: 18029
           Summary: miscompilation on i386 with -fPIC (recent regression)
           Product: new-bugs
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: kcc at google.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

r195419 on x86 linux: 

% cat b.cc 
#include <stdio.h>
int Bar(int *a) {
  return *a;
int Foo(int *a) {
  return Bar(a);
int main() {
  int a[7] = {0, 1, 2, 3, 4, 5, 6};
  printf("result: %d (should be 3)\n", Foo(&a[3]));

% clang -m32  -O1 b.cc; ./a.out 
result: 3 (should be 3)

% clang  -O1 b.cc; ./a.out 
result: 3 (should be 3)

% clang -m32  -O1 b.cc  -fPIC ; ./a.out 
result: 69485705 (should be 3)

The code looks like this: 
08048400 <_Z3FooPi>:
 8048400:       e8 eb ff ff ff          call   80483f0 <_Z3BarPi>
 8048405:       c3                      ret    

This is obviously wrong, you can not call a function with a parameter like
this on i386, where the parameters are passed via stack. 

This is a very recent regression.

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/20131122/c4a7d5e4/attachment.html>

More information about the llvm-bugs mailing list