annotate gcc/testsuite/g++.dg/torture/pr36745.C @ 111:04ced10e8804

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