]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Back out r10385 (Change demangler to not use excessive space from
authorJulian Seward <jseward@acm.org>
Mon, 17 Aug 2009 16:36:11 +0000 (16:36 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 17 Aug 2009 16:36:11 +0000 (16:36 +0000)
stack) pending further investigations, as per discussion at
http://bugs.kde.org/show_bug.cgi?id=197988.

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

coregrind/m_demangle/cp-demangle.c

index 6db386c0251b0dbbe1ce270510f2a6c9cd58bee6..00aba99d6f3881718778202ea4886c1dd217ccd6 100644 (file)
@@ -4426,11 +4426,16 @@ d_demangle_callback (const char *mangled, int options,
   cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
 
   {
-    /* The original demangler uses alloca here with large allocations
-       for template-heavy code, e.g. when using Boost. This
-       is bad for Valgrind tools with limited stack size */
-    di.comps = xmalloc(di.num_comps * sizeof (*di.comps));
-    di.subs = xmalloc(di.num_subs * sizeof (*di.subs));
+#ifdef CP_DYNAMIC_ARRAYS
+    __extension__ struct demangle_component comps[di.num_comps];
+    __extension__ struct demangle_component *subs[di.num_subs];
+
+    di.comps = comps;
+    di.subs = subs;
+#else
+    di.comps = alloca (di.num_comps * sizeof (*di.comps));
+    di.subs = alloca (di.num_subs * sizeof (*di.subs));
+#endif
 
     if (type)
       dc = cplus_demangle_type (&di);
@@ -4451,9 +4456,6 @@ d_demangle_callback (const char *mangled, int options,
     status = (dc != NULL)
              ? cplus_demangle_print_callback (options, dc, callback, opaque)
              : 0;
-
-    free(di.comps);
-    free(di.subs);
   }
 
   return status;