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: [email protected]
          Reporter: [email protected]
                CC: [email protected]
    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.
_______________________________________________
llvm-bugs mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to