Testcase for PR1634
authorChris Lattner <sabre@nondot.org>
Tue, 11 Sep 2007 00:39:43 +0000 (00:39 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 11 Sep 2007 00:39:43 +0000 (00:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41824 91177308-0d34-0410-b5e6-96231b3b80d8

test/C++Frontend/2007-09-10-RecursiveTypeResolution.cpp [new file with mode: 0644]

diff --git a/test/C++Frontend/2007-09-10-RecursiveTypeResolution.cpp b/test/C++Frontend/2007-09-10-RecursiveTypeResolution.cpp
new file mode 100644 (file)
index 0000000..f813944
--- /dev/null
@@ -0,0 +1,88 @@
+// RUN: %llvmgxx -c -emit-llvm %s -o -
+// PR1634
+
+namespace Manta
+{
+  class CallbackHandle
+  {
+  protected:virtual ~ CallbackHandle (void)
+    {
+    }
+  };
+template < typename Data1 > class CallbackBase_1Data:public CallbackHandle
+  {
+  };
+}
+
+namespace __gnu_cxx
+{
+  template < typename _Iterator, typename _Container >
+  class __normal_iterator
+  {
+    _Iterator _M_current;
+  };
+}
+
+namespace std
+{
+  template < typename _Tp > struct allocator
+  {
+    typedef _Tp *pointer;
+  };
+  template < typename _InputIterator,
+    typename _Tp > inline void find (_InputIterator __last,
+                                              const _Tp & __val)
+  {
+  };
+}
+
+namespace Manta
+{
+  template < typename _Tp, typename _Alloc> struct _Vector_base
+  {
+    struct _Vector_impl
+    {
+      _Tp *_M_start;
+    };
+  public:
+    _Vector_impl _M_impl;
+  };
+  template < typename _Tp, typename _Alloc = std::allocator < _Tp > >
+  class vector:protected _Vector_base < _Tp,_Alloc >
+  {
+  public:
+    typedef __gnu_cxx::__normal_iterator < typename _Alloc::pointer,
+      vector < _Tp, _Alloc > > iterator;
+    iterator end ()
+    {
+    }
+  };
+  class MantaInterface
+  {
+  };
+  class RTRT
+  {
+    virtual CallbackHandle *registerTerminationCallback (CallbackBase_1Data <
+                                                        MantaInterface * >*);
+    virtual void unregisterCallback (CallbackHandle *);
+    typedef vector < CallbackBase_1Data < int >*>PRCallbackMapType;
+    PRCallbackMapType parallelPreRenderCallbacks;
+  };
+}
+using namespace Manta;
+CallbackHandle *
+RTRT::registerTerminationCallback (CallbackBase_1Data < MantaInterface * >*cb)
+{
+  return cb;
+}
+
+void
+RTRT::unregisterCallback (CallbackHandle * callback)
+{
+  {
+    typedef CallbackBase_1Data < int > callback_t;
+    callback_t *cb = static_cast < callback_t * >(callback);
+    find (parallelPreRenderCallbacks.end (), cb);
+  }
+}
+