From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12885 invoked by alias); 1 Oct 2013 04:12:57 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 12851 invoked by uid 89); 1 Oct 2013 04:12:56 -0000 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 01 Oct 2013 04:12:56 +0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r914CrDb024463 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 1 Oct 2013 00:12:53 -0400 Received: from psique (ovpn-113-41.phx2.redhat.com [10.3.113.41]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r914CnTR002592 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Tue, 1 Oct 2013 00:12:50 -0400 From: Sergio Durigan Junior To: Keith Seitz Cc: "gdb-patches\@sourceware.org ml" Subject: Re: [RFA 2/4] Constify struct stoken.ptr References: <5249C97A.4080505@redhat.com> X-URL: http://www.redhat.com Date: Tue, 01 Oct 2013 04:12:00 -0000 In-Reply-To: <5249C97A.4080505@redhat.com> (Keith Seitz's message of "Mon, 30 Sep 2013 11:56:58 -0700") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2013-10/txt/msg00006.txt.bz2 On Monday, September 30 2013, Keith Seitz wrote: > Hi, > > In this next patch, as I mentioned in the previous email on this > series, the temporary casting needed for struct stoken.ptr is removed > (stoken.ptr is made const). > > Again, tested, regression-free, on x86_64 Fedora 18, native and gdbserver. Thanks again. I didn't find anything wrong with this one. Looks good to me, but I can't approve it. And I keep my comment about commiting this series as one single patch :-). > Keith > > ChangeLog > 2013-09-24 Keith Seitz > > * ada-exp.y (write_object_renaming): Update: struct stoken.ptr > is now const. > (block_lookup): Make 'raw_name' and 'name' const. > * ada-lex.l (processString): Update for struct stoken.ptr. > * c-exp.y (qualified_name : TYPENAME COLONCOLON '~' name): Likewise. > (operator_stoken): Likewise. > (lex_one_token): Remove temporary cast to char * for > 'yylval.sval.ptr'. > * f-exp.y (yylex): Likewise. > * gdb-types.c (lookup_struct_elt_type): Make argument 'name' const. > * gdbtypes.h (lookup_struct_elt_type): Likewisee. > * go-exp.y (lex_one_token): Remove temporary cast to char * for > 'yylval.sval.ptr'. > * jv-exp.y (QualifiedName): Update for struct stoken.ptr. > (yylex): Remove temporary cast to char * for 'yylval.sval.ptr'. > * linespec.c (struct ls_parser): Make 'stream' const. > (find_parameter_list_end): Make argument 'input' and local > variable 'p' const. > (linespec_lexer_lex_string): Make local variables 'start' and > 'p' const. > Use skip_spaces_const instead of skip_spaces. > (linespec_lexer_peek_token): Make local variable 'saved_stream' > const. > (parse_linespec): Temporarily cast 'argptr' to const for > 'parser->lexer.stream'. > * m2-exp.y (yylex): Remove temporary cast to char * for > 'yylval.sval.ptr'. > * objc-lang.c (add_msglist): Make local variable 'p' const. > * p-exp.y (exp : exp '['): Update for struct stoken.ptr. > (exp : STRING): Make 'sp' const. > (parse_number): Make argument 'p' const. > * parser-defs.h (struct stoken): Make 'ptr' const. > diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y > index 877dfaf..5270461 100644 > --- a/gdb/ada-exp.y > +++ b/gdb/ada-exp.y > @@ -136,7 +136,7 @@ static void write_name_assoc (struct stoken); > > static void write_exp_op_with_string (enum exp_opcode, struct stoken); > > -static struct block *block_lookup (struct block *, char *); > +static struct block *block_lookup (struct block *, const char *); > > static LONGEST convert_char_literal (struct type *, LONGEST); > > @@ -952,6 +952,8 @@ write_object_renaming (const struct block *orig_left_context, > { > struct stoken field_name; > const char *end; > + char *buf; > + > renaming_expr += 1; > > if (slice_state != SIMPLE_INDEX) > @@ -960,9 +962,10 @@ write_object_renaming (const struct block *orig_left_context, > if (end == NULL) > end = renaming_expr + strlen (renaming_expr); > field_name.length = end - renaming_expr; > - field_name.ptr = malloc (end - renaming_expr + 1); > - strncpy (field_name.ptr, renaming_expr, end - renaming_expr); > - field_name.ptr[end - renaming_expr] = '\000'; > + buf = malloc (end - renaming_expr + 1); > + field_name.ptr = buf; > + strncpy (buf, renaming_expr, end - renaming_expr); > + buf[end - renaming_expr] = '\000'; > renaming_expr = end; > write_exp_op_with_string (STRUCTOP_STRUCT, field_name); > break; > @@ -980,9 +983,9 @@ write_object_renaming (const struct block *orig_left_context, > } > > static struct block* > -block_lookup (struct block *context, char *raw_name) > +block_lookup (struct block *context, const char *raw_name) > { > - char *name; > + const char *name; > struct ada_symbol_info *syms; > int nsyms; > struct symtab *symtab; > diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l > index 93df2fb..2f9e1b3 100644 > --- a/gdb/ada-lex.l > +++ b/gdb/ada-lex.l > @@ -497,7 +497,8 @@ processString (const char *text, int len) > const char *lim = text + len; > struct stoken result; > > - q = result.ptr = obstack_alloc (&temp_parse_space, len); > + q = obstack_alloc (&temp_parse_space, len); > + result.ptr = q; > p = text; > while (p < lim) > { > diff --git a/gdb/c-exp.y b/gdb/c-exp.y > index ea19178..3b2b42a 100644 > --- a/gdb/c-exp.y > +++ b/gdb/c-exp.y > @@ -970,18 +970,20 @@ qualified_name: TYPENAME COLONCOLON name > { > struct type *type = $1.type; > struct stoken tmp_token; > + char *buf; > + > CHECK_TYPEDEF (type); > if (TYPE_CODE (type) != TYPE_CODE_STRUCT > && TYPE_CODE (type) != TYPE_CODE_UNION > && TYPE_CODE (type) != TYPE_CODE_NAMESPACE) > error (_("`%s' is not defined as an aggregate type."), > TYPE_SAFE_NAME (type)); > - > - tmp_token.ptr = (char*) alloca ($4.length + 2); > + buf = alloca ($4.length + 2); > + tmp_token.ptr = buf; > tmp_token.length = $4.length + 1; > - tmp_token.ptr[0] = '~'; > - memcpy (tmp_token.ptr+1, $4.ptr, $4.length); > - tmp_token.ptr[tmp_token.length] = 0; > + buf[0] = '~'; > + memcpy (buf+1, $4.ptr, $4.length); > + buf[tmp_token.length] = 0; > > /* Check for valid destructor name. */ > destructor_name_p (tmp_token.ptr, $1.type); > @@ -1651,13 +1653,16 @@ operator_stoken (const char *op) > { > static const char *operator_string = "operator"; > struct stoken st = { NULL, 0 }; > + char *buf; > + > st.length = strlen (operator_string) + strlen (op); > - st.ptr = malloc (st.length + 1); > - strcpy (st.ptr, operator_string); > - strcat (st.ptr, op); > + buf = malloc (st.length + 1); > + strcpy (buf, operator_string); > + strcat (buf, op); > + st.ptr = buf; > > /* The toplevel (c_parse) will free the memory allocated here. */ > - make_cleanup (free, st.ptr); > + make_cleanup (free, buf); > return st; > }; > > @@ -2738,7 +2743,7 @@ lex_one_token (void) > > tryname: > > - yylval.sval.ptr = (char *) tokstart; > + yylval.sval.ptr = tokstart; > yylval.sval.length = namelen; > > /* Catch specific keywords. */ > diff --git a/gdb/f-exp.y b/gdb/f-exp.y > index 9a82230..59c5e6c 100644 > --- a/gdb/f-exp.y > +++ b/gdb/f-exp.y > @@ -1159,7 +1159,7 @@ yylex (void) > return f77_keywords[i].token; > } > > - yylval.sval.ptr = (char *) tokstart; > + yylval.sval.ptr = tokstart; > yylval.sval.length = namelen; > > if (*tokstart == '$') > diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c > index ea5ca21..6c809a4 100644 > --- a/gdb/gdbtypes.c > +++ b/gdb/gdbtypes.c > @@ -1353,7 +1353,7 @@ lookup_template_type (char *name, struct type *type, > If NAME is the name of a baseclass type, return that type. */ > > struct type * > -lookup_struct_elt_type (struct type *type, char *name, int noerr) > +lookup_struct_elt_type (struct type *type, const char *name, int noerr) > { > int i; > char *typename; > diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h > index 0ca7a87..5e8d1e7 100644 > --- a/gdb/gdbtypes.h > +++ b/gdb/gdbtypes.h > @@ -1508,7 +1508,7 @@ extern const char *type_name_no_tag (const struct type *); > > extern const char *type_name_no_tag_or_error (struct type *type); > > -extern struct type *lookup_struct_elt_type (struct type *, char *, int); > +extern struct type *lookup_struct_elt_type (struct type *, const char *, int); > > extern struct type *make_pointer_type (struct type *, struct type **); > > diff --git a/gdb/go-exp.y b/gdb/go-exp.y > index 166d380..01c382a 100644 > --- a/gdb/go-exp.y > +++ b/gdb/go-exp.y > @@ -1295,7 +1295,7 @@ lex_one_token (void) > > tryname: > > - yylval.sval.ptr = (char *) tokstart; > + yylval.sval.ptr = tokstart; > yylval.sval.length = namelen; > > /* Catch specific keywords. */ > diff --git a/gdb/jv-exp.y b/gdb/jv-exp.y > index c69caf5..a9ad4d9 100644 > --- a/gdb/jv-exp.y > +++ b/gdb/jv-exp.y > @@ -345,10 +345,13 @@ QualifiedName: > $$.ptr = $1.ptr; /* Optimization. */ > else > { > - $$.ptr = (char *) malloc ($$.length + 1); > - make_cleanup (free, $$.ptr); > - sprintf ($$.ptr, "%.*s.%.*s", > + char *buf; > + > + buf = malloc ($$.length + 1); > + make_cleanup (free, buf); > + sprintf (buf, "%.*s.%.*s", > $1.length, $1.ptr, $3.length, $3.ptr); > + $$.ptr = buf; > } } > ; > > @@ -1175,7 +1178,7 @@ yylex (void) > break; > } > > - yylval.sval.ptr = (char *) tokstart; > + yylval.sval.ptr = tokstart; > yylval.sval.length = namelen; > > if (*tokstart == '$') > diff --git a/gdb/linespec.c b/gdb/linespec.c > index 8b7f3bd..96f1d07 100644 > --- a/gdb/linespec.c > +++ b/gdb/linespec.c > @@ -281,7 +281,7 @@ struct ls_parser > char *saved_arg; > > /* Head of the input stream. */ > - char **stream; > + const char **stream; > #define PARSER_STREAM(P) (*(P)->lexer.stream) > > /* The current token. */ > @@ -515,12 +515,12 @@ is_closing_quote_enclosed (const char *p) > This helper function assists with lexing string segments > which might contain valid (non-terminating) commas. */ > > -static char * > -find_parameter_list_end (char *input) > +static const char * > +find_parameter_list_end (const char *input) > { > char end_char, start_char; > int depth; > - char *p; > + const char *p; > > start_char = *input; > if (start_char == '(') > @@ -557,7 +557,7 @@ static linespec_token > linespec_lexer_lex_string (linespec_parser *parser) > { > linespec_token token; > - char *start = PARSER_STREAM (parser); > + const char *start = PARSER_STREAM (parser); > > token.type = LSTOKEN_STRING; > > @@ -607,7 +607,7 @@ linespec_lexer_lex_string (linespec_parser *parser) > } > else > { > - char *p; > + const char *p; > > /* Otherwise, only identifier characters are permitted. > Spaces are the exception. In general, we keep spaces, > @@ -621,7 +621,7 @@ linespec_lexer_lex_string (linespec_parser *parser) > { > if (isspace (*PARSER_STREAM (parser))) > { > - p = skip_spaces (PARSER_STREAM (parser)); > + p = skip_spaces_const (PARSER_STREAM (parser)); > /* When we get here we know we've found something followed by > a space (we skip over parens and templates below). > So if we find a keyword now, we know it is a keyword and not, > @@ -681,7 +681,7 @@ linespec_lexer_lex_string (linespec_parser *parser) > else if (*PARSER_STREAM (parser) == '<' > || *PARSER_STREAM (parser) == '(') > { > - char *p; > + const char *p; > > p = find_parameter_list_end (PARSER_STREAM (parser)); > if (p != NULL) > @@ -733,7 +733,7 @@ linespec_lexer_lex_one (linespec_parser *parser) > if (parser->lexer.current.type == LSTOKEN_CONSUMED) > { > /* Skip any whitespace. */ > - PARSER_STREAM (parser) = skip_spaces (PARSER_STREAM (parser)); > + PARSER_STREAM (parser) = skip_spaces_const (PARSER_STREAM (parser)); > > /* Check for a keyword, they end the linespec. */ > keyword = NULL; > @@ -819,7 +819,7 @@ static linespec_token > linespec_lexer_peek_token (linespec_parser *parser) > { > linespec_token next; > - char *saved_stream = PARSER_STREAM (parser); > + const char *saved_stream = PARSER_STREAM (parser); > linespec_token saved_token = parser->lexer.current; > > next = linespec_lexer_consume_token (parser); > @@ -2175,7 +2175,7 @@ parse_linespec (linespec_parser *parser, char **argptr) > parser->keyword_ok = 0; > > parser->lexer.saved_arg = *argptr; > - parser->lexer.stream = argptr; > + parser->lexer.stream = (const char **) argptr; > file_exception.reason = 0; > > /* Initialize the default symtab and line offset. */ > diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y > index 47ea640..0002e45 100644 > --- a/gdb/m2-exp.y > +++ b/gdb/m2-exp.y > @@ -907,7 +907,7 @@ yylex (void) > } > if(c != quote) > error (_("Unterminated string or character constant.")); > - yylval.sval.ptr = (char *) (tokstart + 1); > + yylval.sval.ptr = tokstart + 1; > yylval.sval.length = namelen - 1; > lexptr += namelen + 1; > > @@ -987,7 +987,7 @@ yylex (void) > && strncmp (tokstart, keytab[i].keyw, namelen) == 0) > return keytab[i].token; > > - yylval.sval.ptr = (char *) tokstart; > + yylval.sval.ptr = tokstart; > yylval.sval.length = namelen; > > if (*tokstart == '$') > diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c > index 734fc5d..cf99a0f 100644 > --- a/gdb/objc-lang.c > +++ b/gdb/objc-lang.c > @@ -426,7 +426,8 @@ start_msglist(void) > void > add_msglist(struct stoken *str, int addcolon) > { > - char *s, *p; > + char *s; > + const char *p; > int len, plen; > > if (str == 0) /* Unnamed arg, or... */ > diff --git a/gdb/p-exp.y b/gdb/p-exp.y > index e0abd07..ca25393 100644 > --- a/gdb/p-exp.y > +++ b/gdb/p-exp.y > @@ -158,7 +158,7 @@ static char * uptok (char *, int); > > %{ > /* YYSTYPE gets defined by %union */ > -static int parse_number (char *, int, int, YYSTYPE *); > +static int parse_number (const char *, int, int, YYSTYPE *); > > static struct type *current_type; > static struct internalvar *intvar; > @@ -352,9 +352,12 @@ exp : exp '[' > if (arrayfieldindex) > { > struct stoken stringsval; > - stringsval.ptr = alloca (strlen (arrayname) + 1); > + char *buf; > + > + buf = alloca (strlen (arrayname) + 1); > + stringsval.ptr = buf; > stringsval.length = strlen (arrayname); > - strcpy (stringsval.ptr, arrayname); > + strcpy (buf, arrayname); > current_type = TYPE_FIELD_TYPE (current_type, > arrayfieldindex - 1); > write_exp_elt_opcode (STRUCTOP_STRUCT); > @@ -591,7 +594,8 @@ exp : STRING > the array upper bound is the string length. > There is no such thing in C as a completely empty > string. */ > - char *sp = $1.ptr; int count = $1.length; > + const char *sp = $1.ptr; int count = $1.length; > + > while (count-- > 0) > { > write_exp_elt_opcode (OP_LONG); > @@ -854,7 +858,7 @@ name_not_typename : NAME > /*** Needs some error checking for the float case ***/ > > static int > -parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere) > +parse_number (const char *p, int len, int parsed_float, YYSTYPE *putithere) > { > /* FIXME: Shouldn't these be unsigned? We don't deal with negative values > here, and we do kind of silly things like cast to unsigned. */ > diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h > index aaefe3f..ed022ad 100644 > --- a/gdb/parser-defs.h > +++ b/gdb/parser-defs.h > @@ -67,7 +67,7 @@ extern int arglist_len; > struct stoken > { > /* Pointer to first byte of char-string or first bit of bit-string. */ > - char *ptr; > + const char *ptr; > /* Length of string in bytes for char-string or bits for bit-string. */ > int length; > }; -- Sergio