blob: b1ff2995db924e3e37cb83085ef5b4776a9a7ca7 [file] [log] [blame]
/* PR target/36745 */
/* { dg-do compile } */
/* { dg-options "-O2 -fPIC -Wno-return-type" } */
/* { 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
{
QBasicAtomicInt ref;
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);
}