[hjl@gnu-cfl-2 pr26262]$ cat pr26262a.c #include <stdio.h>
int counter; extern void foo (void); extern void bar (void); extern void xxx (void);
int main(void) { bar (); foo (); xxx (); if (counter == 1) printf ("PASS\n"); return 0; } [hjl@gnu-cfl-2 pr26262]$ cat pr26262b.c __attribute__ ((noinline)) void bar (void) { } [hjl@gnu-cfl-2 pr26262]$ cat pr26262c.c #include <stdlib.h>
extern int counter;
void foo (void) { counter++; }
__attribute__((weak)) void bar (void) { abort (); } [hjl@gnu-cfl-2 pr26262]$ cat pr26262d.c extern void bar (void); void xxx (void) { bar (); } [hjl@gnu-cfl-2 pr26262]$ make gcc -O2 -flto -c -o pr26262a.o pr26262a.c gcc -O2 -flto -c -o pr26262b.o pr26262b.c gcc -O2 -c -o pr26262c.o pr26262c.c gcc -O2 -c -o pr26262d.o pr26262d.c gcc -fuse-ld=bfd -O2 -o x pr26262a.o pr26262b.o pr26262c.o pr26262d.o ./x make: *** [Makefile:11: all] Aborted (core dumped) [hjl@gnu-cfl-2 pr26262]$
[hjl@gnu-cfl-2 pr26262]$ cat pr26262a.c
#include <stdio.h>
int counter;
extern void foo (void);
extern void bar (void);
extern void xxx (void);
int
main(void)
{
bar ();
foo ();
xxx ();
if (counter == 1)
printf ("PASS\n");
return 0;
}
[hjl@gnu-cfl-2 pr26262]$ cat pr26262b.c
__attribute__ ((noinline))
void
bar (void)
{
}
[hjl@gnu-cfl-2 pr26262]$ cat pr26262c.c
#include <stdlib.h>
extern int counter;
void
foo (void)
{
counter++;
}
__attribute_ _((weak) )
void
bar (void)
{
abort ();
}
[hjl@gnu-cfl-2 pr26262]$ cat pr26262d.c
extern void bar (void);
void
xxx (void)
{
bar ();
}
[hjl@gnu-cfl-2 pr26262]$ make
gcc -O2 -flto -c -o pr26262a.o pr26262a.c
gcc -O2 -flto -c -o pr26262b.o pr26262b.c
gcc -O2 -c -o pr26262c.o pr26262c.c
gcc -O2 -c -o pr26262d.o pr26262d.c
gcc -fuse-ld=bfd -O2 -o x pr26262a.o pr26262b.o pr26262c.o pr26262d.o
./x
make: *** [Makefile:11: all] Aborted (core dumped)
[hjl@gnu-cfl-2 pr26262]$