annotate gcc/testsuite/g++.dg/torture/pr36745.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR target/36745 */
kono
parents:
diff changeset
2 /* { dg-do compile } */
kono
parents:
diff changeset
3 /* { dg-options "-O2 -fPIC" } */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
4 /* { dg-additional-options "-Wno-return-type" } */
111
kono
parents:
diff changeset
5 /* { dg-require-effective-target fpic } */
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
8 class QBasicAtomicInt
kono
parents:
diff changeset
9 {
kono
parents:
diff changeset
10 public:
kono
parents:
diff changeset
11 int _q_value;
kono
parents:
diff changeset
12 inline bool operator== (int value) const
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 }
kono
parents:
diff changeset
15 bool ref ();
kono
parents:
diff changeset
16 bool deref ();
kono
parents:
diff changeset
17 };
kono
parents:
diff changeset
18 inline bool
kono
parents:
diff changeset
19 QBasicAtomicInt::ref ()
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 __asm__ ("": "=m" (_q_value): :);
kono
parents:
diff changeset
22 return true;
kono
parents:
diff changeset
23 }
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 namespace std
kono
parents:
diff changeset
26 {
kono
parents:
diff changeset
27 using::size_t;
kono
parents:
diff changeset
28 }
kono
parents:
diff changeset
29 extern "C++"
kono
parents:
diff changeset
30 {
kono
parents:
diff changeset
31 inline void *operator new (std::size_t, void *__p)
kono
parents:
diff changeset
32 {
kono
parents:
diff changeset
33 return __p;
kono
parents:
diff changeset
34 }
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36 struct QMapData
kono
parents:
diff changeset
37 {
kono
parents:
diff changeset
38 QBasicAtomicInt ref;
kono
parents:
diff changeset
39 static QMapData shared_null;
kono
parents:
diff changeset
40 };
kono
parents:
diff changeset
41 template < class Key, class T > class QMap
kono
parents:
diff changeset
42 {
kono
parents:
diff changeset
43 QMapData *d;
kono
parents:
diff changeset
44 public: inline QMap ():d (&QMapData::shared_null)
kono
parents:
diff changeset
45 {
kono
parents:
diff changeset
46 }
kono
parents:
diff changeset
47 inline ~ QMap ()
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 if (!d->ref.deref ())
kono
parents:
diff changeset
50 freeData (d);
kono
parents:
diff changeset
51 }
kono
parents:
diff changeset
52 void freeData (QMapData * d);
kono
parents:
diff changeset
53 };
kono
parents:
diff changeset
54 struct QVectorData
kono
parents:
diff changeset
55 {
kono
parents:
diff changeset
56 QBasicAtomicInt ref;
kono
parents:
diff changeset
57 static QVectorData shared_null;
kono
parents:
diff changeset
58 };
kono
parents:
diff changeset
59 template < typename T > struct QVectorTypedData
kono
parents:
diff changeset
60 {
kono
parents:
diff changeset
61 QBasicAtomicInt ref;
kono
parents:
diff changeset
62 };
kono
parents:
diff changeset
63 template < typename T > class QVector
kono
parents:
diff changeset
64 {
kono
parents:
diff changeset
65 union
kono
parents:
diff changeset
66 {
kono
parents:
diff changeset
67 QVectorData *p;
kono
parents:
diff changeset
68 QVectorTypedData < T > *d;
kono
parents:
diff changeset
69 };
kono
parents:
diff changeset
70 public: inline QVector ():p (&QVectorData::shared_null)
kono
parents:
diff changeset
71 {
kono
parents:
diff changeset
72 d->ref.ref ();
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74 inline void detach ()
kono
parents:
diff changeset
75 {
kono
parents:
diff changeset
76 if (d->ref == 1)
kono
parents:
diff changeset
77 detach_helper ();
kono
parents:
diff changeset
78 }
kono
parents:
diff changeset
79 inline T *data ()
kono
parents:
diff changeset
80 {
kono
parents:
diff changeset
81 detach ();
kono
parents:
diff changeset
82 }
kono
parents:
diff changeset
83 T & operator[](int i);
kono
parents:
diff changeset
84 void detach_helper ();
kono
parents:
diff changeset
85 void realloc ();
kono
parents:
diff changeset
86 };
kono
parents:
diff changeset
87 template < typename T > void QVector < T >::detach_helper ()
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 realloc ();
kono
parents:
diff changeset
90 }
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 template < typename T > inline T & QVector < T >::operator[](int i)
kono
parents:
diff changeset
93 {
kono
parents:
diff changeset
94 return data ()[i];
kono
parents:
diff changeset
95 }
kono
parents:
diff changeset
96 template < typename T > void QVector < T >::realloc ()
kono
parents:
diff changeset
97 {
kono
parents:
diff changeset
98 T *j, *i;
kono
parents:
diff changeset
99 i->~T ();
kono
parents:
diff changeset
100 while (j-- == i)
kono
parents:
diff changeset
101 new (j) T;
kono
parents:
diff changeset
102 }
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 void
kono
parents:
diff changeset
105 mergeInto (QVector < int >*a)
kono
parents:
diff changeset
106 {
kono
parents:
diff changeset
107 };
kono
parents:
diff changeset
108 struct QRegExpAutomatonState
kono
parents:
diff changeset
109 {
kono
parents:
diff changeset
110 QVector < int >outs;
kono
parents:
diff changeset
111 QMap < int, int >reenter;
kono
parents:
diff changeset
112 QMap < int, int >anchors;
kono
parents:
diff changeset
113 };
kono
parents:
diff changeset
114 class QRegExpEngine
kono
parents:
diff changeset
115 {
kono
parents:
diff changeset
116 void addCatTransitions ();
kono
parents:
diff changeset
117 QVector < QRegExpAutomatonState > s;
kono
parents:
diff changeset
118 };
kono
parents:
diff changeset
119 void
kono
parents:
diff changeset
120 QRegExpEngine::addCatTransitions ()
kono
parents:
diff changeset
121 {
kono
parents:
diff changeset
122 mergeInto (&s[2].outs);
kono
parents:
diff changeset
123 }