aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/libvtv/testsuite/libvtv.cc/povray-derived.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/libvtv/testsuite/libvtv.cc/povray-derived.cc')
-rw-r--r--gcc-4.9/libvtv/testsuite/libvtv.cc/povray-derived.cc74
1 files changed, 74 insertions, 0 deletions
diff --git a/gcc-4.9/libvtv/testsuite/libvtv.cc/povray-derived.cc b/gcc-4.9/libvtv/testsuite/libvtv.cc/povray-derived.cc
new file mode 100644
index 000000000..9005826df
--- /dev/null
+++ b/gcc-4.9/libvtv/testsuite/libvtv.cc/povray-derived.cc
@@ -0,0 +1,74 @@
+// { dg-do run }
+
+// Small test case from povray, see if it reproduces.
+
+#include <stdio.h>
+
+class POVMS_MessageReceiver
+{
+
+private:
+ int x;
+ class Handler
+ {
+ public:
+ virtual void print() = 0;
+ };
+protected:
+ template<class T> class MemberHandler : public Handler
+ {
+ public:
+ MemberHandler(T *xx)
+ {
+ x = xx;
+ }
+
+ ~MemberHandler() {}
+
+ void print()
+ {
+ printf("In print\n");
+ }
+ private:
+ T *x;
+ };
+
+private:
+ struct HandlerNode
+ {
+ Handler *handler;
+ };
+
+ HandlerNode *receiver;
+public:
+ POVMS_MessageReceiver(int xx) : x(xx) {}
+ ~POVMS_MessageReceiver() {}
+
+ void foo(int *xx);
+ void try_call();
+};
+
+void POVMS_MessageReceiver::foo(int *xx)
+{
+ receiver = new HandlerNode;
+
+ receiver->handler = new MemberHandler<int>(xx);
+}
+
+void POVMS_MessageReceiver::try_call()
+{
+ receiver->handler->print();
+}
+
+
+int main()
+{
+ int loc = 34;
+ POVMS_MessageReceiver a_test(100);
+
+ a_test.foo(&loc);
+ a_test.try_call();
+}
+
+
+