annotate gcc/testsuite/g++.dg/lto/pr90939_0.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 // PR ipa/90939
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 // { dg-lto-do link }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 // { dg-lto-options { { -flto -O3 } } }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 typedef char uint8_t;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 template <class T> class A {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 A(T *);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 template <typename Derived, typename Base> const Derived &To(Base &p1) {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 return static_cast<const Derived &>(p1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 class H;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 template <typename, typename Base> const H *To(Base *p1) {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 return p1 ? &To<H>(*p1) : nullptr;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 enum TextDirection : uint8_t;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 enum WritingMode : unsigned;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 class B {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 WritingMode m_fn1();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 class C {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 int &m_fn2();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 class D { double d;};
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 class H : public D {};
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 class F {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 F(C, A<const int>, B *, WritingMode, TextDirection);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 class G {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 C NGLayoutAlgorithm_node;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 B NGLayoutAlgorithm_space;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 TextDirection NGLayoutAlgorithm_direction;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 H NGLayoutAlgorithm_break_token;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 G(A<const int> p1) __attribute__((noinline))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 : break_token_(&NGLayoutAlgorithm_break_token),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 container_builder_(NGLayoutAlgorithm_node, p1, &NGLayoutAlgorithm_space,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 NGLayoutAlgorithm_space.m_fn1(),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 NGLayoutAlgorithm_direction) {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 G(C p1, const H *) : G(&p1.m_fn2()) {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 A<H> break_token_;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 F container_builder_;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 class I : G {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 I(const D *) __attribute__((noinline));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 C a;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 I::I(const D *p1) : G(a, To<H>(p1)) {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 D gd[10];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 int main (int argc, char *argv[])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 I i(&(gd[argc%2]));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 return 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 }