OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [g++.old-deja/] [g++.mike/] [dyncast5.C] - Blame information for rev 154

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 149 jeremybenn
// { dg-do run  }
2
#include 
3
 
4
void *p;
5
int fail;
6
 
7
class HeapTracked {
8
public:
9
    virtual ~HeapTracked() = 0;
10
    void *operator new(size_t size);
11
    void operator delete(void *ptr);
12
    static bool isObjectAllocation(const HeapTracked *ptr);
13
};
14
 
15
HeapTracked::~HeapTracked(){}
16
void * HeapTracked::operator new(size_t size)
17
{
18
    void * memPtr = ::operator new(size);
19
    p = memPtr;
20
    return memPtr;
21
}
22
 
23
void HeapTracked::operator delete(void *ptr)
24
{
25
    if (p != ptr)
26
      fail = 1;
27
    ::operator delete(ptr);
28
}
29
 
30
bool HeapTracked::isObjectAllocation(const HeapTracked *ptr)
31
{
32
    if (p != const_cast(dynamic_cast(ptr)))
33
      fail = 1;
34
    return false;
35
}
36
 
37
class Mumble1: public virtual HeapTracked {
38
    double d;
39
public:
40
    virtual ~Mumble1(){}
41
};
42
 
43
class Mumble2: public virtual HeapTracked {
44
    double d;
45
public:
46
    virtual ~Mumble2(){}
47
};
48
 
49
class Foo: virtual public HeapTracked,
50
           virtual public Mumble1,
51
           virtual public Mumble2 {
52
public:
53
    ~Foo(){}
54
};
55
 
56
int main()
57
{
58
    Foo *pf = new Foo;
59
    pf->isObjectAllocation(pf);
60
 
61
    Mumble1 *pm1 = pf;
62
    pm1->isObjectAllocation(pm1);
63
 
64
    Mumble2 *pm2 = pf;
65
    pm2->isObjectAllocation(pm2);
66
 
67
    // delete pf;
68
    // delete pm1;
69
    delete pm2;
70
 
71
    return fail;
72
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.