annotate gcc/testsuite/gcc.dg/addr_equal-1.c @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1 /* { dg-do run { target { nonpic || pie_enabled } } } */
111
kono
parents:
diff changeset
2 /* { dg-require-weak "" } */
kono
parents:
diff changeset
3 /* { dg-require-alias "" } */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
4 /* { dg-options "-O2 -fdelete-null-pointer-checks" } */
111
kono
parents:
diff changeset
5 /* { dg-skip-if "" { powerpc-ibm-aix* } } */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
6 /* { dg-skip-if "function pointers can be NULL" { keeps_null_pointer_checks } } */
111
kono
parents:
diff changeset
7 void abort (void);
kono
parents:
diff changeset
8 extern int undef_var0, undef_var1;
kono
parents:
diff changeset
9 extern __attribute__ ((weak)) int weak_undef_var0;
kono
parents:
diff changeset
10 extern __attribute__ ((weak)) int weak_undef_var1;
kono
parents:
diff changeset
11 __attribute__ ((weak)) int weak_def_var0;
kono
parents:
diff changeset
12 int def_var0=0, def_var1=0;
kono
parents:
diff changeset
13 static int alias_var0 __attribute__ ((alias("def_var0")));
kono
parents:
diff changeset
14 extern int weak_alias_var0 __attribute__ ((alias("def_var0"))) __attribute__ ((weak));
kono
parents:
diff changeset
15 void undef_fn0(void);
kono
parents:
diff changeset
16 void undef_fn1(void);
kono
parents:
diff changeset
17 void def_fn0(void)
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 }
kono
parents:
diff changeset
20 void def_fn1(void)
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 }
kono
parents:
diff changeset
23 __attribute__ ((weak))
kono
parents:
diff changeset
24 void weak_def_fn0(void)
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26 }
kono
parents:
diff changeset
27 __attribute__ ((weak))
kono
parents:
diff changeset
28 void weak_def_fn1(void)
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 }
kono
parents:
diff changeset
31 __attribute__ ((weak)) void weak_undef_fn0(void);
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 inline
kono
parents:
diff changeset
34 void inline_fn0(void)
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37 inline
kono
parents:
diff changeset
38 void inline_fn1(void)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 }
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 int
kono
parents:
diff changeset
43 main(int argc, char **argv)
kono
parents:
diff changeset
44 {
kono
parents:
diff changeset
45 /* Two definitions are always different unless they can be interposed. */
kono
parents:
diff changeset
46 if (!__builtin_constant_p (def_fn0 == def_fn1))
kono
parents:
diff changeset
47 abort();
kono
parents:
diff changeset
48 if (def_fn0 == def_fn1)
kono
parents:
diff changeset
49 abort();
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 if (!__builtin_constant_p (&def_var0 == &def_var1))
kono
parents:
diff changeset
52 abort();
kono
parents:
diff changeset
53 if (&def_var0 == &def_var1)
kono
parents:
diff changeset
54 abort();
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 /* Same symbol is the same no matter on interposition. */
kono
parents:
diff changeset
57 if (!__builtin_constant_p (undef_fn0 != undef_fn0))
kono
parents:
diff changeset
58 abort ();
kono
parents:
diff changeset
59 if (undef_fn0 != undef_fn0)
kono
parents:
diff changeset
60 abort ();
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 /* Do not get confused by same offset. */
kono
parents:
diff changeset
63 if (!__builtin_constant_p (&undef_var0 + argc != &undef_var0 + argc))
kono
parents:
diff changeset
64 abort ();
kono
parents:
diff changeset
65 if (&undef_var0 + argc != &undef_var0 + argc)
kono
parents:
diff changeset
66 abort ();
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 /* Alias and its target is equivalent unless one of them can be interposed. */
kono
parents:
diff changeset
69 if (!__builtin_constant_p (&def_var0 != &alias_var0))
kono
parents:
diff changeset
70 abort ();
kono
parents:
diff changeset
71 if (&def_var0 != &alias_var0 )
kono
parents:
diff changeset
72 abort ();
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 if (__builtin_constant_p (&def_var0 != &weak_alias_var0))
kono
parents:
diff changeset
75 abort ();
kono
parents:
diff changeset
76 if (&def_var0 != &weak_alias_var0)
kono
parents:
diff changeset
77 abort ();
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 /* Weak definitions may be both NULL. */
kono
parents:
diff changeset
80 if (__builtin_constant_p ((void *)weak_undef_fn0 == (void *)&weak_undef_var0))
kono
parents:
diff changeset
81 abort ();
kono
parents:
diff changeset
82 if ((void *)weak_undef_fn0 != (void *)&weak_undef_var0)
kono
parents:
diff changeset
83 abort ();
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 /* Variables and functions do not share same memory locations otherwise. */
kono
parents:
diff changeset
86 if (!__builtin_constant_p ((void *)undef_fn0 == (void *)&undef_var0))
kono
parents:
diff changeset
87 abort ();
kono
parents:
diff changeset
88 if ((void *)undef_fn0 == (void *)&undef_var0)
kono
parents:
diff changeset
89 abort ();
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 /* This works for cases where one object is just weakly defined, too. */
kono
parents:
diff changeset
92 if (!__builtin_constant_p ((void *)weak_undef_fn0 == (void *)&weak_def_var0))
kono
parents:
diff changeset
93 abort ();
kono
parents:
diff changeset
94 if ((void *)weak_undef_fn0 == (void *)&weak_def_var0)
kono
parents:
diff changeset
95 abort ();
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 /* Inline functions are known to be different. */
kono
parents:
diff changeset
98 if (!__builtin_constant_p (inline_fn0 != inline_fn1))
kono
parents:
diff changeset
99 abort ();
kono
parents:
diff changeset
100 if (inline_fn0 == inline_fn1)
kono
parents:
diff changeset
101 abort ();
kono
parents:
diff changeset
102 return 0;
kono
parents:
diff changeset
103 }