annotate gcc/testsuite/g++.dg/ipa/pr82352.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 // PR ipa/82352
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // { dg-options "-O2" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 typedef __SIZE_TYPE__ size_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 class A
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 public :
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 typedef enum { Zero = 0, One = 1 } tA;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 A(tA a) { m_a = a; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 private :
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 tA m_a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 class B
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 public :
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 void *operator new(size_t t) { return (void*)(42); };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 class C
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 virtual void ffff () = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 class D
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 public :
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 virtual void g() = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 virtual void h() = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 template<class T> class IIII: public T, public D
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 void ffff()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 if (!m_i2) throw A(A::One);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 void h()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 if (m_i2) throw A(A::Zero);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 protected:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 virtual void g()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 if (m_i1 !=0) throw A(A::Zero);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 private :
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 int m_i1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 void *m_i2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 class E
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 private:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 size_t m_e;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 static const size_t Max;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 E& i(size_t a, size_t b, size_t c)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 if ((a > Max) || (c > Max)) throw A(A::Zero );
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 if (a + b > m_e) throw A(A::One );
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 return (*this);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 inline E& j(const E &s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 return i(0,0,s.m_e);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 class F : public C { };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 class G : public C { };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 class HHHH : public B, public F, public G { };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 void k()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 new IIII<HHHH>();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 void l()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 E e1, e2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 e1.j(e2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 }