annotate gcc/testsuite/g++.dg/torture/pr45580.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 // { dg-do compile }
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 namespace std {
kono
parents:
diff changeset
4 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
5 }
kono
parents:
diff changeset
6 inline void* operator new(std::size_t, void* __p) throw() {
kono
parents:
diff changeset
7 return __p;
kono
parents:
diff changeset
8 }
kono
parents:
diff changeset
9 class Noncopyable { };
kono
parents:
diff changeset
10 struct CollectorCell { };
kono
parents:
diff changeset
11 template<typename T> class PassRefPtr {
kono
parents:
diff changeset
12 public:
kono
parents:
diff changeset
13 T* releaseRef() const { }
kono
parents:
diff changeset
14 };
kono
parents:
diff changeset
15 template <typename T> class NonNullPassRefPtr {
kono
parents:
diff changeset
16 public:
kono
parents:
diff changeset
17 template <class U> NonNullPassRefPtr(const PassRefPtr<U>& o)
kono
parents:
diff changeset
18 : m_ptr(o.releaseRef()) { }
kono
parents:
diff changeset
19 mutable T* m_ptr;
kono
parents:
diff changeset
20 };
kono
parents:
diff changeset
21 struct ClassInfo;
kono
parents:
diff changeset
22 class JSValue { };
kono
parents:
diff changeset
23 JSValue jsNull();
kono
parents:
diff changeset
24 class Structure;
kono
parents:
diff changeset
25 class JSGlobalData {
kono
parents:
diff changeset
26 static void storeVPtrs();
kono
parents:
diff changeset
27 };
kono
parents:
diff changeset
28 class JSCell : public Noncopyable {
kono
parents:
diff changeset
29 friend class JSObject;
kono
parents:
diff changeset
30 friend class JSGlobalData;
kono
parents:
diff changeset
31 virtual ~JSCell();
kono
parents:
diff changeset
32 };
kono
parents:
diff changeset
33 class JSObject : public JSCell {
kono
parents:
diff changeset
34 public:
kono
parents:
diff changeset
35 explicit JSObject(NonNullPassRefPtr<Structure>);
kono
parents:
diff changeset
36 static PassRefPtr<Structure> createStructure(JSValue prototype) { }
kono
parents:
diff changeset
37 };
kono
parents:
diff changeset
38 class JSByteArray : public JSObject {
kono
parents:
diff changeset
39 friend class JSGlobalData;
kono
parents:
diff changeset
40 enum VPtrStealingHackType { VPtrStealingHack };
kono
parents:
diff changeset
41 JSByteArray(VPtrStealingHackType)
kono
parents:
diff changeset
42 : JSObject(createStructure(jsNull())), m_classInfo(0) { }
kono
parents:
diff changeset
43 const ClassInfo* m_classInfo;
kono
parents:
diff changeset
44 };
kono
parents:
diff changeset
45 void JSGlobalData::storeVPtrs() {
kono
parents:
diff changeset
46 CollectorCell cell;
kono
parents:
diff changeset
47 void* storage = &cell;
kono
parents:
diff changeset
48 JSCell* jsByteArray = new (storage) JSByteArray(JSByteArray::VPtrStealingHack);
kono
parents:
diff changeset
49 jsByteArray->~JSCell();
kono
parents:
diff changeset
50 }