blob: fc6c7aabe6715b0354ba910da164644a8644f184 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/* 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 behaviour 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;
}
|