From 36bcda79581c050020f8a02c3c86b7678cc5ed7e Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Mon, 31 May 1993 20:14:59 +0000 Subject: [PATCH] * stabsread.c (read_type): Skip type attributes if present. --- gdb/ChangeLog | 2 ++ gdb/stabsread.c | 39 ++++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c60a58bb3bb..e4ba053169c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,7 @@ Mon May 31 10:37:04 1993 Jim Kingdon (kingdon@cygnus.com) + * stabread.c (read_type): Skip type attributes if present. + * stabsread.c (read_huge_number): Don't accept '0' + radix as part of number, just through '0' + radix - 1. diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 0fdacb0cbfb..84edc569e5d 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -1255,22 +1255,31 @@ read_type (pp, objfile) return dbx_alloc_type (typenums, objfile); /* Type is being defined here. */ -#if 0 /* Callers aren't prepared for a NULL result! FIXME -- metin! */ - { - struct type *tt; - - /* if such a type already exists, this is an unnecessary duplication - of the stab string, which is common in (RS/6000) xlc generated - objects. In that case, simply return NULL and let the caller take - care of it. */ - - tt = *dbx_lookup_type (typenums); - if (tt && tt->length && tt->code) - return NULL; - } -#endif + /* Skip the '='. */ + ++(*pp); - *pp += 2; + while (**pp == '@') + { + char *p = *pp + 1; + /* It might be a type attribute or a member type. */ + if (isdigit (*p) || *p == '(' || *p == '-') + /* Member type. */ + break; + else + { + /* Type attributes; skip to the semicolon. */ + while (*p != ';' && *p != '\0') + ++p; + *pp = p; + if (*p == '\0') + return error_type (pp); + else + /* Skip the semicolon. */ + ++*pp; + } + } + /* Skip the type descriptor, we get it below with (*pp)[-1]. */ + ++(*pp); } else { -- 2.30.2