annotate gcc/testsuite/g++.dg/pr84943-2.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // { dg-do run }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // Avoid -pedantic-error default
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 // { dg-options "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 // Make sure the functions referenced by various forms of
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 // address-taking are marked as used and compiled in.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 static void ac() {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 void a() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 ac[0](); // { dg-warning "arithmetic" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 static void bc() {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 void b() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 (&*&*&*&bc)();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 template <typename U> U cc() {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 void (*c())() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 return cc;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 template <typename T>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 struct x {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 void a(int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 template <typename U> static U a(x*) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 static void a(long) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 static void a(void *) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 static void a() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 void (*p0)(void*) = x().a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 p0(0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 void (*p1)(long) = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 p1(0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 void (*p2)() = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 p2();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 void (*p3)(x*) = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 p3(0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 struct z {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 void a(int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 template <typename U> static U a(z*) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 static void a(long) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 static void a(void *) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 static void a() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 void (*p0)(void*) = z().a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 p0(0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 void (*p1)(long) = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 p1(0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 void (*p2)() = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 p2();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 void (*p3)(z*) = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 p3(0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 int main(int argc, char *argv[]) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 if (argc > 1) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 x<void>().a();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 z().a();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 }