122 lines
1.9 KiB
C
122 lines
1.9 KiB
C
/* PR target/36745 */
|
|
/* { dg-do compile } */
|
|
/* { dg-options "-O2 -fPIC" } */
|
|
/* { dg-require-effective-target fpic } */
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
class QBasicAtomicInt
|
|
{
|
|
public:
|
|
int _q_value;
|
|
inline bool operator== (int value) const
|
|
{
|
|
}
|
|
bool ref ();
|
|
bool deref ();
|
|
};
|
|
inline bool
|
|
QBasicAtomicInt::ref ()
|
|
{
|
|
__asm__ ("": "=m" (_q_value): :);
|
|
return true;
|
|
}
|
|
|
|
namespace std
|
|
{
|
|
using::size_t;
|
|
}
|
|
extern "C++"
|
|
{
|
|
inline void *operator new (std::size_t, void *__p)
|
|
{
|
|
return __p;
|
|
}
|
|
}
|
|
struct QMapData
|
|
{
|
|
QBasicAtomicInt ref;
|
|
static QMapData shared_null;
|
|
};
|
|
template < class Key, class T > class QMap
|
|
{
|
|
QMapData *d;
|
|
public: inline QMap ():d (&QMapData::shared_null)
|
|
{
|
|
}
|
|
inline ~ QMap ()
|
|
{
|
|
if (!d->ref.deref ())
|
|
freeData (d);
|
|
}
|
|
void freeData (QMapData * d);
|
|
};
|
|
struct QVectorData
|
|
{
|
|
static QVectorData shared_null;
|
|
};
|
|
template < typename T > struct QVectorTypedData
|
|
{
|
|
QBasicAtomicInt ref;
|
|
};
|
|
template < typename T > class QVector
|
|
{
|
|
union
|
|
{
|
|
QVectorData *p;
|
|
QVectorTypedData < T > *d;
|
|
};
|
|
public: inline QVector ():p (&QVectorData::shared_null)
|
|
{
|
|
d->ref.ref ();
|
|
}
|
|
inline void detach ()
|
|
{
|
|
if (d->ref == 1)
|
|
detach_helper ();
|
|
}
|
|
inline T *data ()
|
|
{
|
|
detach ();
|
|
}
|
|
T & operator[](int i);
|
|
void detach_helper ();
|
|
void realloc ();
|
|
};
|
|
template < typename T > void QVector < T >::detach_helper ()
|
|
{
|
|
realloc ();
|
|
}
|
|
|
|
template < typename T > inline T & QVector < T >::operator[](int i)
|
|
{
|
|
return data ()[i];
|
|
}
|
|
template < typename T > void QVector < T >::realloc ()
|
|
{
|
|
T *j, *i;
|
|
i->~T ();
|
|
while (j-- == i)
|
|
new (j) T;
|
|
}
|
|
|
|
void
|
|
mergeInto (QVector < int >*a)
|
|
{
|
|
};
|
|
struct QRegExpAutomatonState
|
|
{
|
|
QVector < int >outs;
|
|
QMap < int, int >reenter;
|
|
QMap < int, int >anchors;
|
|
};
|
|
class QRegExpEngine
|
|
{
|
|
void addCatTransitions ();
|
|
QVector < QRegExpAutomatonState > s;
|
|
};
|
|
void
|
|
QRegExpEngine::addCatTransitions ()
|
|
{
|
|
mergeInto (&s[2].outs);
|
|
}
|