[llvm-bugs] [Bug 25452] New: clang fails with linker error at -O1 and above on x86_64-linux-gnu

via llvm-bugs llvm-bugs at lists.llvm.org
Sun Nov 8 15:47:34 PST 2015


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

            Bug ID: 25452
           Summary: clang fails with linker error at -O1 and above on
                    x86_64-linux-gnu
           Product: clang
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: su at cs.ucdavis.edu
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

The following code causes a linker error when it is compiled on
x86_64-linux-gnu by the current clang trunk at -O1 and above in the 64-bit mode
(but not in the 32-bit mode). 

It seems to also affect all earlier versions of clang (at least 3.0 and later). 

The code in fn1 is obviously bad, but clang does not issue any warnings
(neither does GCC). Is there a reason for this?  Is it because fn1 is unused,
thus dead?  


$ clang-trunk -v
clang version 3.8.0 (trunk 252412)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/tools/bin
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9.2
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.1.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.2
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.1.0
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
$ 
$ clang-trunk -m64 -O0 small.c
$ clang-trunk -m32 -O1 small.c
$ 
$ clang-trunk -m64 -O1 small.c
/tmp/small-9c083b.o: In function `fn1':
small.c:(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol
`a' defined in COMMON section in /tmp/small-9c083b.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$
$ 
$  
$ clang-trunk -Weverything small.c
small.c:6:1: warning: no previous prototype for function 'fn1'
[-Wmissing-prototypes]
fn1 ()
^
small.c:7:1: warning: function 'fn1' could be declared with attribute
'noreturn' [-Wmissing-noreturn]
{
^
small.c:3:5: warning: no previous extern declaration for non-static variable
'a' [-Wmissing-variable-declarations]
int a[1];
    ^
3 warnings generated.
$ 
$ gcc-trunk -Wall -Wextra -pedantic -std=c99 small.c 
$ 


---------------------------------


int printf (const char *, ...);

int a[1];

void
fn1 ()
{
  int b = -2000000, c = 0;
  for (;; c++)
    printf ("%d\n", a[b+c]);
}

int
main ()
{
  return 0;
}

-- 
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/20151108/891e5351/attachment.html>


More information about the llvm-bugs mailing list