| // { dg-do run } |
| // { dg-require-weak "" } |
| // { dg-require-alias "" } |
| // { dg-options "-O2 -fno-common" } |
| |
| // Copyright 2005 Free Software Foundation, Inc. |
| // Contributed by Alexandre Oliva <aoliva@redhat.com> |
| |
| // PR middle-end/24295 |
| |
| // The unit-at-a-time call graph code used to fail to emit variables |
| // without external linkage that were only used indirectly, through |
| // aliases. We might then get linker failures because the static |
| // variable was not defined, or run-time errors because the weak alias |
| // ended up pointing somewhere random. |
| |
| #include <stdlib.h> |
| |
| static unsigned long lv1 = 0xdeadbeefUL; |
| #pragma weak Av1a = lv1 |
| extern unsigned long Av1a; |
| |
| static unsigned long lf1(void) { return 0x510bea7UL; } |
| #pragma weak Af1a = lf1 |
| extern unsigned long Af1a(void); |
| |
| int main (void) { |
| if (! &Av1a |
| || ! &Af1a |
| || Av1a != 0xdeadbeefUL |
| || Af1a() != 0x510bea7UL) |
| abort (); |
| exit (0); |
| } |