1 // PR c++/39367 - ICE at tree-inline.c:1042 with -O
4 class QScriptEnginePrivate;
5 class QScriptClassInfo;
7 enum Type { InvalidType };
9 class QScriptValueImpl {
11 inline QScriptValueImpl();
18 inline QScriptEnginePrivate *engine() const { return 0; }
19 inline QScriptClassInfo *classInfo() const { return 0; }
20 QScriptValueImpl publicPrototype;
22 class Boolean: public Core {
23 void newBoolean(QScriptValueImpl *result, bool value = false);
26 template <typename T> class Buffer {
28 inline void reserve(int num);
29 inline void resize(int s);
35 template <typename T> void QScript::Buffer<T>::resize(int s) {
39 template <typename T> void QScript::Buffer<T>::reserve(int x) {
40 /* The following may be optimized into a trap because the function
41 is called from resize(0) and so with m_capacity < 0. When not
42 optimized it may trigger -Walloc-size-larger-than= since
43 operator new() is called with an excessively large value.
44 The warning is pruned from the test output below. */
45 T *new_data = new T[m_capacity];
46 for (int i=0; i<m_size; ++i)
47 new_data[i] = m_data[i];
52 QScript::Buffer<QScriptValueImpl> m_values;
54 class QScriptEnginePrivate {
56 inline QScriptObject *allocObject() { return 0; }
57 inline void newObject(QScriptValueImpl *o, const QScriptValueImpl &proto,
58 QScriptClassInfo *oc = 0);
60 inline void QScriptEnginePrivate::newObject(QScriptValueImpl *o,
61 const QScriptValueImpl &proto,
64 QScriptObject *od = allocObject();
67 inline QScriptValueImpl::QScriptValueImpl() : m_type(QScript::InvalidType) { }
68 inline void QScriptObject::reset() { m_values.resize(0); }
71 void Boolean::newBoolean(QScriptValueImpl *result, bool value)
73 engine()->newObject(result, publicPrototype, classInfo());
78 // { dg-prune-output "\\\[-Walloc-size-larger-than=]" }