clientperm.stderr.exp \
clientperm.stdout.exp clientperm.vgtest \
custom_alloc.stderr.exp custom_alloc.vgtest \
+ deep_templates.vgtest \
+ deep_templates.stdout.exp deep_templates.stderr.exp \
describe-block.stderr.exp describe-block.vgtest \
doublefree.stderr.exp doublefree.vgtest \
erringfds.stderr.exp erringfds.stdout.exp erringfds.vgtest \
badaddrvalue badfree badjump badjump2 \
badloop badpoll badrw brk brk2 buflen_check \
clientperm custom_alloc \
+ deep_templates \
describe-block \
doublefree error_counts errs1 exitprog execve execve2 erringfds \
fprw fwrite hello inits inline \
mismatches_SOURCES = mismatches.cpp
new_nothrow_SOURCES = new_nothrow.cpp
new_override_SOURCES = new_override.cpp
+deep_templates_SOURCES = deep_templates.cpp
+deep_templates_CXXFLAGS = $(AM_FLAG_M3264_PRI) $(AM_CFLAGS) -O -gstabs
# Build shared object for wrap7
wrap7_SOURCES = wrap7.c
--- /dev/null
+
+/* Point of this test is to generate some very long 'stabs' debug
+ strings, via the use of these exponentially large template types.
+ When compiled with -gstabs, this causes 3.1.1 to segfault at
+ startup.
+*/
+
+#include <stdio.h>
+
+template <class T, class U>
+class Stack
+{
+ public:
+ Stack(int = 10) { size=5; top=6; stackPtr=(T*)6; };
+ ~Stack() { }
+ int push(const T&, const U&);
+ int popT(T&);
+ int popU(U&);
+ int isEmpty() const { return top == -1; }
+ int isFull() const { return top == size - 1; }
+ private:
+ int size;
+ int top;
+ T* stackPtr;
+} ;
+
+typedef Stack<int,char> Foo;
+typedef Stack<Foo,Foo> Foo2;
+typedef Stack<Foo2,Foo2> Foo3;
+typedef Stack<Foo3,Foo3> Foo4;
+typedef Stack<Foo4,Foo4> Foo5;
+typedef Stack<Foo5,Foo5> Foo6;
+typedef Stack<Foo6,Foo6> Foo7;
+typedef Stack<Foo7,Foo7> Foo8;
+typedef Stack<Foo8,Foo8> Foo9;
+typedef Stack<Foo9,Foo9> Foo10;
+typedef Stack<Foo10,Foo10> Foo11;
+typedef Stack<Foo11,Foo11> Foo12;
+
+int main ( char* argc, char** argv )
+{
+ Stack<Foo12,Foo12> * x = new Stack<Foo12,Foo12>(3);
+ if (x == NULL)
+ printf("It's NULL (?!)\n");
+ else
+ printf("It's not NULL. How DULL.\n");
+ delete x;
+ return 0;
+}