| /* This test checks that local aliases behave sanely. This is necessary for code correctness |
| of aliases introduced by ipa-visibility pass. |
| |
| This test expose weird behavior of AIX's .set pseudo-op where the global symbol is created, |
| but all uses of the alias are syntactically replaced by uses of the target. This means that |
| both counters are increased to 2. */ |
| |
| /* { dg-do run } |
| { dg-options "-O2" } |
| { dg-require-alias "" } |
| { dg-additional-sources "globalalias-2.c" } */ |
| extern int test2count; |
| extern void abort (void); |
| extern void tt (); |
| int testcount; |
| static |
| void test(void) |
| { |
| testcount++; |
| } |
| __attribute__ ((weak,noinline)) |
| __attribute ((alias("test"))) |
| void test2(void); |
| |
| int main() |
| { |
| test(); |
| /* This call must bind locally. */ |
| if (!testcount) |
| abort (); |
| test2(); |
| /* Depending on linker choice, this one may bind locally |
| or to the other unit. */ |
| if (!testcount && !test2count) |
| abort(); |
| tt(); |
| |
| if ((testcount != 1 || test2count != 3) |
| && (testcount != 3 || test2count != 1)) |
| abort (); |
| return 0; |
| } |