]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Test program which uses templates to generate very long stabs (debug
authorJulian Seward <jseward@acm.org>
Tue, 4 Apr 2006 17:35:48 +0000 (17:35 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 4 Apr 2006 17:35:48 +0000 (17:35 +0000)
info) strings.  This crashes 3.1.1 when the test is compiled with
-gstabs.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5826

memcheck/tests/Makefile.am
memcheck/tests/deep_templates.cpp [new file with mode: 0644]
memcheck/tests/deep_templates.stderr.exp [new file with mode: 0644]
memcheck/tests/deep_templates.stdout.exp [new file with mode: 0644]
memcheck/tests/deep_templates.vgtest [new file with mode: 0644]

index b70686995c9648991eef346e9aa29f85cf29804c..28bf2d20b8171d71664bae441d3b0e338f8f0942 100644 (file)
@@ -38,6 +38,8 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        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 \
@@ -137,6 +139,7 @@ check_PROGRAMS = \
        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 \
@@ -192,6 +195,8 @@ supp2_SOURCES               = supp.c
 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
diff --git a/memcheck/tests/deep_templates.cpp b/memcheck/tests/deep_templates.cpp
new file mode 100644 (file)
index 0000000..448bcb9
--- /dev/null
@@ -0,0 +1,49 @@
+
+/* 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;
+}
diff --git a/memcheck/tests/deep_templates.stderr.exp b/memcheck/tests/deep_templates.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/memcheck/tests/deep_templates.stdout.exp b/memcheck/tests/deep_templates.stdout.exp
new file mode 100644 (file)
index 0000000..33820a0
--- /dev/null
@@ -0,0 +1 @@
+It's not NULL.  How DULL.
diff --git a/memcheck/tests/deep_templates.vgtest b/memcheck/tests/deep_templates.vgtest
new file mode 100644 (file)
index 0000000..f243fe1
--- /dev/null
@@ -0,0 +1,2 @@
+prog: deep_templates
+vgopts: -q