diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/g++.dg/torture/pr45580.C	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,50 @@
+// { dg-do compile }
+
+namespace std {
+    typedef __SIZE_TYPE__ size_t;
+}
+inline void* operator new(std::size_t, void* __p) throw() {
+    return __p;
+}
+class Noncopyable  { };
+struct CollectorCell { };
+template<typename T> class PassRefPtr {
+public:
+    T* releaseRef() const { }
+};
+template <typename T> class NonNullPassRefPtr {
+public:
+    template <class U> NonNullPassRefPtr(const PassRefPtr<U>& o)
+	: m_ptr(o.releaseRef()) { }
+    mutable T* m_ptr;
+};
+struct ClassInfo;
+class JSValue { };
+JSValue jsNull();
+class Structure;
+class JSGlobalData {
+    static void storeVPtrs();
+};
+class JSCell : public Noncopyable {
+    friend class JSObject;
+    friend class JSGlobalData;
+    virtual ~JSCell();
+};
+class JSObject : public JSCell {
+public:
+    explicit JSObject(NonNullPassRefPtr<Structure>);
+    static PassRefPtr<Structure> createStructure(JSValue prototype) { }
+};
+class JSByteArray : public JSObject {
+    friend class JSGlobalData;
+    enum VPtrStealingHackType { VPtrStealingHack };
+    JSByteArray(VPtrStealingHackType)
+	: JSObject(createStructure(jsNull())), m_classInfo(0) { }
+    const ClassInfo* m_classInfo;
+};
+void JSGlobalData::storeVPtrs() {
+    CollectorCell cell;
+    void* storage = &cell;
+    JSCell* jsByteArray = new (storage) JSByteArray(JSByteArray::VPtrStealingHack);
+    jsByteArray->~JSCell();
+}