[gdb/build] Fix struct token_and_value odr violation

When build gdb with -O2 -flto I run into:
...
gdb/c-exp.y:3003:8: warning: type 'struct token_and_value' violates the C++ \
  One Definition Rule [-Wodr]
 struct token_and_value
        ^
gdb/d-exp.y:1310:8: note: a different type is defined in another translation \
  unit
 struct token_and_value
        ^
...

Fix this by renaming to c_token_and_value and d_token_and_value.

Likewise in gdb/go-exp.y, renaming to go_token_and_value.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>

PR build/22395
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
This commit is contained in:
Tom de Vries 2023-08-14 18:32:29 +02:00
parent 6a93ab8af4
commit 9972aac27d
3 changed files with 14 additions and 14 deletions

View File

@ -3000,7 +3000,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
}
/* An object of this type is pushed on a FIFO by the "outer" lexer. */
struct token_and_value
struct c_token_and_value
{
int token;
YYSTYPE value;
@ -3008,7 +3008,7 @@ struct token_and_value
/* A FIFO of tokens that have been read but not yet returned to the
parser. */
static std::vector<token_and_value> token_fifo;
static std::vector<c_token_and_value> token_fifo;
/* Non-zero if the lexer should return tokens from the FIFO. */
static int popping;
@ -3230,7 +3230,7 @@ classify_inner_name (struct parser_state *par_state,
static int
yylex (void)
{
token_and_value current;
c_token_and_value current;
int first_was_coloncolon, last_was_coloncolon;
struct type *context_type = NULL;
int last_to_examine, next_to_examine, checkpoint;
@ -3306,7 +3306,7 @@ yylex (void)
while (next_to_examine <= last_to_examine)
{
token_and_value next;
c_token_and_value next;
next = token_fifo[next_to_examine];
++next_to_examine;

View File

@ -1307,7 +1307,7 @@ lex_one_token (struct parser_state *par_state)
}
/* An object of this type is pushed on a FIFO by the "outer" lexer. */
struct token_and_value
struct d_token_and_value
{
int token;
YYSTYPE value;
@ -1316,7 +1316,7 @@ struct token_and_value
/* A FIFO of tokens that have been read but not yet returned to the
parser. */
static std::vector<token_and_value> token_fifo;
static std::vector<d_token_and_value> token_fifo;
/* Non-zero if the lexer should return tokens from the FIFO. */
static int popping;
@ -1404,7 +1404,7 @@ classify_inner_name (struct parser_state *par_state,
static int
yylex (void)
{
token_and_value current;
d_token_and_value current;
int last_was_dot;
struct type *context_type = NULL;
int last_to_examine, next_to_examine, checkpoint;
@ -1467,7 +1467,7 @@ yylex (void)
while (next_to_examine <= last_to_examine)
{
token_and_value next;
d_token_and_value next;
next = token_fifo[next_to_examine];
++next_to_examine;
@ -1531,7 +1531,7 @@ yylex (void)
while (next_to_examine <= last_to_examine)
{
token_and_value next;
d_token_and_value next;
next = token_fifo[next_to_examine];
++next_to_examine;

View File

@ -1245,7 +1245,7 @@ lex_one_token (struct parser_state *par_state)
}
/* An object of this type is pushed on a FIFO by the "outer" lexer. */
struct token_and_value
struct go_token_and_value
{
int token;
YYSTYPE value;
@ -1253,7 +1253,7 @@ struct token_and_value
/* A FIFO of tokens that have been read but not yet returned to the
parser. */
static std::vector<token_and_value> token_fifo;
static std::vector<go_token_and_value> token_fifo;
/* Non-zero if the lexer should return tokens from the FIFO. */
static int popping;
@ -1445,11 +1445,11 @@ classify_name (struct parser_state *par_state, const struct block *block)
static int
yylex (void)
{
token_and_value current, next;
go_token_and_value current, next;
if (popping && !token_fifo.empty ())
{
token_and_value tv = token_fifo[0];
go_token_and_value tv = token_fifo[0];
token_fifo.erase (token_fifo.begin ());
yylval = tv.value;
/* There's no need to fall through to handle package.name
@ -1474,7 +1474,7 @@ yylex (void)
if (next.token == '.')
{
token_and_value name2;
go_token_and_value name2;
name2.token = lex_one_token (pstate);
name2.value = yylval;