merge from gcc
authorDJ Delorie <dj@redhat.com>
Mon, 28 Jun 2004 18:01:46 +0000 (18:01 +0000)
committerDJ Delorie <dj@redhat.com>
Mon, 28 Jun 2004 18:01:46 +0000 (18:01 +0000)
libiberty/ChangeLog
libiberty/cp-demangle.c
libiberty/cp-demangle.h
libiberty/testsuite/demangle-expected

index 599fab3304e8901be31fe516b17098bffc8be7b9..6458c2afe624f1b92b9c666c0c9f17b567b7600a 100644 (file)
@@ -1,3 +1,16 @@
+2004-06-28  Zack Weinberg  <zack@codesourcery.com>
+
+       * cp-demangle.h: Declare cplus_demangle_operators,
+       cplus_demangle_builtin_types, cplus_demangle_mangled_name, and
+       cplus_demangle_type as static if IN_GLIBCPP_V3.
+
+2004-06-28  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       PR other/16240
+       * cp-demangle.c (d_expr_primary): Check for a failure return from
+       cplus_demangle_type.
+       * testsuite/demangle-expected: Add test case.
+
 2004-05-31  Danny Smith  <dannysmith@users.sourceforge.net>
 
        * pex-win32.c (fix_argv): Expand comment.
 
 2003-08-12  Nathanael Nerode  <neroden@gcc.gnu.org>
 
-        * cp-demangle.c: Clarify what package(s) this is part of.
+       * cp-demangle.c: Clarify what package(s) this is part of.
 
 2003-07-05  Danny Smith  <dannysmith@users.sourceforge.net>
 
index fe4b36712d35da9798d59f9e8da8e8155c8f3793..8608bc82507ca344153535c332fdcd45d6ebf0fd 100644 (file)
@@ -2398,6 +2398,8 @@ d_expr_primary (di)
       const char *s;
 
       type = cplus_demangle_type (di);
+      if (type == NULL)
+       return NULL;
 
       /* If we have a type we know how to print, we aren't going to
         print the type name itself.  */
index eea086862d696ee01055fbe051680f1c53baed4c..02e74ec8735365788bab6ed5c80ed663083a03a4 100644 (file)
@@ -131,19 +131,31 @@ struct d_info
 
 /* Functions and arrays in cp-demangle.c which are referenced by
    functions in cp-demint.c.  */
+#ifdef IN_GLIBCPP_V3
+#define CP_STATIC_IF_GLIBCPP_V3 static
+#else
+#define CP_STATIC_IF_GLIBCPP_V3 extern
+#endif
 
-extern const struct demangle_operator_info cplus_demangle_operators[];
+CP_STATIC_IF_GLIBCPP_V3
+const struct demangle_operator_info cplus_demangle_operators[];
 
 #define D_BUILTIN_TYPE_COUNT (26)
 
-extern const struct demangle_builtin_type_info
+CP_STATIC_IF_GLIBCPP_V3
+const struct demangle_builtin_type_info
 cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
 
-extern struct demangle_component *
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
 cplus_demangle_mangled_name PARAMS ((struct d_info *, int));
 
-extern struct demangle_component *
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
 cplus_demangle_type PARAMS ((struct d_info *));
 
 extern void
 cplus_demangle_init_info PARAMS ((const char *, int, size_t, struct d_info *));
+
+/* cp-demangle.c needs to define this a little differently */
+#undef CP_STATIC_IF_GLIBCPP_V3
index 9a3f0b9da8d889522cd716e4ba33019d76ee37b7..d38ce33c830e06db5bd5b851afe5fbdd4f7881b6 100644 (file)
@@ -3699,6 +3699,11 @@ _Z3fooIPA3_iEvRKT_
 void foo<int (*) [3]>(int (* const&) [3])
 foo<int (*) [3]>
 #
+# This used to crash the demangler--PR 16240
+--format=gnu-v3 --no-params
+_ZN13PatternDriver23StringScalarDeleteValueC1ERKNS_25ConflateStringScalarValueERKNS_25AbstractStringScalarValueERKNS_12TemplateEnumINS_12pdcomplementELZNS_16complement_namesEELZNS_14COMPLEMENTENUMEEEE
+_ZN13PatternDriver23StringScalarDeleteValueC1ERKNS_25ConflateStringScalarValueERKNS_25AbstractStringScalarValueERKNS_12TemplateEnumINS_12pdcomplementELZNS_16complement_namesEELZNS_14COMPLEMENTENUMEEEE
+PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue
 # Test GNU V3 constructor and destructor identification.
 # 0 means it is not a constructor/destructor.
 # Other integers correspond to enum gnu_v3_{c,d}tor_kinds in demangle.h.