gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 10 Jan 2012 19:29:12 +0000 (19:29 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 10 Jan 2012 19:29:12 +0000 (19:29 +0000)
Fix regression after libiberty/ update for GCC PR 6057 and others.
* c-exp.y (operator) <OPERATOR DELETE>
(operator) <OPERATOR DELETE '[' ']'>: Add trailing space.
* cp-name-parser.y (fill_comp, make_operator, make_dtor)
(make_builtin_type, make_name): New variable i, add gdb_assert.
(operator) <OPERATOR NEW>: Update ARGS to 3.
(operator) <OPERATOR DELETE>: Add trailing space.
(operator) <OPERATOR NEW '[' ']'>: Update ARGS to 3.
(operator) <OPERATOR DELETE '[' ']'>: Add trailing space.
* cp-support.c (cp_canonicalize_string): Check NULL from
cp_comp_to_string, call warning and return.

gdb/ChangeLog
gdb/c-exp.y
gdb/cp-name-parser.y
gdb/cp-support.c

index 4f8b4d38025b57d55f119a1c9bc66b2af894013a..e52c7a65c52bbab389a013beb63a265e03ec2a21 100644 (file)
@@ -1,3 +1,17 @@
+2012-01-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       Fix regression after libiberty/ update for GCC PR 6057 and others.
+       * c-exp.y (operator) <OPERATOR DELETE>
+       (operator) <OPERATOR DELETE '[' ']'>: Add trailing space.
+       * cp-name-parser.y (fill_comp, make_operator, make_dtor)
+       (make_builtin_type, make_name): New variable i, add gdb_assert.
+       (operator) <OPERATOR NEW>: Update ARGS to 3.
+       (operator) <OPERATOR DELETE>: Add trailing space.
+       (operator) <OPERATOR NEW '[' ']'>: Update ARGS to 3.
+       (operator) <OPERATOR DELETE '[' ']'>: Add trailing space.
+       * cp-support.c (cp_canonicalize_string): Check NULL from
+       cp_comp_to_string, call warning and return.
+
 2012-01-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix duplicate .o files after omitting libbfd.a.
index bdcae3310b59b19237e9b0e780f677b1a210f268..24a47616e275f965991177d494d4773dafbe00a4 100644 (file)
@@ -1211,11 +1211,11 @@ const_or_volatile_noopt:        const_and_volatile
 operator:      OPERATOR NEW
                        { $$ = operator_stoken (" new"); }
        |       OPERATOR DELETE
-                       { $$ = operator_stoken (" delete"); }
+                       { $$ = operator_stoken (" delete "); }
        |       OPERATOR NEW '[' ']'
                        { $$ = operator_stoken (" new[]"); }
        |       OPERATOR DELETE '[' ']'
-                       { $$ = operator_stoken (" delete[]"); }
+                       { $$ = operator_stoken (" delete[] "); }
        |       OPERATOR '+'
                        { $$ = operator_stoken ("+"); }
        |       OPERATOR '-'
index 8b4a1b946ca9f38dfbdc46d9ebd77290042e7048..d85a5bf2b7907d6d463c7d6c3e5525594fa19312 100644 (file)
@@ -188,7 +188,11 @@ fill_comp (enum demangle_component_type d_type, struct demangle_component *lhs,
           struct demangle_component *rhs)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_component (ret, d_type, lhs, rhs);
+  int i;
+
+  i = cplus_demangle_fill_component (ret, d_type, lhs, rhs);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -204,7 +208,11 @@ static struct demangle_component *
 make_operator (const char *name, int args)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_operator (ret, name, args);
+  int i;
+
+  i = cplus_demangle_fill_operator (ret, name, args);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -212,7 +220,11 @@ static struct demangle_component *
 make_dtor (enum gnu_v3_dtor_kinds kind, struct demangle_component *name)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_dtor (ret, kind, name);
+  int i;
+
+  i = cplus_demangle_fill_dtor (ret, kind, name);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -220,7 +232,11 @@ static struct demangle_component *
 make_builtin_type (const char *name)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_builtin_type (ret, name);
+  int i;
+
+  i = cplus_demangle_fill_builtin_type (ret, name);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -228,7 +244,11 @@ static struct demangle_component *
 make_name (const char *name, int len)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_name (ret, name, len);
+  int i;
+
+  i = cplus_demangle_fill_name (ret, name, len);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -420,13 +440,13 @@ demangler_special
                ;
 
 operator       :       OPERATOR NEW
-                       { $$ = make_operator ("new", 1); }
+                       { $$ = make_operator ("new", 3); }
                |       OPERATOR DELETE
-                       { $$ = make_operator ("delete", 1); }
+                       { $$ = make_operator ("delete ", 1); }
                |       OPERATOR NEW '[' ']'
-                       { $$ = make_operator ("new[]", 1); }
+                       { $$ = make_operator ("new[]", 3); }
                |       OPERATOR DELETE '[' ']'
-                       { $$ = make_operator ("delete[]", 1); }
+                       { $$ = make_operator ("delete[] ", 1); }
                |       OPERATOR '+'
                        { $$ = make_operator ("+", 2); }
                |       OPERATOR '-'
index 17f8237e429d9262a903e45ac75eb6262447c0ca..4902e50e3c6496a00cdb2db7cd6317c9d5f7f216 100644 (file)
@@ -528,6 +528,13 @@ cp_canonicalize_string (const char *string)
   ret = cp_comp_to_string (info->tree, estimated_len);
   cp_demangled_name_parse_free (info);
 
+  if (ret == NULL)
+    {
+      warning (_("internal error: string \"%s\" failed to be canonicalized"),
+              string);
+      return NULL;
+    }
+
   if (strcmp (string, ret) == 0)
     {
       xfree (ret);