aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2003-12-30 21:01:20 +0000
committerDaniel Jacobowitz <drow@false.org>2003-12-30 21:01:20 +0000
commit0ae7a3405acdeb95b389bb0ddbf104e7ccf65a77 (patch)
tree4789164946e3d18baee6d3c81783a1529fb2037b
parentbc694da6ac7fd711069bb449bf4bb3e4fe5a205f (diff)
downloadfsf-binutils-gdb-0ae7a3405acdeb95b389bb0ddbf104e7ccf65a77.zip
fsf-binutils-gdb-0ae7a3405acdeb95b389bb0ddbf104e7ccf65a77.tar.gz
fsf-binutils-gdb-0ae7a3405acdeb95b389bb0ddbf104e7ccf65a77.tar.bz2
* cp-names.y (yylex): Fix thinko for character constants.
* dwarf2read.c: Include "cp-names.h". (read_structure_scope): Canonicalize class names.
-rw-r--r--gdb/ChangeLog.cplus6
-rw-r--r--gdb/cp-names.y11
-rw-r--r--gdb/dwarf2read.c11
3 files changed, 23 insertions, 5 deletions
diff --git a/gdb/ChangeLog.cplus b/gdb/ChangeLog.cplus
index 99fd1c8..a13d44f 100644
--- a/gdb/ChangeLog.cplus
+++ b/gdb/ChangeLog.cplus
@@ -1,3 +1,9 @@
+2003-12-30 Daniel Jacobowitz <drow@mvista.com>
+
+ * cp-names.y (yylex): Fix thinko for character constants.
+ * dwarf2read.c: Include "cp-names.h".
+ (read_structure_scope): Canonicalize class names.
+
2003-12-24 Daniel Jacobowitz <drow@mvista.com>
* Makefile.in (cp_names_h): New variable.
diff --git a/gdb/cp-names.y b/gdb/cp-names.y
index eac8333..60df8a8 100644
--- a/gdb/cp-names.y
+++ b/gdb/cp-names.y
@@ -1597,13 +1597,18 @@ yylex (void)
"character set `%s'.", tok, target_charset ());
}
- yylval.typed_val_int.val = c;
- yylval.typed_val_int.type = d_builtin_type ('c' - 'a');
-
c = *lexptr++;
if (c != '\'')
error ("Invalid character constant.");
+ /* FIXME: We should refer to a canonical form of the character,
+ presumably the same one that appears in manglings - the decimal
+ representation. But if that isn't in our input then we have to
+ allocate memory for it somewhere. */
+ yylval.comp = d_make_comp (di, D_COMP_LITERAL,
+ d_builtin_type ('c' - 'a'),
+ d_make_name (di, tokstart, lexptr - tokstart));
+
return INT;
case '(':
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index bf2a57e..0616a35 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -44,6 +44,7 @@
#include "dwarf2expr.h"
#include "dwarf2loc.h"
#include "cp-support.h"
+#include "cp-names.h"
#include <fcntl.h>
#include "gdb_string.h"
@@ -2779,9 +2780,15 @@ read_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
attr = dwarf_attr (die, DW_AT_name);
if (attr && DW_STRING (attr))
{
- TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr),
- strlen (DW_STRING (attr)),
+ /* FIXME: This should be in a more general location. */
+ char *name;
+ name = cp_canonicalize_string (DW_STRING (attr));
+ if (name == NULL)
+ name = DW_STRING (attr);
+ TYPE_TAG_NAME (type) = obsavestring (name, strlen (name),
&objfile->type_obstack);
+ if (name != DW_STRING (attr))
+ free (name);
}
if (die->tag == DW_TAG_structure_type)