https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63613

            Bug ID: 63613
           Summary: Regression: Unable to link .c file using <dejagnu.h>
                    API (inline functions not appearing)
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dmalcolm at gcc dot gnu.org

Created attachment 33777
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33777&action=edit
Preprocessed reproducer

I'm no longer able to build test programs that use the <dejagnu.h>
header, due to a linker failure.

$ cat ../../test-dg-api.c

#include <dejagnu.h>

int
main (int argc, char **argv)
{
  pass ("got here");
  return 0;
}

The dejagnu.h API consists purely of functions marked "inline" e.g.:

    63  inline void
    64  pass (const char* fmt, ...)
    65  {
    66    va_list ap;
    67          
    68    passed++;
    69    va_start (ap, fmt);
    70    vsnprintf (buffer, sizeof (buffer), fmt, ap);
    71    va_end (ap);
    72    printf ("\tPASSED: %s\n", buffer);
    73    wait ();
    74  }

See http://git.savannah.gnu.org/cgit/dejagnu.git/tree/dejagnu.h

With gcc 4.8.3:
  $ gcc ../../test-dg-api.c -o test-dg-api
  $ ./test-dg-api 
          PASSED: got here

and examination of the generated assembler shows it contains an
implementation of e.g. "pass".

With trunk:
  $ ./xgcc -B. ../../test-dg-api.c -o test-dg-api
  /tmp/ccc7PdfM.o: In function `main':
  test-dg-api.c:(.text+0x21): undefined reference to `pass'
  collect2: error: ld returned 1 exit status
and the generated asm doesn't contain an implementation of "pass".

This is with r216530.  I believe the problem appears somewhere between
  r215958: WORKS (aka e012cdc775868e9922f5fef9068a764546876d93, 2014-10-06)
and
  r216524: ERROR (aka d14cac46135326115f0dc589b0b3d2d249d74cf7, 2014-10-21)

Am attempting to isolate further.

With -v -save-temps:

  $ ./xgcc -B. -v -save-temps ../../test-dg-api.c -o test-dg-api

command line of cc1 is:

  ./cc1 -fpreprocessed test-dg-api.i -quiet -dumpbase test-dg-api.c
-mtune=generic -march=x86-64 -auxbase test-dg-api -version -o test-dg-api.s

and link line:

 ./collect2 -plugin ./liblto_plugin.so -plugin-opt=./lto-wrapper
-plugin-opt=-fresolution=test-dg-api.res -plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc
-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s
--eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o
test-dg-api /lib/../lib64/crt1.o /lib/../lib64/crti.o ./crtbegin.o -L.
-L/lib/../lib64 -L/usr/lib/../lib64 test-dg-api.o -lgcc --as-needed -lgcc_s
--no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed ./crtend.o
/lib/../lib64/crtn.o

Will attach the test-dg-api.i

This is with build,host,target==x86_64-unknown-linux-gnu (Fedora 20 x86_64)

This affects merger of my jit branch, since my testsuite is based on
dejagnu.h.

Reply via email to