annotate gcc/testsuite/g++.dg/opt/new1.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
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1 // PR c++/39367 - ICE at tree-inline.c:1042 with -O
111
kono
parents:
diff changeset
2 // { dg-options "-O" }
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 class QScriptEnginePrivate;
kono
parents:
diff changeset
5 class QScriptClassInfo;
kono
parents:
diff changeset
6 namespace QScript {
kono
parents:
diff changeset
7 enum Type { InvalidType };
kono
parents:
diff changeset
8 };
kono
parents:
diff changeset
9 class QScriptValueImpl {
kono
parents:
diff changeset
10 public:
kono
parents:
diff changeset
11 inline QScriptValueImpl();
kono
parents:
diff changeset
12 QScript::Type m_type;
kono
parents:
diff changeset
13 };
kono
parents:
diff changeset
14 namespace QScript {
kono
parents:
diff changeset
15 namespace Ecma {
kono
parents:
diff changeset
16 class Core {
kono
parents:
diff changeset
17 public:
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
18 inline QScriptEnginePrivate *engine() const { return 0; }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
19 inline QScriptClassInfo *classInfo() const { return 0; }
111
kono
parents:
diff changeset
20 QScriptValueImpl publicPrototype;
kono
parents:
diff changeset
21 };
kono
parents:
diff changeset
22 class Boolean: public Core {
kono
parents:
diff changeset
23 void newBoolean(QScriptValueImpl *result, bool value = false);
kono
parents:
diff changeset
24 };
kono
parents:
diff changeset
25 }
kono
parents:
diff changeset
26 template <typename T> class Buffer {
kono
parents:
diff changeset
27 public:
kono
parents:
diff changeset
28 inline void reserve(int num);
kono
parents:
diff changeset
29 inline void resize(int s);
kono
parents:
diff changeset
30 T *m_data;
kono
parents:
diff changeset
31 int m_capacity;
kono
parents:
diff changeset
32 int m_size;
kono
parents:
diff changeset
33 };
kono
parents:
diff changeset
34 }
kono
parents:
diff changeset
35 template <typename T> void QScript::Buffer<T>::resize(int s) {
kono
parents:
diff changeset
36 if (m_capacity < s)
kono
parents:
diff changeset
37 reserve (s << 1);
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39 template <typename T> void QScript::Buffer<T>::reserve(int x) {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40 /* The following may be optimized into a trap because the function
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
41 is called from resize(0) and so with m_capacity < 0. When not
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
42 optimized it may trigger -Walloc-size-larger-than= since
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
43 operator new() is called with an excessively large value.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
44 The warning is pruned from the test output below. */
111
kono
parents:
diff changeset
45 T *new_data = new T[m_capacity];
kono
parents:
diff changeset
46 for (int i=0; i<m_size; ++i)
kono
parents:
diff changeset
47 new_data[i] = m_data[i];
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49 class QScriptObject {
kono
parents:
diff changeset
50 public:
kono
parents:
diff changeset
51 inline void reset();
kono
parents:
diff changeset
52 QScript::Buffer<QScriptValueImpl> m_values;
kono
parents:
diff changeset
53 };
kono
parents:
diff changeset
54 class QScriptEnginePrivate {
kono
parents:
diff changeset
55 public:
kono
parents:
diff changeset
56 inline QScriptObject *allocObject() { return 0; }
kono
parents:
diff changeset
57 inline void newObject(QScriptValueImpl *o, const QScriptValueImpl &proto,
kono
parents:
diff changeset
58 QScriptClassInfo *oc = 0);
kono
parents:
diff changeset
59 };
kono
parents:
diff changeset
60 inline void QScriptEnginePrivate::newObject(QScriptValueImpl *o,
kono
parents:
diff changeset
61 const QScriptValueImpl &proto,
kono
parents:
diff changeset
62 QScriptClassInfo *oc)
kono
parents:
diff changeset
63 {
kono
parents:
diff changeset
64 QScriptObject *od = allocObject();
kono
parents:
diff changeset
65 od->reset();
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67 inline QScriptValueImpl::QScriptValueImpl() : m_type(QScript::InvalidType) { }
kono
parents:
diff changeset
68 inline void QScriptObject::reset() { m_values.resize(0); }
kono
parents:
diff changeset
69 namespace QScript {
kono
parents:
diff changeset
70 namespace Ecma {
kono
parents:
diff changeset
71 void Boolean::newBoolean(QScriptValueImpl *result, bool value)
kono
parents:
diff changeset
72 {
kono
parents:
diff changeset
73 engine()->newObject(result, publicPrototype, classInfo());
kono
parents:
diff changeset
74 }
kono
parents:
diff changeset
75 }
kono
parents:
diff changeset
76 }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
78 // { dg-prune-output "\\\[-Walloc-size-larger-than=]" }