From 9972aac27d5d664a29abc88acd3a84c1e72064c4 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Mon, 14 Aug 2023 18:32:29 +0200 Subject: [PATCH] [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 PR build/22395 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 --- gdb/c-exp.y | 8 ++++---- gdb/d-exp.y | 10 +++++----- gdb/go-exp.y | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/gdb/c-exp.y b/gdb/c-exp.y index a8c78414253..032ba25274e 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -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_fifo; +static std::vector 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; diff --git a/gdb/d-exp.y b/gdb/d-exp.y index b0f2c0d1c10..8620a67e04a 100644 --- a/gdb/d-exp.y +++ b/gdb/d-exp.y @@ -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_fifo; +static std::vector 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; diff --git a/gdb/go-exp.y b/gdb/go-exp.y index 5c213f138f0..92abd95a159 100644 --- a/gdb/go-exp.y +++ b/gdb/go-exp.y @@ -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_fifo; +static std::vector 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; -- 2.30.2