* [PATCH 0/7] More C++17 Updates
@ 2023-10-16 23:02 Tom Tromey
2023-10-16 23:02 ` [PATCH 1/7] Use C++17 [[fallthrough]] attribute Tom Tromey
` (7 more replies)
0 siblings, 8 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches
This series is based on Lancelot's C++17 series. I found some more
spots in gdb that could easily take advantage of C++17.
I'm sure there are some more spots to be found. For example, I
suspect try_embed can be used in more places than the one that was
commented as such.
I have another branch where I try to replace gdb::array_view with a
C++20-compatible std::span. However, this one is a bit more invasive,
so I thought I would leave it for a little later. Note that gdb
doesn't currently build cleanly in C++20 mode (mostly but IIRC not
entirely due to the use of 'volatile' in the Guile headers).
Regression tested on x86-64 Fedora 38.
Let me know what you think.
Tom
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/7] Use C++17 [[fallthrough]] attribute
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
@ 2023-10-16 23:02 ` Tom Tromey
2023-10-16 23:17 ` John Baldwin
2023-10-17 8:53 ` Luis Machado
2023-10-16 23:02 ` [PATCH 2/7] Switch to -Wimplicit-fallthrough=5 Tom Tromey
` (6 subsequent siblings)
7 siblings, 2 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
This changes gdb to use the C++17 [[fallthrough]] attribute rather
than special comments.
This was mostly done by script, but I neglected a few spellings and so
also fixed it up by hand.
I suspect this fixes the bug mentioned below, by switching to a
standard approach that, presumably, clang supports.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23159
---
gdb/aarch64-tdep.c | 2 +-
gdb/ada-exp.y | 2 +-
gdb/ada-lang.c | 2 +-
gdb/ada-valprint.c | 2 +-
gdb/amd64-windows-tdep.c | 2 +-
gdb/arch/arm.c | 2 +-
gdb/arm-tdep.c | 2 +-
gdb/c-exp.y | 6 ++--
gdb/cli/cli-setshow.c | 2 +-
gdb/coffread.c | 4 +--
gdb/compile/compile-c-support.c | 2 +-
gdb/compile/compile-c-symbols.c | 2 +-
gdb/compile/compile-cplus-symbols.c | 2 +-
gdb/cp-name-parser.y | 4 +--
gdb/cp-support.c | 2 +-
gdb/ctfread.c | 2 +-
gdb/d-exp.y | 4 +--
gdb/d-valprint.c | 2 +-
gdb/dbxread.c | 2 +-
gdb/disasm-selftests.c | 2 +-
gdb/dwarf2/macro.c | 4 +--
gdb/dwarf2/read.c | 22 ++++++------
gdb/eval.c | 2 +-
gdb/f-exp.y | 4 +--
gdb/fbsd-nat.c | 2 +-
gdb/gdbtypes.c | 10 +++---
gdb/go-exp.y | 4 +--
gdb/go-valprint.c | 2 +-
gdb/i386-tdep.c | 8 ++---
gdb/m2-typeprint.c | 2 +-
gdb/m2-valprint.c | 4 +--
gdb/machoread.c | 2 +-
gdb/mdebugread.c | 6 ++--
gdb/mi/mi-cmd-stack.c | 2 +-
gdb/minsyms.c | 2 +-
gdb/mips-tdep.c | 6 ++--
gdb/msp430-tdep.c | 2 +-
gdb/nat/linux-btrace.c | 3 +-
gdb/nat/windows-nat.c | 4 +--
gdb/nat/x86-dregs.c | 2 +-
gdb/p-exp.y | 2 +-
gdb/p-valprint.c | 2 +-
gdb/printcmd.c | 2 +-
gdb/record-btrace.c | 2 +-
gdb/remote.c | 6 ++--
gdb/riscv-tdep.c | 2 +-
gdb/rs6000-tdep.c | 52 ++++++++++++++---------------
gdb/rust-parse.c | 4 +--
gdb/s390-tdep.c | 28 ++++++++--------
gdb/stabsread.c | 6 ++--
gdb/symfile.c | 2 +-
gdb/utils.c | 2 +-
gdb/valops.c | 6 ++--
gdb/value.c | 2 +-
gdb/windows-nat.c | 4 +--
gdb/xcoffread.c | 4 +--
gdb/z80-tdep.c | 2 +-
gdbserver/netbsd-low.cc | 2 +-
gdbsupport/btrace-common.cc | 6 ++--
gdbsupport/format.cc | 4 +--
60 files changed, 140 insertions(+), 143 deletions(-)
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index eaae2d91047..ba37b4969a3 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -1851,7 +1851,7 @@ pass_in_v_vfp_candidate (struct gdbarch *gdbarch, struct regcache *regcache,
if (arg_type->is_vector ())
return pass_in_v (gdbarch, regcache, info, arg_type->length (),
arg->contents ().data ());
- /* fall through. */
+ [[fallthrough]];
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
index 3280a483a5e..fcb5aa4379b 100644
--- a/gdb/ada-exp.y
+++ b/gdb/ada-exp.y
@@ -1307,7 +1307,7 @@ write_object_renaming (struct parser_state *par_state,
break;
case 'L':
slice_state = LOWER_BOUND;
- /* FALLTHROUGH */
+ [[fallthrough]];
case 'S':
renaming_expr += 1;
if (isdigit (*renaming_expr))
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index ff7222c7eed..1a591567cda 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -5508,7 +5508,7 @@ compare_names_with_case (const char *string1, const char *string2,
else
return 1;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
default:
if (*string2 == '(')
return strcmp_iw_ordered (string1, string2);
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index f1c4e8b0b70..0930df81061 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -89,7 +89,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
break;
case TYPE_CODE_UNDEF:
index_type = NULL;
- /* FALL THROUGH */
+ [[fallthrough]];
default:
if (low_bound == 1)
return 0;
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index 9d69ec282d2..6be43434121 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -380,7 +380,7 @@ amd64_windows_return_value (struct gdbarch *gdbarch, struct value *function,
break;
}
}
- /* fall through */
+ [[fallthrough]];
default:
/* All other values that are 1, 2, 4 or 8 bytes long are returned
via RAX. */
diff --git a/gdb/arch/arm.c b/gdb/arch/arm.c
index 4720c201c53..6fc4c0e11cd 100644
--- a/gdb/arch/arm.c
+++ b/gdb/arch/arm.c
@@ -153,7 +153,7 @@ arm_instruction_changes_pc (uint32_t this_instr)
return 0;
}
/* Data processing instruction. */
- /* Fall through. */
+ [[fallthrough]];
case 0x1:
if (bits (this_instr, 12, 15) == 15)
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 58c550af183..66e258199d7 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -7600,7 +7600,7 @@ arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
else if (op == 0x3)
/* Not really supported. */
return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
- /* Fall through. */
+ [[fallthrough]];
default:
return arm_copy_undef (gdbarch, insn, dsc);
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index a27dbfa608f..2b4c21850d3 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -2731,7 +2731,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
last_was_structop = true;
goto symbol; /* Nope, must be a symbol. */
}
- /* FALL THRU. */
+ [[fallthrough]];
case '0':
case '1':
@@ -2828,7 +2828,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
return ENTRY;
}
}
- /* FALLTHRU */
+ [[fallthrough]];
case '+':
case '-':
case '*':
@@ -2855,7 +2855,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
case 'U':
if (tokstart[1] != '"' && tokstart[1] != '\'')
break;
- /* Fall through. */
+ [[fallthrough]];
case '\'':
case '"':
diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
index c7bbac1666d..11f93068b68 100644
--- a/gdb/cli/cli-setshow.c
+++ b/gdb/cli/cli-setshow.c
@@ -379,7 +379,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c)
case var_filename:
if (*arg == '\0')
error_no_arg (_("filename to set it to."));
- /* FALLTHROUGH */
+ [[fallthrough]];
case var_optional_filename:
{
char *val = NULL;
diff --git a/gdb/coffread.c b/gdb/coffread.c
index 4a6a83b15ad..256d6335468 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -914,7 +914,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
backtraces, so filter them out (from phdm@macqel.be). */
if (within_function)
break;
- /* Fall through. */
+ [[fallthrough]];
case C_STAT:
case C_THUMBLABEL:
case C_THUMBSTAT:
@@ -952,7 +952,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
that look like this. Ignore them. */
break;
/* For static symbols that don't start with '.'... */
- /* Fall through. */
+ [[fallthrough]];
case C_THUMBEXT:
case C_THUMBEXTFUNC:
case C_EXT:
diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c
index 20a7bb4e0d4..46318dba1b2 100644
--- a/gdb/compile/compile-c-support.c
+++ b/gdb/compile/compile-c-support.c
@@ -268,7 +268,7 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
}
}
- /* Fall through. */
+ [[fallthrough]];
default:
gdb_printf (stream,
diff --git a/gdb/compile/compile-c-symbols.c b/gdb/compile/compile-c-symbols.c
index 5982178170c..a80b9a43156 100644
--- a/gdb/compile/compile-c-symbols.c
+++ b/gdb/compile/compile-c-symbols.c
@@ -136,7 +136,7 @@ convert_one_symbol (compile_c_instance *context,
"be referenced from the current thread in "
"compiled code."),
sym.symbol->print_name ());
- /* FALLTHROUGH */
+ [[fallthrough]];
case LOC_UNRESOLVED:
/* 'symbol_name' cannot be used here as that one is used only for
local variables from compile_dwarf_expr_to_c.
diff --git a/gdb/compile/compile-cplus-symbols.c b/gdb/compile/compile-cplus-symbols.c
index 1edbf8f64b5..5cffe5cfebb 100644
--- a/gdb/compile/compile-cplus-symbols.c
+++ b/gdb/compile/compile-cplus-symbols.c
@@ -132,7 +132,7 @@ convert_one_symbol (compile_cplus_instance *instance,
"be referenced from the current thread in "
"compiled code."),
sym.symbol->print_name ());
- /* FALLTHROUGH */
+ [[fallthrough]];
case LOC_UNRESOLVED:
/* 'symbol_name' cannot be used here as that one is used only for
local variables from compile_dwarf_expr_to_c.
diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y
index 061882363be..4f407f504ef 100644
--- a/gdb/cp-name-parser.y
+++ b/gdb/cp-name-parser.y
@@ -1605,7 +1605,7 @@ yylex (YYSTYPE *lvalp, cpname_state *state)
sizeof "(anonymous namespace)" - 1);
return NAME;
}
- /* FALL THROUGH */
+ [[fallthrough]];
case ')':
case ',':
@@ -1642,7 +1642,7 @@ yylex (YYSTYPE *lvalp, cpname_state *state)
state->lexptr++;
return '-';
}
- /* FALL THRU. */
+ [[fallthrough]];
try_number:
case '0':
diff --git a/gdb/cp-support.c b/gdb/cp-support.c
index 882acfb62a2..085d7c976e2 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -532,7 +532,7 @@ replace_typedefs (struct demangle_parse_info *info,
{
case DEMANGLE_COMPONENT_ARGLIST:
check_cv_qualifiers (ret_comp);
- /* Fall through */
+ [[fallthrough]];
case DEMANGLE_COMPONENT_FUNCTION_TYPE:
case DEMANGLE_COMPONENT_TEMPLATE:
diff --git a/gdb/ctfread.c b/gdb/ctfread.c
index c74ec044c18..03a042ec38c 100644
--- a/gdb/ctfread.c
+++ b/gdb/ctfread.c
@@ -1473,7 +1473,7 @@ ctf_psymtab_type_cb (ctf_id_t tid, void *arg)
{
case CTF_K_ENUM:
ctf_psymtab_add_enums (ccp, tid);
- /* FALL THROUGH */
+ [[fallthrough]];
case CTF_K_STRUCT:
case CTF_K_UNION:
domain = STRUCT_DOMAIN;
diff --git a/gdb/d-exp.y b/gdb/d-exp.y
index 6c5569a1c8d..e2507982d50 100644
--- a/gdb/d-exp.y
+++ b/gdb/d-exp.y
@@ -1103,7 +1103,7 @@ lex_one_token (struct parser_state *par_state)
last_was_structop = 1;
goto symbol; /* Nope, must be a symbol. */
}
- /* FALL THRU. */
+ [[fallthrough]];
case '0':
case '1':
@@ -1180,7 +1180,7 @@ lex_one_token (struct parser_state *par_state)
return ENTRY;
}
}
- /* FALLTHRU */
+ [[fallthrough]];
case '+':
case '-':
case '*':
diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
index 38fb2a07c1f..4c3ea227750 100644
--- a/gdb/d-valprint.c
+++ b/gdb/d-valprint.c
@@ -85,7 +85,7 @@ d_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
stream, recurse, val, options);
if (ret == 0)
break;
- /* Fall through. */
+ [[fallthrough]];
default:
c_value_print_inner (val, stream, recurse, options);
break;
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index b92193bdadd..99d9fba96ea 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -2806,7 +2806,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
case N_NBSTS:
case N_NBLCS:
unknown_symtype_complaint (hex_string (type));
- /* FALLTHROUGH */
+ [[fallthrough]];
define_a_symbol:
/* These symbol types don't need the address field relocated,
diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c
index 0cf766a48b7..200d33aff4e 100644
--- a/gdb/disasm-selftests.c
+++ b/gdb/disasm-selftests.c
@@ -126,7 +126,7 @@ get_test_insn (struct gdbarch *gdbarch, size_t *len)
if (info->bits_per_address > sizeof (bfd_vma) * CHAR_BIT)
return insn;
}
- /* fall through */
+ [[fallthrough]];
default:
generic_case:
{
diff --git a/gdb/dwarf2/macro.c b/gdb/dwarf2/macro.c
index 2e88e670216..7d86d16d0e3 100644
--- a/gdb/dwarf2/macro.c
+++ b/gdb/dwarf2/macro.c
@@ -784,7 +784,7 @@ dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
/* We don't recognize any vendor extensions. */
break;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
default:
mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
@@ -939,7 +939,7 @@ dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
read_direct_string (abfd, mac_ptr, &bytes_read);
mac_ptr += bytes_read;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
default:
mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index a2c1428b0f4..665912aa845 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -6667,7 +6667,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
&& die->parent != NULL
&& die->parent->tag == DW_TAG_subprogram)
cu->processing_has_namespace_info = true;
- /* Fall through. */
+ [[fallthrough]];
case DW_TAG_inlined_subroutine:
read_func_scope (die, cu);
break;
@@ -6709,7 +6709,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
instead. */
if (cu->lang () != language_ada)
break;
- /* FALLTHROUGH */
+ [[fallthrough]];
case DW_TAG_base_type:
case DW_TAG_subrange_type:
case DW_TAG_generic_subrange:
@@ -6737,7 +6737,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
break;
/* The declaration is neither a global namespace nor a variable
alias. */
- /* Fall through. */
+ [[fallthrough]];
case DW_TAG_imported_module:
cu->processing_has_namespace_info = true;
if (die->child != NULL && (die->tag == DW_TAG_imported_declaration
@@ -16627,7 +16627,7 @@ cooked_indexer::index_dies (cutu_reader *reader,
case DW_TAG_module:
if (this_entry == nullptr)
break;
- /* FALLTHROUGH */
+ [[fallthrough]];
case DW_TAG_namespace:
/* We don't check THIS_ENTRY for a namespace, to handle
the ancient G++ workaround pointed out above. */
@@ -17334,7 +17334,7 @@ read_attribute_value (const struct die_reader_specs *reader,
info_ptr += bytes_read;
break;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case DW_FORM_line_strp:
if (!cu->per_cu->is_dwz)
{
@@ -17344,7 +17344,7 @@ read_attribute_value (const struct die_reader_specs *reader,
info_ptr += bytes_read;
break;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case DW_FORM_GNU_strp_alt:
{
dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd, true);
@@ -19157,7 +19157,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
break;
case DW_TAG_template_value_param:
suppress_add = 1;
- /* Fall through. */
+ [[fallthrough]];
case DW_TAG_constant:
case DW_TAG_variable:
case DW_TAG_member:
@@ -19334,7 +19334,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
break;
case DW_TAG_template_type_param:
suppress_add = 1;
- /* Fall through. */
+ [[fallthrough]];
case DW_TAG_class_type:
case DW_TAG_interface_type:
case DW_TAG_structure_type:
@@ -19389,7 +19389,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
case DW_TAG_unspecified_type:
if (cu->lang () == language_ada)
break;
- /* FALLTHROUGH */
+ [[fallthrough]];
case DW_TAG_typedef:
case DW_TAG_array_type:
case DW_TAG_base_type:
@@ -20186,7 +20186,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
return parent_type->name ();
return "";
}
- /* Fall through. */
+ [[fallthrough]];
default:
return determine_prefix (parent, cu);
}
@@ -20370,7 +20370,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
case DW_TAG_template_value_param:
if (attr_name == nullptr)
return unnamed_template_tag_name (die, cu);
- /* FALLTHROUGH. */
+ [[fallthrough]];
case DW_TAG_class_type:
case DW_TAG_interface_type:
case DW_TAG_structure_type:
diff --git a/gdb/eval.c b/gdb/eval.c
index 3358b0d8d32..8192aeba364 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -172,7 +172,7 @@ fetch_subexp_value (struct expression *exp,
case MEMORY_ERROR:
if (!preserve_errors)
break;
- /* Fall through. */
+ [[fallthrough]];
default:
throw;
break;
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index 18566afd67f..e4e2171d641 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -1503,7 +1503,7 @@ yylex (void)
/* Might be a floating point number. */
if (pstate->lexptr[1] < '0' || pstate->lexptr[1] > '9')
goto symbol; /* Nope, must be a symbol. */
- /* FALL THRU. */
+ [[fallthrough]];
case '0':
case '1':
@@ -1571,7 +1571,7 @@ yylex (void)
case '%':
last_was_structop = true;
- /* Fall through. */
+ [[fallthrough]];
case '+':
case '-':
case '*':
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index 211b83f555a..b56e194b7d5 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -1641,7 +1641,7 @@ fbsd_nat_target::stop_process (inferior *inf)
if (status.sig () == GDB_SIGNAL_STOP)
break;
- /* FALLTHROUGH */
+ [[fallthrough]];
default:
/* Some other event has occurred. Save the current
event. */
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 284793c055d..e310648d410 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -1102,7 +1102,7 @@ get_discrete_low_bound (struct type *type)
if (!type->is_unsigned ())
return -(1 << (type->length () * TARGET_CHAR_BIT - 1));
- /* fall through */
+ [[fallthrough]];
case TYPE_CODE_CHAR:
return 0;
@@ -1172,7 +1172,7 @@ get_discrete_high_bound (struct type *type)
return -low - 1;
}
- /* fall through */
+ [[fallthrough]];
case TYPE_CODE_CHAR:
{
/* This round-about calculation is to avoid shifting by
@@ -4437,7 +4437,7 @@ rank_one_type_parm_ptr (struct type *parm, struct type *arg, struct value *value
return NS_INTEGER_POINTER_CONVERSION_BADNESS;
}
}
- /* fall through */
+ [[fallthrough]];
case TYPE_CODE_ENUM:
case TYPE_CODE_FLAGS:
case TYPE_CODE_CHAR:
@@ -4609,7 +4609,7 @@ rank_one_type_parm_char (struct type *parm, struct type *arg, struct value *valu
return INTEGER_CONVERSION_BADNESS;
else if (arg->length () < parm->length ())
return INTEGER_PROMOTION_BADNESS;
- /* fall through */
+ [[fallthrough]];
case TYPE_CODE_CHAR:
/* Deal with signed, unsigned, and plain chars for C++ and
with int cases falling through from previous case. */
@@ -4742,7 +4742,7 @@ rank_one_type_parm_struct (struct type *parm, struct type *arg, struct value *va
rank.subrank = distance_to_ancestor (parm, arg, 0);
if (rank.subrank >= 0)
return sum_ranks (BASE_CONVERSION_BADNESS, rank);
- /* fall through */
+ [[fallthrough]];
default:
return INCOMPATIBLE_TYPE_BADNESS;
}
diff --git a/gdb/go-exp.y b/gdb/go-exp.y
index 28bf3f0ab33..c9b9c0b1ab7 100644
--- a/gdb/go-exp.y
+++ b/gdb/go-exp.y
@@ -1054,7 +1054,7 @@ lex_one_token (struct parser_state *par_state)
last_was_structop = 1;
goto symbol; /* Nope, must be a symbol. */
}
- /* FALL THRU. */
+ [[fallthrough]];
case '0':
case '1':
@@ -1129,7 +1129,7 @@ lex_one_token (struct parser_state *par_state)
return ENTRY;
}
}
- /* FALLTHRU */
+ [[fallthrough]];
case '+':
case '-':
case '*':
diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c
index 05788af15a6..ca1e6b5ba6f 100644
--- a/gdb/go-valprint.c
+++ b/gdb/go-valprint.c
@@ -114,7 +114,7 @@ go_language::value_print_inner (struct value *val, struct ui_file *stream,
break;
}
}
- /* Fall through. */
+ [[fallthrough]];
default:
c_value_print_inner (val, stream, recurse, options);
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 560f16aa0e3..12b98d6f20d 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -6011,7 +6011,7 @@ Do you want to stop the program?"),
ir.addr -= 1;
goto no_support;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case 0x0fb2: /* lss Gv */
case 0x0fb4: /* lfs Gv */
case 0x0fb5: /* lgs Gv */
@@ -6248,7 +6248,7 @@ Do you want to stop the program?"),
I386_SAVE_FPU_REGS))
return -1;
}
- /* Fall through */
+ [[fallthrough]];
default:
if (record_full_arch_list_add_mem (addr64, 2))
return -1;
@@ -6787,7 +6787,7 @@ Do you want to stop the program?"),
ir.addr -= 1;
goto no_support;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case 0xf5: /* cmc */
case 0xf8: /* clc */
case 0xf9: /* stc */
@@ -7229,7 +7229,7 @@ Do you want to stop the program?"),
else if (ir.rm == 1)
break;
}
- /* Fall through. */
+ [[fallthrough]];
case 3: /* lidt */
if (ir.mod == 3)
{
diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
index 72f978205ab..179c3fccc30 100644
--- a/gdb/m2-typeprint.c
+++ b/gdb/m2-typeprint.c
@@ -389,7 +389,7 @@ m2_get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
return 0;
}
}
- /* fall through */
+ [[fallthrough]];
default:
return get_discrete_bounds (type, lowp, highp);
}
diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c
index 96a566fb810..c4570da2e18 100644
--- a/gdb/m2-valprint.c
+++ b/gdb/m2-valprint.c
@@ -373,7 +373,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
gdb_printf (stream, "{...}");
break;
}
- /* Fall through. */
+ [[fallthrough]];
case TYPE_CODE_STRUCT:
if (m2_is_long_set (type))
m2_print_long_set (type, valaddr, 0, address, stream);
@@ -451,7 +451,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
value_print_inner (v, stream, recurse, options);
break;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case TYPE_CODE_REF:
case TYPE_CODE_ENUM:
diff --git a/gdb/machoread.c b/gdb/machoread.c
index 38c252c2861..87d30ec8587 100644
--- a/gdb/machoread.c
+++ b/gdb/machoread.c
@@ -292,7 +292,7 @@ macho_symtab_read (minimal_symbol_reader &reader,
case N_FUN:
if (sym->name == NULL || sym->name[0] == 0)
break;
- /* Fall through. */
+ [[fallthrough]];
case N_STSYM:
/* Interesting symbol. */
nbr_syms++;
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index fc731605991..a28005031e6 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -2582,7 +2582,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
those too. */
if (name[0] == '.')
continue;
- /* Fall through. */
+ [[fallthrough]];
default:
ms_type = mst_unknown;
unknown_ext_complaint (name);
@@ -3430,7 +3430,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
mst_file_text,
SECT_OFF_TEXT (objfile));
- /* FALLTHROUGH */
+ [[fallthrough]];
case stProc:
/* Ignore all parameter symbol records. */
@@ -3666,7 +3666,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
default:
unknown_ext_complaint (debug_info->ssext + psh->iss);
/* Pretend it's global. */
- /* Fall through. */
+ [[fallthrough]];
case stGlobal:
/* Global common symbols are resolved by the runtime loader,
ignore them. */
diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c
index 6982338751a..401e7c40726 100644
--- a/gdb/mi/mi-cmd-stack.c
+++ b/gdb/mi/mi-cmd-stack.c
@@ -652,7 +652,7 @@ list_args_or_locals (const frame_print_options &fp_opts,
case PRINT_SIMPLE_VALUES:
if (!mi_simple_type_p (sym2->type ()))
break;
- /* FALLTHROUGH */
+ [[fallthrough]];
case PRINT_ALL_VALUES:
if (sym->is_argument ())
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 72e500be959..71e22ce1a90 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -140,7 +140,7 @@ msymbol_is_function (struct objfile *objfile, minimal_symbol *minsym,
/* Ignore function symbol that is not a function entry. */
if (msymbol_is_cold_clone (minsym))
return false;
- /* fallthru */
+ [[fallthrough]];
default:
if (func_address_p != NULL)
*func_address_p = msym_addr;
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index d40d28e85de..17bc9db6b89 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -3992,7 +3992,7 @@ mips_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc)
&& (itype_rt (insn) & 0x2) == 0);
if (is_branch) /* BC1ANY2F, BC1ANY2T, BC1ANY4F, BC1ANY4T */
break;
- /* Fall through. */
+ [[fallthrough]];
case 18: /* COP2 */
case 19: /* COP3 */
is_branch = (itype_rs (insn) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
@@ -4100,7 +4100,7 @@ micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch,
|| (insn & 0x3) != 0x1))
/* BC1ANY*: bits 010000 111xx xxx01 */
break;
- /* Fall through. */
+ [[fallthrough]];
case 0x25: /* BEQ: bits 100101 */
case 0x2d: /* BNE: bits 101101 */
@@ -4122,7 +4122,7 @@ micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch,
/* JALR, JALR.HB: 000000 000x111100 111100 */
/* JALRS, JALRS.HB: 000000 010x111100 111100 */
break;
- /* Fall through. */
+ [[fallthrough]];
case 0x1d: /* JALS: bits 011101 */
case 0x35: /* J: bits 110101 */
diff --git a/gdb/msp430-tdep.c b/gdb/msp430-tdep.c
index 97d9073efbb..f65948f01d8 100644
--- a/gdb/msp430-tdep.c
+++ b/gdb/msp430-tdep.c
@@ -886,7 +886,7 @@ msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
break;
}
}
- /* Fall through. */
+ [[fallthrough]];
default:
error (_("Unknown msp430 isa"));
break;
diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c
index aa02f193399..3215c4a7410 100644
--- a/gdb/nat/linux-btrace.c
+++ b/gdb/nat/linux-btrace.c
@@ -896,8 +896,7 @@ linux_read_pt (btrace_data_pt *btrace, linux_btrace_target_info *tinfo,
case BTRACE_READ_NEW:
if (!perf_event_new_data (&tinfo->pev))
return BTRACE_ERR_NONE;
-
- /* Fall through. */
+ [[fallthrough]];
case BTRACE_READ_ALL:
perf_event_read_all (&tinfo->pev, &btrace->data, &btrace->size);
return BTRACE_ERR_NONE;
diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
index bf4c4387886..3066ff96a19 100644
--- a/gdb/nat/windows-nat.c
+++ b/gdb/nat/windows-nat.c
@@ -456,7 +456,7 @@ windows_process_info::handle_exception (struct target_waitstatus *ourstatus,
break;
}
#endif
- /* FALLTHROUGH */
+ [[fallthrough]];
case STATUS_WX86_BREAKPOINT:
DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT");
ourstatus->set_stopped (GDB_SIGNAL_TRAP);
@@ -495,7 +495,7 @@ windows_process_info::handle_exception (struct target_waitstatus *ourstatus,
break;
}
/* treat improperly formed exception as unknown */
- /* FALLTHROUGH */
+ [[fallthrough]];
default:
/* Treat unhandled first chance exceptions specially. */
if (current_event.u.Exception.dwFirstChance)
diff --git a/gdb/nat/x86-dregs.c b/gdb/nat/x86-dregs.c
index 731093dfa73..16669f69657 100644
--- a/gdb/nat/x86-dregs.c
+++ b/gdb/nat/x86-dregs.c
@@ -289,7 +289,7 @@ Invalid hardware breakpoint type %d in x86_length_and_rw_bits.\n"),
case 8:
if (TARGET_HAS_DR_LEN_8)
return (DR_LEN_8 | rw);
- /* FALL THROUGH */
+ [[fallthrough]];
default:
internal_error (_("\
Invalid hardware breakpoint length %d in x86_length_and_rw_bits.\n"), len);
diff --git a/gdb/p-exp.y b/gdb/p-exp.y
index 2360a500476..b0f334897ad 100644
--- a/gdb/p-exp.y
+++ b/gdb/p-exp.y
@@ -1159,7 +1159,7 @@ yylex (void)
goto symbol; /* Nope, must be a symbol. */
}
- /* FALL THRU. */
+ [[fallthrough]];
case '0':
case '1':
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
index fb9386293a6..678df5eee0d 100644
--- a/gdb/p-valprint.c
+++ b/gdb/p-valprint.c
@@ -298,7 +298,7 @@ pascal_language::value_print_inner (struct value *val,
gdb_printf (stream, "{...}");
break;
}
- /* Fall through. */
+ [[fallthrough]];
case TYPE_CODE_STRUCT:
if (options->vtblprint && pascal_object_is_vtbl_ptr_type (type))
{
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 5afbc565cf7..f0be4268e60 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -482,7 +482,7 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
byte_order);
break;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case 'f':
print_floating (valaddr, type, stream);
break;
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index 7a7d7617bc9..5aa8c096c6e 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -231,7 +231,7 @@ record_btrace_get_cpu (void)
case CS_NONE:
record_btrace_cpu.vendor = CV_UNKNOWN;
- /* Fall through. */
+ [[fallthrough]];
case CS_CPU:
return &record_btrace_cpu;
}
diff --git a/gdb/remote.c b/gdb/remote.c
index b405cb6abf7..3e90964f027 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -7985,7 +7985,7 @@ Packet: '%s'\n"),
if (event->ws.kind () != TARGET_WAITKIND_IGNORE)
break;
- /* fall through */
+ [[fallthrough]];
case 'S': /* Old style status, just signal only. */
{
int sig;
@@ -8502,7 +8502,7 @@ remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
putpkt (buf);
break;
}
- /* fallthrough */
+ [[fallthrough]];
default:
warning (_("Invalid remote reply: %s"), buf);
break;
@@ -9844,7 +9844,7 @@ remote_target::putpkt_binary (const char *buf, int cnt)
return 1;
case '-':
remote_debug_printf_nofunc ("Received Nak");
- /* FALLTHROUGH */
+ [[fallthrough]];
case SERIAL_TIMEOUT:
tcount++;
if (tcount > 3)
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 3725be44276..8849483d4d4 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -3183,7 +3183,7 @@ riscv_arg_location (struct gdbarch *gdbarch,
riscv_call_arg_struct (ainfo, cinfo);
break;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
default:
riscv_call_arg_scalar_int (ainfo, cinfo);
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index bae6737852d..355268dca42 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -4247,7 +4247,7 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 39: /* Vector Multiply-Sum Unsigned Halfword Saturate */
case 41: /* Vector Multiply-Sum Signed Halfword Saturate */
record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 20: /* Move To VSR Byte Mask Immediate opcode, b2 = 0,
ignore bit 31 */
case 21: /* Move To VSR Byte Mask Immediate opcode, b2 = 1,
@@ -4313,7 +4313,7 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
&& vra != 7 /* Decimal Convert From National */
&& vra != 31) /* Decimal Set Sign */
break;
- /* Fall through. */
+ [[fallthrough]];
/* 5.16 Decimal Integer Arithmetic Instructions */
case 1: /* Decimal Add Modulo */
case 65: /* Decimal Subtract Modulo */
@@ -4502,7 +4502,7 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
case 970: /* Vector Convert To Signed Fixed-Point Word Saturate */
case 906: /* Vector Convert To Unsigned Fixed-Point Word Saturate */
record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 12: /* Vector Merge High Byte */
case 14: /* Vector Pack Unsigned Halfword Unsigned Modulo */
case 76: /* Vector Merge High Halfword */
@@ -4835,7 +4835,7 @@ ppc_process_record_op19 (struct gdbarch *gdbarch, struct regcache *regcache,
case 560: /* Branch Conditional to Branch Target Address Register */
if ((PPC_BO (insn) & 0x4) == 0)
record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 528: /* Branch Conditional to Count Register */
if (PPC_LK (insn))
record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
@@ -4926,7 +4926,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 491: /* Divide Word */
if (PPC_OE (insn))
record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 9: /* Multiply High Doubleword Unsigned */
case 11: /* Multiply High Word Unsigned */
case 73: /* Multiply High Doubleword */
@@ -5018,7 +5018,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
- /* FALL-THROUGH */
+ [[fallthrough]];
case 0: /* Compare */
case 32: /* Compare logical */
case 144: /* Move To Condition Register Fields */
@@ -5041,7 +5041,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 373: /* Load Word Algebraic with Update Indexed */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
- /* FALL-THROUGH */
+ [[fallthrough]];
case 21: /* Load Doubleword Indexed */
case 52: /* Load Byte And Reserve Indexed */
case 116: /* Load Halfword And Reserve Indexed */
@@ -5114,7 +5114,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 631: /* Load Floating-Point Double with Update Indexed */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
- /* FALL-THROUGH */
+ [[fallthrough]];
case 535: /* Load Floating-Point Single Indexed */
case 599: /* Load Floating-Point Double Indexed */
case 855: /* Load Floating-Point as Integer Word Algebraic Indexed */
@@ -5210,7 +5210,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 759: /* Store Floating-Point Double with Update Indexed */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
- /* FALL-THROUGH */
+ [[fallthrough]];
case 135: /* Store Vector Element Byte Indexed */
case 167: /* Store Vector Element Halfword Indexed */
case 199: /* Store Vector Element Word Indexed */
@@ -5504,7 +5504,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
case 878: /* Transaction Abort Doubleword Conditional Immediate */
case 910: /* Transaction Abort */
record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 718: /* Transaction Check */
record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
return 0;
@@ -5728,7 +5728,7 @@ ppc_process_record_op60_XX2 (struct gdbarch *gdbarch,
case 24: /* VSX Vector Convert Half-Precision format to
Single-Precision format */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* Fall-through */
+ [[fallthrough]];
case 0: /* VSX Vector Extract Exponent Double-Precision */
case 1: /* VSX Vector Extract Significand Double-Precision */
case 7: /* VSX Vector Byte-Reverse Halfword */
@@ -5822,7 +5822,7 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
case 19: /* VSX Scalar Compare Greater Than or Equal
Double-Precision */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 240: /* VSX Vector Copy Sign Double-Precision */
case 208: /* VSX Vector Copy Sign Single-Precision */
case 130: /* VSX Logical AND */
@@ -6009,7 +6009,7 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
case 203: /* VSX Vector Square Root Double-Precision */
case 139: /* VSX Vector Square Root Single-Precision */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 345: /* VSX Scalar Absolute Value Double-Precision */
case 267: /* VSX Scalar Convert Scalar Single-Precision to
Vector Single-Precision format Non-signalling */
@@ -6032,7 +6032,7 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
case 298: /* VSX Scalar Test Data Class Single-Precision */
case 362: /* VSX Scalar Test Data Class Double-Precision */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 106: /* VSX Scalar Test for software Square Root
Double-Precision */
case 234: /* VSX Vector Test for software Square Root
@@ -6304,7 +6304,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
case 22: /* Move From FPSCR Control & set RN */
case 23: /* Move From FPSCR Control & set RN Immediate */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* Fall through. */
+ [[fallthrough]];
case 0: /* Move From FPSCR */
case 24: /* Move From FPSCR Lightweight */
if (PPC_FIELD (insn, 11, 5) == 0 && PPC_RC (insn))
@@ -6350,7 +6350,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
case 644: /* VSX Scalar Compare Unordered Quad-Precision */
case 708: /* VSX Scalar Test Data Class Quad-Precision */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 128: /* Floating Test for software Divide */
case 160: /* Floating Test for software Square Root */
record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
@@ -6387,7 +6387,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
}
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 68: /* VSX Scalar Compare Equal Quad-Precision */
case 196: /* VSX Scalar Compare Greater Than or Equal
Quad-Precision */
@@ -6395,7 +6395,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
case 676: /* VSX Scalar Maximum Type-C Quad-Precision */
case 740: /* VSX Scalar Minimum Type-C Quad-Precision */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 100: /* VSX Scalar Copy Sign Quad-Precision */
case 868: /* VSX Scalar Insert Exponent Quad-Precision */
ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
@@ -6406,7 +6406,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
{
case 27: /* VSX Scalar Square Root Quad-Precision */
record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 0: /* VSX Scalar Absolute Quad-Precision */
case 2: /* VSX Scalar Extract Exponent Quad-Precision */
case 8: /* VSX Scalar Negative Absolute Quad-Precision */
@@ -7171,10 +7171,10 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
case 13: /* Add Immediate Carrying and Record */
record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 12: /* Add Immediate Carrying */
record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 14: /* Add Immediate */
case 15: /* Add Immediate Shifted */
record_full_arch_list_add_reg (regcache,
@@ -7184,7 +7184,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
case 16: /* Branch Conditional */
if ((PPC_BO (insn) & 0x4) == 0)
record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 18: /* Branch */
if (PPC_LK (insn))
record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
@@ -7213,7 +7213,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
case 28: /* AND Immediate */
case 29: /* AND Immediate Shifted */
record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
- /* FALL-THROUGH */
+ [[fallthrough]];
case 24: /* OR Immediate */
case 25: /* OR Immediate Shifted */
case 26: /* XOR Immediate */
@@ -7233,7 +7233,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
case 43: /* Load Halfword Algebraic with Update */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
- /* FALL-THROUGH */
+ [[fallthrough]];
case 32: /* Load Word and Zero */
case 34: /* Load Byte and Zero */
case 40: /* Load Halfword and Zero */
@@ -7257,7 +7257,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
case 51: /* Load Floating-Point Double with Update */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
- /* FALL-THROUGH */
+ [[fallthrough]];
case 48: /* Load Floating-Point Single */
case 50: /* Load Floating-Point Double */
record_full_arch_list_add_reg (regcache,
@@ -7285,7 +7285,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
case 55: /* Store Floating-Point Double with Update */
record_full_arch_list_add_reg (regcache,
tdep->ppc_gp0_regnum + PPC_RA (insn));
- /* FALL-THROUGH */
+ [[fallthrough]];
case 36: /* Store Word */
case 38: /* Store Byte */
case 44: /* Store Halfword */
diff --git a/gdb/rust-parse.c b/gdb/rust-parse.c
index d2f6008026f..aaf4cef0d7e 100644
--- a/gdb/rust-parse.c
+++ b/gdb/rust-parse.c
@@ -1386,7 +1386,7 @@ rust_parser::parse_binop (bool required)
case COMPOUND_ASSIGN:
compound_assign_op = current_opcode;
- /* FALLTHROUGH */
+ [[fallthrough]];
case '=':
precedence = ASSIGN_PREC;
lex ();
@@ -1831,7 +1831,7 @@ rust_parser::parse_path (bool for_expr)
if (current_token != COLONCOLON)
return "self";
lex ();
- /* FALLTHROUGH */
+ [[fallthrough]];
case KW_SUPER:
while (current_token == KW_SUPER)
{
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index 54b5c89e5e3..5b58cb382e3 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -4376,7 +4376,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
break;
}
/* For other instructions... */
- /* Fall through. */
+ [[fallthrough]];
default:
gdb_printf (gdb_stdlog, "Warning: Unknown KM* function %02x at %s.\n",
(int)tmp, paddress (gdbarch, addr));
@@ -4685,7 +4685,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
break;
}
/* For KLMD... */
- /* Fall through. */
+ [[fallthrough]];
default:
gdb_printf (gdb_stdlog, "Warning: Unknown KMAC function %02x at %s.\n",
(int)tmp, paddress (gdbarch, addr));
@@ -6542,7 +6542,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
/* op3c */
if (record_full_arch_list_add_reg (regcache, S390_R0_REGNUM + inib[3]))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x0c: /* CSST */
/* op4 */
if (record_full_arch_list_add_mem (oaddr2, 4))
@@ -6557,7 +6557,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 4))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x10: /* CSDST */
/* op6 */
if (target_read_memory (oaddr2 + 0x68, buf, 8))
@@ -6573,7 +6573,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 4))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x04: /* CS */
CS:
/* op1c */
@@ -6598,7 +6598,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 8))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x11: /* CSDSTG */
/* op6 */
if (target_read_memory (oaddr2 + 0x68, buf, 8))
@@ -6607,7 +6607,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 8))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x0d: /* CSSTG */
CSSTG:
/* op4 */
@@ -6617,7 +6617,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 8))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x05: /* CSG */
/* op1c */
if (record_full_arch_list_add_mem (oaddr2 + 0x08, 8))
@@ -6631,7 +6631,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
/* op3c */
if (s390_record_gpr_g (gdbarch, regcache, inib[3]))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x0e: /* CSSTGR */
/* op4 */
if (record_full_arch_list_add_mem (oaddr2, 8))
@@ -6646,7 +6646,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 8))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x12: /* CSDSTGR */
/* op6 */
if (target_read_memory (oaddr2 + 0x68, buf, 8))
@@ -6662,7 +6662,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 8))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x06: /* CSGR */
CSGR:
/* op1c */
@@ -6687,7 +6687,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 16))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x13: /* CSDSTX */
/* op6 */
if (target_read_memory (oaddr2 + 0x68, buf, 8))
@@ -6696,7 +6696,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 16))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x0f: /* CSSTX */
CSSTX:
/* op4 */
@@ -6706,7 +6706,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
if (record_full_arch_list_add_mem (oaddr3, 16))
return -1;
- /* fallthru */
+ [[fallthrough]];
case 0x07: /* CSX */
/* op1c */
if (record_full_arch_list_add_mem (oaddr2 + 0x00, 16))
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index 4011475f7ac..088058030a3 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -1100,7 +1100,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
}
break;
}
- /* Fall through. */
+ [[fallthrough]];
case 'P':
/* acc seems to use P to declare the prototypes of functions that
@@ -1111,7 +1111,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
sym->set_type (read_type (&p, objfile));
goto process_prototype_types;
}
- /*FALLTHROUGH */
+ [[fallthrough]];
case 'R':
/* Parameter which is in a register. */
@@ -2499,7 +2499,7 @@ read_member_functions (struct stab_field_info *fip, const char **pp,
complaint (_("member function type missing, got '%c'"),
(*pp)[-1]);
/* Normal member function. */
- /* Fall through. */
+ [[fallthrough]];
case '.':
/* normal member function. */
diff --git a/gdb/symfile.c b/gdb/symfile.c
index a6236804b08..059922b93ef 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3044,7 +3044,7 @@ section_is_mapped (struct obj_section *osect)
if (osect->ovly_mapped == -1)
gdbarch_overlay_update (gdbarch, osect);
}
- /* fall thru */
+ [[fallthrough]];
case ovly_on: /* overlay debugging manual */
return osect->ovly_mapped == 1;
}
diff --git a/gdb/utils.c b/gdb/utils.c
index 94a7cafa65b..5adbcfeb544 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -218,7 +218,7 @@ can_dump_core (enum resource_limit_kind limit_kind)
case LIMIT_CUR:
if (rlim.rlim_cur == 0)
return 0;
- /* Fall through. */
+ [[fallthrough]];
case LIMIT_MAX:
if (rlim.rlim_max == 0)
diff --git a/gdb/valops.c b/gdb/valops.c
index a8760ccf3e4..6521580a1e8 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -1280,7 +1280,7 @@ value_assign (struct value *toval, struct value *fromval)
break;
}
}
- /* Fall through. */
+ [[fallthrough]];
default:
error (_("Left operand of assignment is not an lvalue."));
@@ -2820,7 +2820,7 @@ find_overload_match (gdb::array_view<value *> args,
case where a xmethod is better than the source
method, except when the xmethod match quality is
non-standard. */
- /* FALLTHROUGH */
+ [[fallthrough]];
case 1: /* Src method and ext method are incompatible. */
/* If ext method match is not standard, then let source method
win. Otherwise, fallthrough to let xmethod win. */
@@ -2832,7 +2832,7 @@ find_overload_match (gdb::array_view<value *> args,
method_match_quality = src_method_match_quality;
break;
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case 2: /* Ext method is champion. */
method_oload_champ = ext_method_oload_champ;
method_badness = ext_method_badness;
diff --git a/gdb/value.c b/gdb/value.c
index 7067ae94df0..b4da9675039 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -3336,7 +3336,7 @@ pack_long (gdb_byte *buf, struct type *type, LONGEST num)
{
case TYPE_CODE_RANGE:
num -= type->bounds ()->bias;
- /* Fall through. */
+ [[fallthrough]];
case TYPE_CODE_INT:
case TYPE_CODE_CHAR:
case TYPE_CODE_ENUM:
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index e4d50d081c9..caefebcaf48 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -2286,14 +2286,14 @@ redir_open (const char *redir_string, int *inp, int *out, int *err)
{
case '0':
fname++;
- /* FALLTHROUGH */
+ [[fallthrough]];
case '<':
fd = inp;
mode = O_RDONLY;
break;
case '1': case '2':
fname++;
- /* FALLTHROUGH */
+ [[fallthrough]];
case '>':
fd = (rc == '2') ? err : out;
mode = O_WRONLY | O_CREAT;
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 829fc1f09c7..856fa134ed7 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -1532,7 +1532,7 @@ process_xcoff_symbol (struct xcoff_symbol *cs, struct objfile *objfile)
default:
complaint (_("Unexpected storage class: %d"),
cs->c_sclass);
- /* FALLTHROUGH */
+ [[fallthrough]];
case C_DECL:
case C_PSYM:
@@ -2359,7 +2359,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader,
complaint (_("Storage class %d not recognized during scan"),
sclass);
}
- /* FALLTHROUGH */
+ [[fallthrough]];
case C_FCN:
/* C_FCN is .bf and .ef symbols. I think it is sufficient
diff --git a/gdb/z80-tdep.c b/gdb/z80-tdep.c
index ae328550b06..f0cc7c0d917 100644
--- a/gdb/z80-tdep.c
+++ b/gdb/z80-tdep.c
@@ -799,7 +799,7 @@ z80_software_single_step (struct regcache *regcache)
break;
case insn_jr_cc_d:
opcode &= 030; /* JR NZ,d has cc equal to 040, but others 000 */
- /* fall through */
+ [[fallthrough]];
case insn_jp_cc_nn:
case insn_call_cc_nn:
case insn_ret_cc:
diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc
index 4defd79eee4..10d8d280b98 100644
--- a/gdbserver/netbsd-low.cc
+++ b/gdbserver/netbsd-low.cc
@@ -410,7 +410,7 @@ netbsd_process_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
case TARGET_WAITKIND_THREAD_CREATED:
case TARGET_WAITKIND_THREAD_EXITED:
/* The core needlessly stops on these events. */
- /* FALLTHROUGH */
+ [[fallthrough]];
case TARGET_WAITKIND_SPURIOUS:
/* Spurious events are unhandled by the gdbserver core. */
if (ptrace (PT_CONTINUE, current_process ()->pid, (void *) 1, 0)
diff --git a/gdbsupport/btrace-common.cc b/gdbsupport/btrace-common.cc
index 932a11888b0..c09fd504270 100644
--- a/gdbsupport/btrace-common.cc
+++ b/gdbsupport/btrace-common.cc
@@ -134,8 +134,7 @@ btrace_data_append (struct btrace_data *dst,
case BTRACE_FORMAT_NONE:
dst->format = BTRACE_FORMAT_BTS;
dst->variant.bts.blocks = new std::vector<btrace_block>;
-
- /* Fall-through. */
+ [[fallthrough]];
case BTRACE_FORMAT_BTS:
{
unsigned int blk;
@@ -163,8 +162,7 @@ btrace_data_append (struct btrace_data *dst,
dst->format = BTRACE_FORMAT_PT;
dst->variant.pt.data = NULL;
dst->variant.pt.size = 0;
-
- /* fall-through. */
+ [[fallthrough]];
case BTRACE_FORMAT_PT:
{
gdb_byte *data;
diff --git a/gdbsupport/format.cc b/gdbsupport/format.cc
index 6e5a3cb6603..85d1f9a8905 100644
--- a/gdbsupport/format.cc
+++ b/gdbsupport/format.cc
@@ -257,14 +257,14 @@ format_pieces::format_pieces (const char **arg, bool gdb_extensions,
case 'u':
if (seen_hash)
bad = 1;
- /* FALLTHROUGH */
+ [[fallthrough]];
case 'o':
case 'x':
case 'X':
if (seen_space || seen_plus)
bad = 1;
- /* FALLTHROUGH */
+ [[fallthrough]];
case 'd':
case 'i':
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 2/7] Switch to -Wimplicit-fallthrough=5
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
2023-10-16 23:02 ` [PATCH 1/7] Use C++17 [[fallthrough]] attribute Tom Tromey
@ 2023-10-16 23:02 ` Tom Tromey
2023-10-16 23:02 ` [PATCH 3/7] Enable some C++14 code in array-view.h Tom Tromey
` (5 subsequent siblings)
7 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
This changes the various gdb-related directories to use
-Wimplicit-fallthrough=5, meaning that only the fallthrough attribute
can be used in switches -- special 'fallthrough' comments will no
longer be usable.
---
gdb/configure | 2 +-
gdbserver/configure | 2 +-
gdbsupport/configure | 2 +-
gdbsupport/warning.m4 | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/gdb/configure b/gdb/configure
index 0878481e354..eb46a19051d 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -29620,7 +29620,7 @@ build_warnings="-Wall -Wpointer-arith \
-Wno-mismatched-tags \
-Wno-error=deprecated-register \
-Wsuggest-override \
--Wimplicit-fallthrough=3 \
+-Wimplicit-fallthrough=5 \
-Wduplicated-cond \
-Wshadow=local \
-Wdeprecated-copy \
diff --git a/gdbserver/configure b/gdbserver/configure
index c6b8d7803c4..957fecab9f0 100755
--- a/gdbserver/configure
+++ b/gdbserver/configure
@@ -11892,7 +11892,7 @@ build_warnings="-Wall -Wpointer-arith \
-Wno-mismatched-tags \
-Wno-error=deprecated-register \
-Wsuggest-override \
--Wimplicit-fallthrough=3 \
+-Wimplicit-fallthrough=5 \
-Wduplicated-cond \
-Wshadow=local \
-Wdeprecated-copy \
diff --git a/gdbsupport/configure b/gdbsupport/configure
index 0ef3d25a10b..ae36a20dd15 100755
--- a/gdbsupport/configure
+++ b/gdbsupport/configure
@@ -12389,7 +12389,7 @@ build_warnings="-Wall -Wpointer-arith \
-Wno-mismatched-tags \
-Wno-error=deprecated-register \
-Wsuggest-override \
--Wimplicit-fallthrough=3 \
+-Wimplicit-fallthrough=5 \
-Wduplicated-cond \
-Wshadow=local \
-Wdeprecated-copy \
diff --git a/gdbsupport/warning.m4 b/gdbsupport/warning.m4
index ea573c63c4a..774f0208e9b 100644
--- a/gdbsupport/warning.m4
+++ b/gdbsupport/warning.m4
@@ -44,7 +44,7 @@ build_warnings="-Wall -Wpointer-arith \
-Wno-mismatched-tags \
-Wno-error=deprecated-register \
-Wsuggest-override \
--Wimplicit-fallthrough=3 \
+-Wimplicit-fallthrough=5 \
-Wduplicated-cond \
-Wshadow=local \
-Wdeprecated-copy \
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 3/7] Enable some C++14 code in array-view.h
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
2023-10-16 23:02 ` [PATCH 1/7] Use C++17 [[fallthrough]] attribute Tom Tromey
2023-10-16 23:02 ` [PATCH 2/7] Switch to -Wimplicit-fallthrough=5 Tom Tromey
@ 2023-10-16 23:02 ` Tom Tromey
2023-10-16 23:02 ` [PATCH 4/7] Use try_emplace in index-write.c Tom Tromey
` (4 subsequent siblings)
7 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
This changes gdbsupport/array-view.h to enable some code that is
C++14-specific.
---
gdbsupport/array-view.h | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/gdbsupport/array-view.h b/gdbsupport/array-view.h
index ee3a3c58710..d58b99fb647 100644
--- a/gdbsupport/array-view.h
+++ b/gdbsupport/array-view.h
@@ -153,18 +153,17 @@ class array_view
: m_array (c.data ()), m_size (c.size ())
{}
- /* Observer methods. Some of these can't be constexpr until we
- require C++14. */
- /*constexpr14*/ T *data () noexcept { return m_array; }
+ /* Observer methods. */
+ constexpr T *data () noexcept { return m_array; }
constexpr const T *data () const noexcept { return m_array; }
- /*constexpr14*/ T *begin () noexcept { return m_array; }
+ constexpr T *begin () noexcept { return m_array; }
constexpr const T *begin () const noexcept { return m_array; }
- /*constexpr14*/ T *end () noexcept { return m_array + m_size; }
+ constexpr T *end () noexcept { return m_array + m_size; }
constexpr const T *end () const noexcept { return m_array + m_size; }
- /*constexpr14*/ reference operator[] (size_t index) noexcept
+ constexpr reference operator[] (size_t index) noexcept
{
#if defined(_GLIBCXX_DEBUG)
gdb_assert (index < m_size);
@@ -173,7 +172,7 @@ class array_view
}
constexpr const_reference operator[] (size_t index) const noexcept
{
-#if defined(_GLIBCXX_DEBUG) && __cplusplus >= 201402L
+#if defined(_GLIBCXX_DEBUG)
gdb_assert (index < m_size);
#endif
return m_array[index];
@@ -187,7 +186,7 @@ class array_view
/* Return a new array view over SIZE elements starting at START. */
constexpr array_view<T> slice (size_type start, size_type size) const noexcept
{
-#if defined(_GLIBCXX_DEBUG) && __cplusplus >= 201402L
+#if defined(_GLIBCXX_DEBUG)
gdb_assert (start + size <= m_size);
#endif
return {m_array + start, size};
@@ -197,7 +196,7 @@ class array_view
inclusive. */
constexpr array_view<T> slice (size_type start) const noexcept
{
-#if defined(_GLIBCXX_DEBUG) && __cplusplus >= 201402L
+#if defined(_GLIBCXX_DEBUG)
gdb_assert (start <= m_size);
#endif
return {m_array + start, size () - start};
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 4/7] Use try_emplace in index-write.c
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
` (2 preceding siblings ...)
2023-10-16 23:02 ` [PATCH 3/7] Enable some C++14 code in array-view.h Tom Tromey
@ 2023-10-16 23:02 ` Tom Tromey
2023-10-17 8:56 ` Pedro Alves
2023-10-16 23:02 ` [PATCH 5/7] Rely on C++17 <new> in new-op.cc Tom Tromey
` (3 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
index-write.c has a comment indicating that C++17's try_emplace could
be used. This patch makes the change.
---
gdb/dwarf2/index-write.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
index a6d770c9ee5..e402d407ee7 100644
--- a/gdb/dwarf2/index-write.c
+++ b/gdb/dwarf2/index-write.c
@@ -384,24 +384,16 @@ write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool)
continue;
gdb_assert (entry.index_offset == 0);
- /* Finding before inserting is faster than always trying to
- insert, because inserting always allocates a node, does the
- lookup, and then destroys the new node if another node
- already had the same key. C++17 try_emplace will avoid
- this. */
- const auto found
- = symbol_hash_table.find (entry.cu_indices);
- if (found != symbol_hash_table.end ())
+ const auto &pair = symbol_hash_table.try_emplace (entry.cu_indices,
+ cpool.size ());
+ entry.index_offset = pair.first->second;
+ if (pair.second)
{
- entry.index_offset = found->second;
- continue;
+ /* Newly inserted. */
+ cpool.append_offset (entry.cu_indices.size ());
+ for (const auto index : entry.cu_indices)
+ cpool.append_offset (index);
}
-
- symbol_hash_table.emplace (entry.cu_indices, cpool.size ());
- entry.index_offset = cpool.size ();
- cpool.append_offset (entry.cu_indices.size ());
- for (const auto index : entry.cu_indices)
- cpool.append_offset (index);
}
}
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 5/7] Rely on C++17 <new> in new-op.cc
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
` (3 preceding siblings ...)
2023-10-16 23:02 ` [PATCH 4/7] Use try_emplace in index-write.c Tom Tromey
@ 2023-10-16 23:02 ` Tom Tromey
2023-10-16 23:02 ` [PATCH 6/7] Rely on copy elision in scope-exit.h Tom Tromey
` (2 subsequent siblings)
7 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
gdbsupport/new-op.cc has a comment about relying on the C++-17 <new>
header. This patch implements the suggestion.
---
gdbsupport/new-op.cc | 5 -----
1 file changed, 5 deletions(-)
diff --git a/gdbsupport/new-op.cc b/gdbsupport/new-op.cc
index 6a056ef508f..181fc4957fa 100644
--- a/gdbsupport/new-op.cc
+++ b/gdbsupport/new-op.cc
@@ -27,11 +27,6 @@
#include "host-defs.h"
#include <new>
-/* These are declared in <new> starting C++14. Add these here to enable
- compilation using C++11. */
-extern void operator delete (void *p, std::size_t) noexcept;
-extern void operator delete[] (void *p, std::size_t) noexcept;
-
/* Override operator new / operator new[], in order to internal_error
on allocation failure and thus query the user for abort/core
dump/continue, just like xmalloc does. We don't do this from a
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 6/7] Rely on copy elision in scope-exit.h
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
` (4 preceding siblings ...)
2023-10-16 23:02 ` [PATCH 5/7] Rely on C++17 <new> in new-op.cc Tom Tromey
@ 2023-10-16 23:02 ` Tom Tromey
2023-10-16 23:02 ` [PATCH 7/7] Use C++17 void_t Tom Tromey
2023-10-17 9:06 ` [PATCH 0/7] More C++17 Updates Pedro Alves
7 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
gdbsupport/scope-exit.h has a couple of comments about being able to
rely on copy elision in C++17. This patch makes the change.
---
gdbsupport/scope-exit.h | 22 ++--------------------
1 file changed, 2 insertions(+), 20 deletions(-)
diff --git a/gdbsupport/scope-exit.h b/gdbsupport/scope-exit.h
index cb8d9255869..8fa40b1ca8a 100644
--- a/gdbsupport/scope-exit.h
+++ b/gdbsupport/scope-exit.h
@@ -69,16 +69,7 @@ class scope_exit_base
}
}
- /* This is needed for make_scope_exit because copy elision isn't
- guaranteed until C++17. An optimizing compiler will usually skip
- calling this, but it must exist. */
- scope_exit_base (const scope_exit_base &other)
- : m_released (other.m_released)
- {
- other.m_released = true;
- }
-
- void operator= (const scope_exit_base &) = delete;
+ DISABLE_COPY_AND_ASSIGN (scope_exit_base);
/* If this is called, then the wrapped function will not be called
on destruction. */
@@ -132,16 +123,7 @@ class scope_exit : public scope_exit_base<scope_exit<EF>>
rhs.release ();
}
- /* This is needed for make_scope_exit because copy elision isn't
- guaranteed until C++17. An optimizing compiler will usually skip
- calling this, but it must exist. */
- scope_exit (const scope_exit &other)
- : scope_exit_base<scope_exit<EF>> (other),
- m_exit_function (other.m_exit_function)
- {
- }
-
- void operator= (const scope_exit &) = delete;
+ DISABLE_COPY_AND_ASSIGN (scope_exit);
void operator= (scope_exit &&) = delete;
private:
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 7/7] Use C++17 void_t
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
` (5 preceding siblings ...)
2023-10-16 23:02 ` [PATCH 6/7] Rely on copy elision in scope-exit.h Tom Tromey
@ 2023-10-16 23:02 ` Tom Tromey
2023-10-17 9:06 ` [PATCH 0/7] More C++17 Updates Pedro Alves
7 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-16 23:02 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
C++17 has void_t and make_void, so gdbsupport/traits.h can be
simplified.
---
gdbsupport/traits.h | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/gdbsupport/traits.h b/gdbsupport/traits.h
index f6bb64911be..277e117bead 100644
--- a/gdbsupport/traits.h
+++ b/gdbsupport/traits.h
@@ -43,15 +43,6 @@
namespace gdb {
-/* Pre C++14-safe (CWG 1558) version of C++17's std::void_t. See
- <http://en.cppreference.com/w/cpp/types/void_t>. */
-
-template<typename... Ts>
-struct make_void { typedef void type; };
-
-template<typename... Ts>
-using void_t = typename make_void<Ts...>::type;
-
/* Implementation of the detection idiom:
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4502.pdf
@@ -79,7 +70,7 @@ struct detector
/* Implementation of the detection idiom (positive case). */
template<typename Default, template<typename...> class Op, typename... Args>
-struct detector<Default, void_t<Op<Args...>>, Op, Args...>
+struct detector<Default, std::void_t<Op<Args...>>, Op, Args...>
{
using value_t = std::true_type;
using type = Op<Args...>;
--
2.41.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/7] Use C++17 [[fallthrough]] attribute
2023-10-16 23:02 ` [PATCH 1/7] Use C++17 [[fallthrough]] attribute Tom Tromey
@ 2023-10-16 23:17 ` John Baldwin
2023-10-19 20:23 ` Tom Tromey
2023-10-17 8:53 ` Luis Machado
1 sibling, 1 reply; 17+ messages in thread
From: John Baldwin @ 2023-10-16 23:17 UTC (permalink / raw)
To: Tom Tromey, gdb-patches
On 10/16/23 4:02 PM, Tom Tromey wrote:
> This changes gdb to use the C++17 [[fallthrough]] attribute rather
> than special comments.
>
> This was mostly done by script, but I neglected a few spellings and so
> also fixed it up by hand.
>
> I suspect this fixes the bug mentioned below, by switching to a
> standard approach that, presumably, clang supports.
>
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23159
The fbsd-nat.c change is explicitly ok with me.
The series in general seems ok to me though I didn't thorougly
review all of this patch in particular.
--
John Baldwin
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/7] Use C++17 [[fallthrough]] attribute
2023-10-16 23:02 ` [PATCH 1/7] Use C++17 [[fallthrough]] attribute Tom Tromey
2023-10-16 23:17 ` John Baldwin
@ 2023-10-17 8:53 ` Luis Machado
2023-10-19 20:23 ` Tom Tromey
1 sibling, 1 reply; 17+ messages in thread
From: Luis Machado @ 2023-10-17 8:53 UTC (permalink / raw)
To: Tom Tromey, gdb-patches
On 10/17/23 00:02, Tom Tromey wrote:
> This changes gdb to use the C++17 [[fallthrough]] attribute rather
> than special comments.
>
> This was mostly done by script, but I neglected a few spellings and so
> also fixed it up by hand.
>
> I suspect this fixes the bug mentioned below, by switching to a
> standard approach that, presumably, clang supports.
>
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23159
> ---
> gdb/aarch64-tdep.c | 2 +-
> gdb/ada-exp.y | 2 +-
> gdb/ada-lang.c | 2 +-
> gdb/ada-valprint.c | 2 +-
> gdb/amd64-windows-tdep.c | 2 +-
> gdb/arch/arm.c | 2 +-
> gdb/arm-tdep.c | 2 +-
> gdb/c-exp.y | 6 ++--
> gdb/cli/cli-setshow.c | 2 +-
> gdb/coffread.c | 4 +--
> gdb/compile/compile-c-support.c | 2 +-
> gdb/compile/compile-c-symbols.c | 2 +-
> gdb/compile/compile-cplus-symbols.c | 2 +-
> gdb/cp-name-parser.y | 4 +--
> gdb/cp-support.c | 2 +-
> gdb/ctfread.c | 2 +-
> gdb/d-exp.y | 4 +--
> gdb/d-valprint.c | 2 +-
> gdb/dbxread.c | 2 +-
> gdb/disasm-selftests.c | 2 +-
> gdb/dwarf2/macro.c | 4 +--
> gdb/dwarf2/read.c | 22 ++++++------
> gdb/eval.c | 2 +-
> gdb/f-exp.y | 4 +--
> gdb/fbsd-nat.c | 2 +-
> gdb/gdbtypes.c | 10 +++---
> gdb/go-exp.y | 4 +--
> gdb/go-valprint.c | 2 +-
> gdb/i386-tdep.c | 8 ++---
> gdb/m2-typeprint.c | 2 +-
> gdb/m2-valprint.c | 4 +--
> gdb/machoread.c | 2 +-
> gdb/mdebugread.c | 6 ++--
> gdb/mi/mi-cmd-stack.c | 2 +-
> gdb/minsyms.c | 2 +-
> gdb/mips-tdep.c | 6 ++--
> gdb/msp430-tdep.c | 2 +-
> gdb/nat/linux-btrace.c | 3 +-
> gdb/nat/windows-nat.c | 4 +--
> gdb/nat/x86-dregs.c | 2 +-
> gdb/p-exp.y | 2 +-
> gdb/p-valprint.c | 2 +-
> gdb/printcmd.c | 2 +-
> gdb/record-btrace.c | 2 +-
> gdb/remote.c | 6 ++--
> gdb/riscv-tdep.c | 2 +-
> gdb/rs6000-tdep.c | 52 ++++++++++++++---------------
> gdb/rust-parse.c | 4 +--
> gdb/s390-tdep.c | 28 ++++++++--------
> gdb/stabsread.c | 6 ++--
> gdb/symfile.c | 2 +-
> gdb/utils.c | 2 +-
> gdb/valops.c | 6 ++--
> gdb/value.c | 2 +-
> gdb/windows-nat.c | 4 +--
> gdb/xcoffread.c | 4 +--
> gdb/z80-tdep.c | 2 +-
> gdbserver/netbsd-low.cc | 2 +-
> gdbsupport/btrace-common.cc | 6 ++--
> gdbsupport/format.cc | 4 +--
> 60 files changed, 140 insertions(+), 143 deletions(-)
>
> diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
> index eaae2d91047..ba37b4969a3 100644
> --- a/gdb/aarch64-tdep.c
> +++ b/gdb/aarch64-tdep.c
> @@ -1851,7 +1851,7 @@ pass_in_v_vfp_candidate (struct gdbarch *gdbarch, struct regcache *regcache,
> if (arg_type->is_vector ())
> return pass_in_v (gdbarch, regcache, info, arg_type->length (),
> arg->contents ().data ());
> - /* fall through. */
> + [[fallthrough]];
>
> case TYPE_CODE_STRUCT:
> case TYPE_CODE_UNION:
> diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
> index 3280a483a5e..fcb5aa4379b 100644
> --- a/gdb/ada-exp.y
> +++ b/gdb/ada-exp.y
> @@ -1307,7 +1307,7 @@ write_object_renaming (struct parser_state *par_state,
> break;
> case 'L':
> slice_state = LOWER_BOUND;
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case 'S':
> renaming_expr += 1;
> if (isdigit (*renaming_expr))
> diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
> index ff7222c7eed..1a591567cda 100644
> --- a/gdb/ada-lang.c
> +++ b/gdb/ada-lang.c
> @@ -5508,7 +5508,7 @@ compare_names_with_case (const char *string1, const char *string2,
> else
> return 1;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
> default:
> if (*string2 == '(')
> return strcmp_iw_ordered (string1, string2);
> diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
> index f1c4e8b0b70..0930df81061 100644
> --- a/gdb/ada-valprint.c
> +++ b/gdb/ada-valprint.c
> @@ -89,7 +89,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
> break;
> case TYPE_CODE_UNDEF:
> index_type = NULL;
> - /* FALL THROUGH */
> + [[fallthrough]];
> default:
> if (low_bound == 1)
> return 0;
> diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
> index 9d69ec282d2..6be43434121 100644
> --- a/gdb/amd64-windows-tdep.c
> +++ b/gdb/amd64-windows-tdep.c
> @@ -380,7 +380,7 @@ amd64_windows_return_value (struct gdbarch *gdbarch, struct value *function,
> break;
> }
> }
> - /* fall through */
> + [[fallthrough]];
> default:
> /* All other values that are 1, 2, 4 or 8 bytes long are returned
> via RAX. */
> diff --git a/gdb/arch/arm.c b/gdb/arch/arm.c
> index 4720c201c53..6fc4c0e11cd 100644
> --- a/gdb/arch/arm.c
> +++ b/gdb/arch/arm.c
> @@ -153,7 +153,7 @@ arm_instruction_changes_pc (uint32_t this_instr)
> return 0;
> }
> /* Data processing instruction. */
> - /* Fall through. */
> + [[fallthrough]];
>
> case 0x1:
> if (bits (this_instr, 12, 15) == 15)
> diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
> index 58c550af183..66e258199d7 100644
> --- a/gdb/arm-tdep.c
> +++ b/gdb/arm-tdep.c
> @@ -7600,7 +7600,7 @@ arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
> else if (op == 0x3)
> /* Not really supported. */
> return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
> - /* Fall through. */
> + [[fallthrough]];
>
> default:
> return arm_copy_undef (gdbarch, insn, dsc);
> diff --git a/gdb/c-exp.y b/gdb/c-exp.y
> index a27dbfa608f..2b4c21850d3 100644
> --- a/gdb/c-exp.y
> +++ b/gdb/c-exp.y
> @@ -2731,7 +2731,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
> last_was_structop = true;
> goto symbol; /* Nope, must be a symbol. */
> }
> - /* FALL THRU. */
> + [[fallthrough]];
>
> case '0':
> case '1':
> @@ -2828,7 +2828,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
> return ENTRY;
> }
> }
> - /* FALLTHRU */
> + [[fallthrough]];
> case '+':
> case '-':
> case '*':
> @@ -2855,7 +2855,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
> case 'U':
> if (tokstart[1] != '"' && tokstart[1] != '\'')
> break;
> - /* Fall through. */
> + [[fallthrough]];
> case '\'':
> case '"':
>
> diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
> index c7bbac1666d..11f93068b68 100644
> --- a/gdb/cli/cli-setshow.c
> +++ b/gdb/cli/cli-setshow.c
> @@ -379,7 +379,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c)
> case var_filename:
> if (*arg == '\0')
> error_no_arg (_("filename to set it to."));
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case var_optional_filename:
> {
> char *val = NULL;
> diff --git a/gdb/coffread.c b/gdb/coffread.c
> index 4a6a83b15ad..256d6335468 100644
> --- a/gdb/coffread.c
> +++ b/gdb/coffread.c
> @@ -914,7 +914,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
> backtraces, so filter them out (from phdm@macqel.be). */
> if (within_function)
> break;
> - /* Fall through. */
> + [[fallthrough]];
> case C_STAT:
> case C_THUMBLABEL:
> case C_THUMBSTAT:
> @@ -952,7 +952,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
> that look like this. Ignore them. */
> break;
> /* For static symbols that don't start with '.'... */
> - /* Fall through. */
> + [[fallthrough]];
> case C_THUMBEXT:
> case C_THUMBEXTFUNC:
> case C_EXT:
> diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c
> index 20a7bb4e0d4..46318dba1b2 100644
> --- a/gdb/compile/compile-c-support.c
> +++ b/gdb/compile/compile-c-support.c
> @@ -268,7 +268,7 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
> }
> }
>
> - /* Fall through. */
> + [[fallthrough]];
>
> default:
> gdb_printf (stream,
> diff --git a/gdb/compile/compile-c-symbols.c b/gdb/compile/compile-c-symbols.c
> index 5982178170c..a80b9a43156 100644
> --- a/gdb/compile/compile-c-symbols.c
> +++ b/gdb/compile/compile-c-symbols.c
> @@ -136,7 +136,7 @@ convert_one_symbol (compile_c_instance *context,
> "be referenced from the current thread in "
> "compiled code."),
> sym.symbol->print_name ());
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case LOC_UNRESOLVED:
> /* 'symbol_name' cannot be used here as that one is used only for
> local variables from compile_dwarf_expr_to_c.
> diff --git a/gdb/compile/compile-cplus-symbols.c b/gdb/compile/compile-cplus-symbols.c
> index 1edbf8f64b5..5cffe5cfebb 100644
> --- a/gdb/compile/compile-cplus-symbols.c
> +++ b/gdb/compile/compile-cplus-symbols.c
> @@ -132,7 +132,7 @@ convert_one_symbol (compile_cplus_instance *instance,
> "be referenced from the current thread in "
> "compiled code."),
> sym.symbol->print_name ());
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case LOC_UNRESOLVED:
> /* 'symbol_name' cannot be used here as that one is used only for
> local variables from compile_dwarf_expr_to_c.
> diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y
> index 061882363be..4f407f504ef 100644
> --- a/gdb/cp-name-parser.y
> +++ b/gdb/cp-name-parser.y
> @@ -1605,7 +1605,7 @@ yylex (YYSTYPE *lvalp, cpname_state *state)
> sizeof "(anonymous namespace)" - 1);
> return NAME;
> }
> - /* FALL THROUGH */
> + [[fallthrough]];
>
> case ')':
> case ',':
> @@ -1642,7 +1642,7 @@ yylex (YYSTYPE *lvalp, cpname_state *state)
> state->lexptr++;
> return '-';
> }
> - /* FALL THRU. */
> + [[fallthrough]];
>
> try_number:
> case '0':
> diff --git a/gdb/cp-support.c b/gdb/cp-support.c
> index 882acfb62a2..085d7c976e2 100644
> --- a/gdb/cp-support.c
> +++ b/gdb/cp-support.c
> @@ -532,7 +532,7 @@ replace_typedefs (struct demangle_parse_info *info,
> {
> case DEMANGLE_COMPONENT_ARGLIST:
> check_cv_qualifiers (ret_comp);
> - /* Fall through */
> + [[fallthrough]];
>
> case DEMANGLE_COMPONENT_FUNCTION_TYPE:
> case DEMANGLE_COMPONENT_TEMPLATE:
> diff --git a/gdb/ctfread.c b/gdb/ctfread.c
> index c74ec044c18..03a042ec38c 100644
> --- a/gdb/ctfread.c
> +++ b/gdb/ctfread.c
> @@ -1473,7 +1473,7 @@ ctf_psymtab_type_cb (ctf_id_t tid, void *arg)
> {
> case CTF_K_ENUM:
> ctf_psymtab_add_enums (ccp, tid);
> - /* FALL THROUGH */
> + [[fallthrough]];
> case CTF_K_STRUCT:
> case CTF_K_UNION:
> domain = STRUCT_DOMAIN;
> diff --git a/gdb/d-exp.y b/gdb/d-exp.y
> index 6c5569a1c8d..e2507982d50 100644
> --- a/gdb/d-exp.y
> +++ b/gdb/d-exp.y
> @@ -1103,7 +1103,7 @@ lex_one_token (struct parser_state *par_state)
> last_was_structop = 1;
> goto symbol; /* Nope, must be a symbol. */
> }
> - /* FALL THRU. */
> + [[fallthrough]];
>
> case '0':
> case '1':
> @@ -1180,7 +1180,7 @@ lex_one_token (struct parser_state *par_state)
> return ENTRY;
> }
> }
> - /* FALLTHRU */
> + [[fallthrough]];
> case '+':
> case '-':
> case '*':
> diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
> index 38fb2a07c1f..4c3ea227750 100644
> --- a/gdb/d-valprint.c
> +++ b/gdb/d-valprint.c
> @@ -85,7 +85,7 @@ d_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
> stream, recurse, val, options);
> if (ret == 0)
> break;
> - /* Fall through. */
> + [[fallthrough]];
> default:
> c_value_print_inner (val, stream, recurse, options);
> break;
> diff --git a/gdb/dbxread.c b/gdb/dbxread.c
> index b92193bdadd..99d9fba96ea 100644
> --- a/gdb/dbxread.c
> +++ b/gdb/dbxread.c
> @@ -2806,7 +2806,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
> case N_NBSTS:
> case N_NBLCS:
> unknown_symtype_complaint (hex_string (type));
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> define_a_symbol:
> /* These symbol types don't need the address field relocated,
> diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c
> index 0cf766a48b7..200d33aff4e 100644
> --- a/gdb/disasm-selftests.c
> +++ b/gdb/disasm-selftests.c
> @@ -126,7 +126,7 @@ get_test_insn (struct gdbarch *gdbarch, size_t *len)
> if (info->bits_per_address > sizeof (bfd_vma) * CHAR_BIT)
> return insn;
> }
> - /* fall through */
> + [[fallthrough]];
> default:
> generic_case:
> {
> diff --git a/gdb/dwarf2/macro.c b/gdb/dwarf2/macro.c
> index 2e88e670216..7d86d16d0e3 100644
> --- a/gdb/dwarf2/macro.c
> +++ b/gdb/dwarf2/macro.c
> @@ -784,7 +784,7 @@ dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
> /* We don't recognize any vendor extensions. */
> break;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> default:
> mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
> @@ -939,7 +939,7 @@ dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
> read_direct_string (abfd, mac_ptr, &bytes_read);
> mac_ptr += bytes_read;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> default:
> mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
> diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
> index a2c1428b0f4..665912aa845 100644
> --- a/gdb/dwarf2/read.c
> +++ b/gdb/dwarf2/read.c
> @@ -6667,7 +6667,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
> && die->parent != NULL
> && die->parent->tag == DW_TAG_subprogram)
> cu->processing_has_namespace_info = true;
> - /* Fall through. */
> + [[fallthrough]];
> case DW_TAG_inlined_subroutine:
> read_func_scope (die, cu);
> break;
> @@ -6709,7 +6709,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
> instead. */
> if (cu->lang () != language_ada)
> break;
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case DW_TAG_base_type:
> case DW_TAG_subrange_type:
> case DW_TAG_generic_subrange:
> @@ -6737,7 +6737,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
> break;
> /* The declaration is neither a global namespace nor a variable
> alias. */
> - /* Fall through. */
> + [[fallthrough]];
> case DW_TAG_imported_module:
> cu->processing_has_namespace_info = true;
> if (die->child != NULL && (die->tag == DW_TAG_imported_declaration
> @@ -16627,7 +16627,7 @@ cooked_indexer::index_dies (cutu_reader *reader,
> case DW_TAG_module:
> if (this_entry == nullptr)
> break;
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case DW_TAG_namespace:
> /* We don't check THIS_ENTRY for a namespace, to handle
> the ancient G++ workaround pointed out above. */
> @@ -17334,7 +17334,7 @@ read_attribute_value (const struct die_reader_specs *reader,
> info_ptr += bytes_read;
> break;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case DW_FORM_line_strp:
> if (!cu->per_cu->is_dwz)
> {
> @@ -17344,7 +17344,7 @@ read_attribute_value (const struct die_reader_specs *reader,
> info_ptr += bytes_read;
> break;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case DW_FORM_GNU_strp_alt:
> {
> dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd, true);
> @@ -19157,7 +19157,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
> break;
> case DW_TAG_template_value_param:
> suppress_add = 1;
> - /* Fall through. */
> + [[fallthrough]];
> case DW_TAG_constant:
> case DW_TAG_variable:
> case DW_TAG_member:
> @@ -19334,7 +19334,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
> break;
> case DW_TAG_template_type_param:
> suppress_add = 1;
> - /* Fall through. */
> + [[fallthrough]];
> case DW_TAG_class_type:
> case DW_TAG_interface_type:
> case DW_TAG_structure_type:
> @@ -19389,7 +19389,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
> case DW_TAG_unspecified_type:
> if (cu->lang () == language_ada)
> break;
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case DW_TAG_typedef:
> case DW_TAG_array_type:
> case DW_TAG_base_type:
> @@ -20186,7 +20186,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
> return parent_type->name ();
> return "";
> }
> - /* Fall through. */
> + [[fallthrough]];
> default:
> return determine_prefix (parent, cu);
> }
> @@ -20370,7 +20370,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
> case DW_TAG_template_value_param:
> if (attr_name == nullptr)
> return unnamed_template_tag_name (die, cu);
> - /* FALLTHROUGH. */
> + [[fallthrough]];
> case DW_TAG_class_type:
> case DW_TAG_interface_type:
> case DW_TAG_structure_type:
> diff --git a/gdb/eval.c b/gdb/eval.c
> index 3358b0d8d32..8192aeba364 100644
> --- a/gdb/eval.c
> +++ b/gdb/eval.c
> @@ -172,7 +172,7 @@ fetch_subexp_value (struct expression *exp,
> case MEMORY_ERROR:
> if (!preserve_errors)
> break;
> - /* Fall through. */
> + [[fallthrough]];
> default:
> throw;
> break;
> diff --git a/gdb/f-exp.y b/gdb/f-exp.y
> index 18566afd67f..e4e2171d641 100644
> --- a/gdb/f-exp.y
> +++ b/gdb/f-exp.y
> @@ -1503,7 +1503,7 @@ yylex (void)
> /* Might be a floating point number. */
> if (pstate->lexptr[1] < '0' || pstate->lexptr[1] > '9')
> goto symbol; /* Nope, must be a symbol. */
> - /* FALL THRU. */
> + [[fallthrough]];
>
> case '0':
> case '1':
> @@ -1571,7 +1571,7 @@ yylex (void)
>
> case '%':
> last_was_structop = true;
> - /* Fall through. */
> + [[fallthrough]];
> case '+':
> case '-':
> case '*':
> diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
> index 211b83f555a..b56e194b7d5 100644
> --- a/gdb/fbsd-nat.c
> +++ b/gdb/fbsd-nat.c
> @@ -1641,7 +1641,7 @@ fbsd_nat_target::stop_process (inferior *inf)
> if (status.sig () == GDB_SIGNAL_STOP)
> break;
>
> - /* FALLTHROUGH */
> + [[fallthrough]];
> default:
> /* Some other event has occurred. Save the current
> event. */
> diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
> index 284793c055d..e310648d410 100644
> --- a/gdb/gdbtypes.c
> +++ b/gdb/gdbtypes.c
> @@ -1102,7 +1102,7 @@ get_discrete_low_bound (struct type *type)
> if (!type->is_unsigned ())
> return -(1 << (type->length () * TARGET_CHAR_BIT - 1));
>
> - /* fall through */
> + [[fallthrough]];
> case TYPE_CODE_CHAR:
> return 0;
>
> @@ -1172,7 +1172,7 @@ get_discrete_high_bound (struct type *type)
> return -low - 1;
> }
>
> - /* fall through */
> + [[fallthrough]];
> case TYPE_CODE_CHAR:
> {
> /* This round-about calculation is to avoid shifting by
> @@ -4437,7 +4437,7 @@ rank_one_type_parm_ptr (struct type *parm, struct type *arg, struct value *value
> return NS_INTEGER_POINTER_CONVERSION_BADNESS;
> }
> }
> - /* fall through */
> + [[fallthrough]];
> case TYPE_CODE_ENUM:
> case TYPE_CODE_FLAGS:
> case TYPE_CODE_CHAR:
> @@ -4609,7 +4609,7 @@ rank_one_type_parm_char (struct type *parm, struct type *arg, struct value *valu
> return INTEGER_CONVERSION_BADNESS;
> else if (arg->length () < parm->length ())
> return INTEGER_PROMOTION_BADNESS;
> - /* fall through */
> + [[fallthrough]];
> case TYPE_CODE_CHAR:
> /* Deal with signed, unsigned, and plain chars for C++ and
> with int cases falling through from previous case. */
> @@ -4742,7 +4742,7 @@ rank_one_type_parm_struct (struct type *parm, struct type *arg, struct value *va
> rank.subrank = distance_to_ancestor (parm, arg, 0);
> if (rank.subrank >= 0)
> return sum_ranks (BASE_CONVERSION_BADNESS, rank);
> - /* fall through */
> + [[fallthrough]];
> default:
> return INCOMPATIBLE_TYPE_BADNESS;
> }
> diff --git a/gdb/go-exp.y b/gdb/go-exp.y
> index 28bf3f0ab33..c9b9c0b1ab7 100644
> --- a/gdb/go-exp.y
> +++ b/gdb/go-exp.y
> @@ -1054,7 +1054,7 @@ lex_one_token (struct parser_state *par_state)
> last_was_structop = 1;
> goto symbol; /* Nope, must be a symbol. */
> }
> - /* FALL THRU. */
> + [[fallthrough]];
>
> case '0':
> case '1':
> @@ -1129,7 +1129,7 @@ lex_one_token (struct parser_state *par_state)
> return ENTRY;
> }
> }
> - /* FALLTHRU */
> + [[fallthrough]];
> case '+':
> case '-':
> case '*':
> diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c
> index 05788af15a6..ca1e6b5ba6f 100644
> --- a/gdb/go-valprint.c
> +++ b/gdb/go-valprint.c
> @@ -114,7 +114,7 @@ go_language::value_print_inner (struct value *val, struct ui_file *stream,
> break;
> }
> }
> - /* Fall through. */
> + [[fallthrough]];
>
> default:
> c_value_print_inner (val, stream, recurse, options);
> diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
> index 560f16aa0e3..12b98d6f20d 100644
> --- a/gdb/i386-tdep.c
> +++ b/gdb/i386-tdep.c
> @@ -6011,7 +6011,7 @@ Do you want to stop the program?"),
> ir.addr -= 1;
> goto no_support;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case 0x0fb2: /* lss Gv */
> case 0x0fb4: /* lfs Gv */
> case 0x0fb5: /* lgs Gv */
> @@ -6248,7 +6248,7 @@ Do you want to stop the program?"),
> I386_SAVE_FPU_REGS))
> return -1;
> }
> - /* Fall through */
> + [[fallthrough]];
> default:
> if (record_full_arch_list_add_mem (addr64, 2))
> return -1;
> @@ -6787,7 +6787,7 @@ Do you want to stop the program?"),
> ir.addr -= 1;
> goto no_support;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case 0xf5: /* cmc */
> case 0xf8: /* clc */
> case 0xf9: /* stc */
> @@ -7229,7 +7229,7 @@ Do you want to stop the program?"),
> else if (ir.rm == 1)
> break;
> }
> - /* Fall through. */
> + [[fallthrough]];
> case 3: /* lidt */
> if (ir.mod == 3)
> {
> diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
> index 72f978205ab..179c3fccc30 100644
> --- a/gdb/m2-typeprint.c
> +++ b/gdb/m2-typeprint.c
> @@ -389,7 +389,7 @@ m2_get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
> return 0;
> }
> }
> - /* fall through */
> + [[fallthrough]];
> default:
> return get_discrete_bounds (type, lowp, highp);
> }
> diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c
> index 96a566fb810..c4570da2e18 100644
> --- a/gdb/m2-valprint.c
> +++ b/gdb/m2-valprint.c
> @@ -373,7 +373,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
> gdb_printf (stream, "{...}");
> break;
> }
> - /* Fall through. */
> + [[fallthrough]];
> case TYPE_CODE_STRUCT:
> if (m2_is_long_set (type))
> m2_print_long_set (type, valaddr, 0, address, stream);
> @@ -451,7 +451,7 @@ m2_language::value_print_inner (struct value *val, struct ui_file *stream,
> value_print_inner (v, stream, recurse, options);
> break;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> case TYPE_CODE_REF:
> case TYPE_CODE_ENUM:
> diff --git a/gdb/machoread.c b/gdb/machoread.c
> index 38c252c2861..87d30ec8587 100644
> --- a/gdb/machoread.c
> +++ b/gdb/machoread.c
> @@ -292,7 +292,7 @@ macho_symtab_read (minimal_symbol_reader &reader,
> case N_FUN:
> if (sym->name == NULL || sym->name[0] == 0)
> break;
> - /* Fall through. */
> + [[fallthrough]];
> case N_STSYM:
> /* Interesting symbol. */
> nbr_syms++;
> diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
> index fc731605991..a28005031e6 100644
> --- a/gdb/mdebugread.c
> +++ b/gdb/mdebugread.c
> @@ -2582,7 +2582,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
> those too. */
> if (name[0] == '.')
> continue;
> - /* Fall through. */
> + [[fallthrough]];
> default:
> ms_type = mst_unknown;
> unknown_ext_complaint (name);
> @@ -3430,7 +3430,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
> mst_file_text,
> SECT_OFF_TEXT (objfile));
>
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> case stProc:
> /* Ignore all parameter symbol records. */
> @@ -3666,7 +3666,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
> default:
> unknown_ext_complaint (debug_info->ssext + psh->iss);
> /* Pretend it's global. */
> - /* Fall through. */
> + [[fallthrough]];
> case stGlobal:
> /* Global common symbols are resolved by the runtime loader,
> ignore them. */
> diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c
> index 6982338751a..401e7c40726 100644
> --- a/gdb/mi/mi-cmd-stack.c
> +++ b/gdb/mi/mi-cmd-stack.c
> @@ -652,7 +652,7 @@ list_args_or_locals (const frame_print_options &fp_opts,
> case PRINT_SIMPLE_VALUES:
> if (!mi_simple_type_p (sym2->type ()))
> break;
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> case PRINT_ALL_VALUES:
> if (sym->is_argument ())
> diff --git a/gdb/minsyms.c b/gdb/minsyms.c
> index 72e500be959..71e22ce1a90 100644
> --- a/gdb/minsyms.c
> +++ b/gdb/minsyms.c
> @@ -140,7 +140,7 @@ msymbol_is_function (struct objfile *objfile, minimal_symbol *minsym,
> /* Ignore function symbol that is not a function entry. */
> if (msymbol_is_cold_clone (minsym))
> return false;
> - /* fallthru */
> + [[fallthrough]];
> default:
> if (func_address_p != NULL)
> *func_address_p = msym_addr;
> diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
> index d40d28e85de..17bc9db6b89 100644
> --- a/gdb/mips-tdep.c
> +++ b/gdb/mips-tdep.c
> @@ -3992,7 +3992,7 @@ mips_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc)
> && (itype_rt (insn) & 0x2) == 0);
> if (is_branch) /* BC1ANY2F, BC1ANY2T, BC1ANY4F, BC1ANY4T */
> break;
> - /* Fall through. */
> + [[fallthrough]];
> case 18: /* COP2 */
> case 19: /* COP3 */
> is_branch = (itype_rs (insn) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
> @@ -4100,7 +4100,7 @@ micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch,
> || (insn & 0x3) != 0x1))
> /* BC1ANY*: bits 010000 111xx xxx01 */
> break;
> - /* Fall through. */
> + [[fallthrough]];
>
> case 0x25: /* BEQ: bits 100101 */
> case 0x2d: /* BNE: bits 101101 */
> @@ -4122,7 +4122,7 @@ micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch,
> /* JALR, JALR.HB: 000000 000x111100 111100 */
> /* JALRS, JALRS.HB: 000000 010x111100 111100 */
> break;
> - /* Fall through. */
> + [[fallthrough]];
>
> case 0x1d: /* JALS: bits 011101 */
> case 0x35: /* J: bits 110101 */
> diff --git a/gdb/msp430-tdep.c b/gdb/msp430-tdep.c
> index 97d9073efbb..f65948f01d8 100644
> --- a/gdb/msp430-tdep.c
> +++ b/gdb/msp430-tdep.c
> @@ -886,7 +886,7 @@ msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
> break;
> }
> }
> - /* Fall through. */
> + [[fallthrough]];
> default:
> error (_("Unknown msp430 isa"));
> break;
> diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c
> index aa02f193399..3215c4a7410 100644
> --- a/gdb/nat/linux-btrace.c
> +++ b/gdb/nat/linux-btrace.c
> @@ -896,8 +896,7 @@ linux_read_pt (btrace_data_pt *btrace, linux_btrace_target_info *tinfo,
> case BTRACE_READ_NEW:
> if (!perf_event_new_data (&tinfo->pev))
> return BTRACE_ERR_NONE;
> -
> - /* Fall through. */
> + [[fallthrough]];
> case BTRACE_READ_ALL:
> perf_event_read_all (&tinfo->pev, &btrace->data, &btrace->size);
> return BTRACE_ERR_NONE;
> diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
> index bf4c4387886..3066ff96a19 100644
> --- a/gdb/nat/windows-nat.c
> +++ b/gdb/nat/windows-nat.c
> @@ -456,7 +456,7 @@ windows_process_info::handle_exception (struct target_waitstatus *ourstatus,
> break;
> }
> #endif
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case STATUS_WX86_BREAKPOINT:
> DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT");
> ourstatus->set_stopped (GDB_SIGNAL_TRAP);
> @@ -495,7 +495,7 @@ windows_process_info::handle_exception (struct target_waitstatus *ourstatus,
> break;
> }
> /* treat improperly formed exception as unknown */
> - /* FALLTHROUGH */
> + [[fallthrough]];
> default:
> /* Treat unhandled first chance exceptions specially. */
> if (current_event.u.Exception.dwFirstChance)
> diff --git a/gdb/nat/x86-dregs.c b/gdb/nat/x86-dregs.c
> index 731093dfa73..16669f69657 100644
> --- a/gdb/nat/x86-dregs.c
> +++ b/gdb/nat/x86-dregs.c
> @@ -289,7 +289,7 @@ Invalid hardware breakpoint type %d in x86_length_and_rw_bits.\n"),
> case 8:
> if (TARGET_HAS_DR_LEN_8)
> return (DR_LEN_8 | rw);
> - /* FALL THROUGH */
> + [[fallthrough]];
> default:
> internal_error (_("\
> Invalid hardware breakpoint length %d in x86_length_and_rw_bits.\n"), len);
> diff --git a/gdb/p-exp.y b/gdb/p-exp.y
> index 2360a500476..b0f334897ad 100644
> --- a/gdb/p-exp.y
> +++ b/gdb/p-exp.y
> @@ -1159,7 +1159,7 @@ yylex (void)
> goto symbol; /* Nope, must be a symbol. */
> }
>
> - /* FALL THRU. */
> + [[fallthrough]];
>
> case '0':
> case '1':
> diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
> index fb9386293a6..678df5eee0d 100644
> --- a/gdb/p-valprint.c
> +++ b/gdb/p-valprint.c
> @@ -298,7 +298,7 @@ pascal_language::value_print_inner (struct value *val,
> gdb_printf (stream, "{...}");
> break;
> }
> - /* Fall through. */
> + [[fallthrough]];
> case TYPE_CODE_STRUCT:
> if (options->vtblprint && pascal_object_is_vtbl_ptr_type (type))
> {
> diff --git a/gdb/printcmd.c b/gdb/printcmd.c
> index 5afbc565cf7..f0be4268e60 100644
> --- a/gdb/printcmd.c
> +++ b/gdb/printcmd.c
> @@ -482,7 +482,7 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
> byte_order);
> break;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case 'f':
> print_floating (valaddr, type, stream);
> break;
> diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
> index 7a7d7617bc9..5aa8c096c6e 100644
> --- a/gdb/record-btrace.c
> +++ b/gdb/record-btrace.c
> @@ -231,7 +231,7 @@ record_btrace_get_cpu (void)
>
> case CS_NONE:
> record_btrace_cpu.vendor = CV_UNKNOWN;
> - /* Fall through. */
> + [[fallthrough]];
> case CS_CPU:
> return &record_btrace_cpu;
> }
> diff --git a/gdb/remote.c b/gdb/remote.c
> index b405cb6abf7..3e90964f027 100644
> --- a/gdb/remote.c
> +++ b/gdb/remote.c
> @@ -7985,7 +7985,7 @@ Packet: '%s'\n"),
> if (event->ws.kind () != TARGET_WAITKIND_IGNORE)
> break;
>
> - /* fall through */
> + [[fallthrough]];
> case 'S': /* Old style status, just signal only. */
> {
> int sig;
> @@ -8502,7 +8502,7 @@ remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
> putpkt (buf);
> break;
> }
> - /* fallthrough */
> + [[fallthrough]];
> default:
> warning (_("Invalid remote reply: %s"), buf);
> break;
> @@ -9844,7 +9844,7 @@ remote_target::putpkt_binary (const char *buf, int cnt)
> return 1;
> case '-':
> remote_debug_printf_nofunc ("Received Nak");
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case SERIAL_TIMEOUT:
> tcount++;
> if (tcount > 3)
> diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
> index 3725be44276..8849483d4d4 100644
> --- a/gdb/riscv-tdep.c
> +++ b/gdb/riscv-tdep.c
> @@ -3183,7 +3183,7 @@ riscv_arg_location (struct gdbarch *gdbarch,
> riscv_call_arg_struct (ainfo, cinfo);
> break;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> default:
> riscv_call_arg_scalar_int (ainfo, cinfo);
> diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
> index bae6737852d..355268dca42 100644
> --- a/gdb/rs6000-tdep.c
> +++ b/gdb/rs6000-tdep.c
> @@ -4247,7 +4247,7 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 39: /* Vector Multiply-Sum Unsigned Halfword Saturate */
> case 41: /* Vector Multiply-Sum Signed Halfword Saturate */
> record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 20: /* Move To VSR Byte Mask Immediate opcode, b2 = 0,
> ignore bit 31 */
> case 21: /* Move To VSR Byte Mask Immediate opcode, b2 = 1,
> @@ -4313,7 +4313,7 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
> && vra != 7 /* Decimal Convert From National */
> && vra != 31) /* Decimal Set Sign */
> break;
> - /* Fall through. */
> + [[fallthrough]];
> /* 5.16 Decimal Integer Arithmetic Instructions */
> case 1: /* Decimal Add Modulo */
> case 65: /* Decimal Subtract Modulo */
> @@ -4502,7 +4502,7 @@ ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 970: /* Vector Convert To Signed Fixed-Point Word Saturate */
> case 906: /* Vector Convert To Unsigned Fixed-Point Word Saturate */
> record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 12: /* Vector Merge High Byte */
> case 14: /* Vector Pack Unsigned Halfword Unsigned Modulo */
> case 76: /* Vector Merge High Halfword */
> @@ -4835,7 +4835,7 @@ ppc_process_record_op19 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 560: /* Branch Conditional to Branch Target Address Register */
> if ((PPC_BO (insn) & 0x4) == 0)
> record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 528: /* Branch Conditional to Count Register */
> if (PPC_LK (insn))
> record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
> @@ -4926,7 +4926,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 491: /* Divide Word */
> if (PPC_OE (insn))
> record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 9: /* Multiply High Doubleword Unsigned */
> case 11: /* Multiply High Word Unsigned */
> case 73: /* Multiply High Doubleword */
> @@ -5018,7 +5018,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
> record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
> record_full_arch_list_add_reg (regcache,
> tdep->ppc_gp0_regnum + PPC_RA (insn));
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 0: /* Compare */
> case 32: /* Compare logical */
> case 144: /* Move To Condition Register Fields */
> @@ -5041,7 +5041,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 373: /* Load Word Algebraic with Update Indexed */
> record_full_arch_list_add_reg (regcache,
> tdep->ppc_gp0_regnum + PPC_RA (insn));
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 21: /* Load Doubleword Indexed */
> case 52: /* Load Byte And Reserve Indexed */
> case 116: /* Load Halfword And Reserve Indexed */
> @@ -5114,7 +5114,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 631: /* Load Floating-Point Double with Update Indexed */
> record_full_arch_list_add_reg (regcache,
> tdep->ppc_gp0_regnum + PPC_RA (insn));
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 535: /* Load Floating-Point Single Indexed */
> case 599: /* Load Floating-Point Double Indexed */
> case 855: /* Load Floating-Point as Integer Word Algebraic Indexed */
> @@ -5210,7 +5210,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 759: /* Store Floating-Point Double with Update Indexed */
> record_full_arch_list_add_reg (regcache,
> tdep->ppc_gp0_regnum + PPC_RA (insn));
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 135: /* Store Vector Element Byte Indexed */
> case 167: /* Store Vector Element Halfword Indexed */
> case 199: /* Store Vector Element Word Indexed */
> @@ -5504,7 +5504,7 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 878: /* Transaction Abort Doubleword Conditional Immediate */
> case 910: /* Transaction Abort */
> record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 718: /* Transaction Check */
> record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
> return 0;
> @@ -5728,7 +5728,7 @@ ppc_process_record_op60_XX2 (struct gdbarch *gdbarch,
> case 24: /* VSX Vector Convert Half-Precision format to
> Single-Precision format */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* Fall-through */
> + [[fallthrough]];
> case 0: /* VSX Vector Extract Exponent Double-Precision */
> case 1: /* VSX Vector Extract Significand Double-Precision */
> case 7: /* VSX Vector Byte-Reverse Halfword */
> @@ -5822,7 +5822,7 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 19: /* VSX Scalar Compare Greater Than or Equal
> Double-Precision */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 240: /* VSX Vector Copy Sign Double-Precision */
> case 208: /* VSX Vector Copy Sign Single-Precision */
> case 130: /* VSX Logical AND */
> @@ -6009,7 +6009,7 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 203: /* VSX Vector Square Root Double-Precision */
> case 139: /* VSX Vector Square Root Single-Precision */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 345: /* VSX Scalar Absolute Value Double-Precision */
> case 267: /* VSX Scalar Convert Scalar Single-Precision to
> Vector Single-Precision format Non-signalling */
> @@ -6032,7 +6032,7 @@ ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 298: /* VSX Scalar Test Data Class Single-Precision */
> case 362: /* VSX Scalar Test Data Class Double-Precision */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 106: /* VSX Scalar Test for software Square Root
> Double-Precision */
> case 234: /* VSX Vector Test for software Square Root
> @@ -6304,7 +6304,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 22: /* Move From FPSCR Control & set RN */
> case 23: /* Move From FPSCR Control & set RN Immediate */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* Fall through. */
> + [[fallthrough]];
> case 0: /* Move From FPSCR */
> case 24: /* Move From FPSCR Lightweight */
> if (PPC_FIELD (insn, 11, 5) == 0 && PPC_RC (insn))
> @@ -6350,7 +6350,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 644: /* VSX Scalar Compare Unordered Quad-Precision */
> case 708: /* VSX Scalar Test Data Class Quad-Precision */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 128: /* Floating Test for software Divide */
> case 160: /* Floating Test for software Square Root */
> record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
> @@ -6387,7 +6387,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
> }
>
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 68: /* VSX Scalar Compare Equal Quad-Precision */
> case 196: /* VSX Scalar Compare Greater Than or Equal
> Quad-Precision */
> @@ -6395,7 +6395,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
> case 676: /* VSX Scalar Maximum Type-C Quad-Precision */
> case 740: /* VSX Scalar Minimum Type-C Quad-Precision */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 100: /* VSX Scalar Copy Sign Quad-Precision */
> case 868: /* VSX Scalar Insert Exponent Quad-Precision */
> ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
> @@ -6406,7 +6406,7 @@ ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
> {
> case 27: /* VSX Scalar Square Root Quad-Precision */
> record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 0: /* VSX Scalar Absolute Quad-Precision */
> case 2: /* VSX Scalar Extract Exponent Quad-Precision */
> case 8: /* VSX Scalar Negative Absolute Quad-Precision */
> @@ -7171,10 +7171,10 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
>
> case 13: /* Add Immediate Carrying and Record */
> record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 12: /* Add Immediate Carrying */
> record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 14: /* Add Immediate */
> case 15: /* Add Immediate Shifted */
> record_full_arch_list_add_reg (regcache,
> @@ -7184,7 +7184,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> case 16: /* Branch Conditional */
> if ((PPC_BO (insn) & 0x4) == 0)
> record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 18: /* Branch */
> if (PPC_LK (insn))
> record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
> @@ -7213,7 +7213,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> case 28: /* AND Immediate */
> case 29: /* AND Immediate Shifted */
> record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 24: /* OR Immediate */
> case 25: /* OR Immediate Shifted */
> case 26: /* XOR Immediate */
> @@ -7233,7 +7233,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> case 43: /* Load Halfword Algebraic with Update */
> record_full_arch_list_add_reg (regcache,
> tdep->ppc_gp0_regnum + PPC_RA (insn));
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 32: /* Load Word and Zero */
> case 34: /* Load Byte and Zero */
> case 40: /* Load Halfword and Zero */
> @@ -7257,7 +7257,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> case 51: /* Load Floating-Point Double with Update */
> record_full_arch_list_add_reg (regcache,
> tdep->ppc_gp0_regnum + PPC_RA (insn));
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 48: /* Load Floating-Point Single */
> case 50: /* Load Floating-Point Double */
> record_full_arch_list_add_reg (regcache,
> @@ -7285,7 +7285,7 @@ ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> case 55: /* Store Floating-Point Double with Update */
> record_full_arch_list_add_reg (regcache,
> tdep->ppc_gp0_regnum + PPC_RA (insn));
> - /* FALL-THROUGH */
> + [[fallthrough]];
> case 36: /* Store Word */
> case 38: /* Store Byte */
> case 44: /* Store Halfword */
> diff --git a/gdb/rust-parse.c b/gdb/rust-parse.c
> index d2f6008026f..aaf4cef0d7e 100644
> --- a/gdb/rust-parse.c
> +++ b/gdb/rust-parse.c
> @@ -1386,7 +1386,7 @@ rust_parser::parse_binop (bool required)
>
> case COMPOUND_ASSIGN:
> compound_assign_op = current_opcode;
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case '=':
> precedence = ASSIGN_PREC;
> lex ();
> @@ -1831,7 +1831,7 @@ rust_parser::parse_path (bool for_expr)
> if (current_token != COLONCOLON)
> return "self";
> lex ();
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case KW_SUPER:
> while (current_token == KW_SUPER)
> {
> diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
> index 54b5c89e5e3..5b58cb382e3 100644
> --- a/gdb/s390-tdep.c
> +++ b/gdb/s390-tdep.c
> @@ -4376,7 +4376,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> break;
> }
> /* For other instructions... */
> - /* Fall through. */
> + [[fallthrough]];
> default:
> gdb_printf (gdb_stdlog, "Warning: Unknown KM* function %02x at %s.\n",
> (int)tmp, paddress (gdbarch, addr));
> @@ -4685,7 +4685,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> break;
> }
> /* For KLMD... */
> - /* Fall through. */
> + [[fallthrough]];
> default:
> gdb_printf (gdb_stdlog, "Warning: Unknown KMAC function %02x at %s.\n",
> (int)tmp, paddress (gdbarch, addr));
> @@ -6542,7 +6542,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> /* op3c */
> if (record_full_arch_list_add_reg (regcache, S390_R0_REGNUM + inib[3]))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x0c: /* CSST */
> /* op4 */
> if (record_full_arch_list_add_mem (oaddr2, 4))
> @@ -6557,7 +6557,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 4))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x10: /* CSDST */
> /* op6 */
> if (target_read_memory (oaddr2 + 0x68, buf, 8))
> @@ -6573,7 +6573,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 4))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x04: /* CS */
> CS:
> /* op1c */
> @@ -6598,7 +6598,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 8))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x11: /* CSDSTG */
> /* op6 */
> if (target_read_memory (oaddr2 + 0x68, buf, 8))
> @@ -6607,7 +6607,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 8))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x0d: /* CSSTG */
> CSSTG:
> /* op4 */
> @@ -6617,7 +6617,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 8))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x05: /* CSG */
> /* op1c */
> if (record_full_arch_list_add_mem (oaddr2 + 0x08, 8))
> @@ -6631,7 +6631,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> /* op3c */
> if (s390_record_gpr_g (gdbarch, regcache, inib[3]))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x0e: /* CSSTGR */
> /* op4 */
> if (record_full_arch_list_add_mem (oaddr2, 8))
> @@ -6646,7 +6646,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 8))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x12: /* CSDSTGR */
> /* op6 */
> if (target_read_memory (oaddr2 + 0x68, buf, 8))
> @@ -6662,7 +6662,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 8))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x06: /* CSGR */
> CSGR:
> /* op1c */
> @@ -6687,7 +6687,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 16))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x13: /* CSDSTX */
> /* op6 */
> if (target_read_memory (oaddr2 + 0x68, buf, 8))
> @@ -6696,7 +6696,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 16))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x0f: /* CSSTX */
> CSSTX:
> /* op4 */
> @@ -6706,7 +6706,7 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
> oaddr3 = s390_record_address_mask (gdbarch, regcache, oaddr3);
> if (record_full_arch_list_add_mem (oaddr3, 16))
> return -1;
> - /* fallthru */
> + [[fallthrough]];
> case 0x07: /* CSX */
> /* op1c */
> if (record_full_arch_list_add_mem (oaddr2 + 0x00, 16))
> diff --git a/gdb/stabsread.c b/gdb/stabsread.c
> index 4011475f7ac..088058030a3 100644
> --- a/gdb/stabsread.c
> +++ b/gdb/stabsread.c
> @@ -1100,7 +1100,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
> }
> break;
> }
> - /* Fall through. */
> + [[fallthrough]];
>
> case 'P':
> /* acc seems to use P to declare the prototypes of functions that
> @@ -1111,7 +1111,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
> sym->set_type (read_type (&p, objfile));
> goto process_prototype_types;
> }
> - /*FALLTHROUGH */
> + [[fallthrough]];
>
> case 'R':
> /* Parameter which is in a register. */
> @@ -2499,7 +2499,7 @@ read_member_functions (struct stab_field_info *fip, const char **pp,
> complaint (_("member function type missing, got '%c'"),
> (*pp)[-1]);
> /* Normal member function. */
> - /* Fall through. */
> + [[fallthrough]];
>
> case '.':
> /* normal member function. */
> diff --git a/gdb/symfile.c b/gdb/symfile.c
> index a6236804b08..059922b93ef 100644
> --- a/gdb/symfile.c
> +++ b/gdb/symfile.c
> @@ -3044,7 +3044,7 @@ section_is_mapped (struct obj_section *osect)
> if (osect->ovly_mapped == -1)
> gdbarch_overlay_update (gdbarch, osect);
> }
> - /* fall thru */
> + [[fallthrough]];
> case ovly_on: /* overlay debugging manual */
> return osect->ovly_mapped == 1;
> }
> diff --git a/gdb/utils.c b/gdb/utils.c
> index 94a7cafa65b..5adbcfeb544 100644
> --- a/gdb/utils.c
> +++ b/gdb/utils.c
> @@ -218,7 +218,7 @@ can_dump_core (enum resource_limit_kind limit_kind)
> case LIMIT_CUR:
> if (rlim.rlim_cur == 0)
> return 0;
> - /* Fall through. */
> + [[fallthrough]];
>
> case LIMIT_MAX:
> if (rlim.rlim_max == 0)
> diff --git a/gdb/valops.c b/gdb/valops.c
> index a8760ccf3e4..6521580a1e8 100644
> --- a/gdb/valops.c
> +++ b/gdb/valops.c
> @@ -1280,7 +1280,7 @@ value_assign (struct value *toval, struct value *fromval)
> break;
> }
> }
> - /* Fall through. */
> + [[fallthrough]];
>
> default:
> error (_("Left operand of assignment is not an lvalue."));
> @@ -2820,7 +2820,7 @@ find_overload_match (gdb::array_view<value *> args,
> case where a xmethod is better than the source
> method, except when the xmethod match quality is
> non-standard. */
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case 1: /* Src method and ext method are incompatible. */
> /* If ext method match is not standard, then let source method
> win. Otherwise, fallthrough to let xmethod win. */
> @@ -2832,7 +2832,7 @@ find_overload_match (gdb::array_view<value *> args,
> method_match_quality = src_method_match_quality;
> break;
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case 2: /* Ext method is champion. */
> method_oload_champ = ext_method_oload_champ;
> method_badness = ext_method_badness;
> diff --git a/gdb/value.c b/gdb/value.c
> index 7067ae94df0..b4da9675039 100644
> --- a/gdb/value.c
> +++ b/gdb/value.c
> @@ -3336,7 +3336,7 @@ pack_long (gdb_byte *buf, struct type *type, LONGEST num)
> {
> case TYPE_CODE_RANGE:
> num -= type->bounds ()->bias;
> - /* Fall through. */
> + [[fallthrough]];
> case TYPE_CODE_INT:
> case TYPE_CODE_CHAR:
> case TYPE_CODE_ENUM:
> diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
> index e4d50d081c9..caefebcaf48 100644
> --- a/gdb/windows-nat.c
> +++ b/gdb/windows-nat.c
> @@ -2286,14 +2286,14 @@ redir_open (const char *redir_string, int *inp, int *out, int *err)
> {
> case '0':
> fname++;
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case '<':
> fd = inp;
> mode = O_RDONLY;
> break;
> case '1': case '2':
> fname++;
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case '>':
> fd = (rc == '2') ? err : out;
> mode = O_WRONLY | O_CREAT;
> diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
> index 829fc1f09c7..856fa134ed7 100644
> --- a/gdb/xcoffread.c
> +++ b/gdb/xcoffread.c
> @@ -1532,7 +1532,7 @@ process_xcoff_symbol (struct xcoff_symbol *cs, struct objfile *objfile)
> default:
> complaint (_("Unexpected storage class: %d"),
> cs->c_sclass);
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> case C_DECL:
> case C_PSYM:
> @@ -2359,7 +2359,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader,
> complaint (_("Storage class %d not recognized during scan"),
> sclass);
> }
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> case C_FCN:
> /* C_FCN is .bf and .ef symbols. I think it is sufficient
> diff --git a/gdb/z80-tdep.c b/gdb/z80-tdep.c
> index ae328550b06..f0cc7c0d917 100644
> --- a/gdb/z80-tdep.c
> +++ b/gdb/z80-tdep.c
> @@ -799,7 +799,7 @@ z80_software_single_step (struct regcache *regcache)
> break;
> case insn_jr_cc_d:
> opcode &= 030; /* JR NZ,d has cc equal to 040, but others 000 */
> - /* fall through */
> + [[fallthrough]];
> case insn_jp_cc_nn:
> case insn_call_cc_nn:
> case insn_ret_cc:
> diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc
> index 4defd79eee4..10d8d280b98 100644
> --- a/gdbserver/netbsd-low.cc
> +++ b/gdbserver/netbsd-low.cc
> @@ -410,7 +410,7 @@ netbsd_process_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
> case TARGET_WAITKIND_THREAD_CREATED:
> case TARGET_WAITKIND_THREAD_EXITED:
> /* The core needlessly stops on these events. */
> - /* FALLTHROUGH */
> + [[fallthrough]];
> case TARGET_WAITKIND_SPURIOUS:
> /* Spurious events are unhandled by the gdbserver core. */
> if (ptrace (PT_CONTINUE, current_process ()->pid, (void *) 1, 0)
> diff --git a/gdbsupport/btrace-common.cc b/gdbsupport/btrace-common.cc
> index 932a11888b0..c09fd504270 100644
> --- a/gdbsupport/btrace-common.cc
> +++ b/gdbsupport/btrace-common.cc
> @@ -134,8 +134,7 @@ btrace_data_append (struct btrace_data *dst,
> case BTRACE_FORMAT_NONE:
> dst->format = BTRACE_FORMAT_BTS;
> dst->variant.bts.blocks = new std::vector<btrace_block>;
> -
> - /* Fall-through. */
> + [[fallthrough]];
> case BTRACE_FORMAT_BTS:
> {
> unsigned int blk;
> @@ -163,8 +162,7 @@ btrace_data_append (struct btrace_data *dst,
> dst->format = BTRACE_FORMAT_PT;
> dst->variant.pt.data = NULL;
> dst->variant.pt.size = 0;
> -
> - /* fall-through. */
> + [[fallthrough]];
> case BTRACE_FORMAT_PT:
> {
> gdb_byte *data;
> diff --git a/gdbsupport/format.cc b/gdbsupport/format.cc
> index 6e5a3cb6603..85d1f9a8905 100644
> --- a/gdbsupport/format.cc
> +++ b/gdbsupport/format.cc
> @@ -257,14 +257,14 @@ format_pieces::format_pieces (const char **arg, bool gdb_extensions,
> case 'u':
> if (seen_hash)
> bad = 1;
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> case 'o':
> case 'x':
> case 'X':
> if (seen_space || seen_plus)
> bad = 1;
> - /* FALLTHROUGH */
> + [[fallthrough]];
>
> case 'd':
> case 'i':
OK for the arm and aarch64 parts.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 4/7] Use try_emplace in index-write.c
2023-10-16 23:02 ` [PATCH 4/7] Use try_emplace in index-write.c Tom Tromey
@ 2023-10-17 8:56 ` Pedro Alves
2023-10-17 9:30 ` Lancelot SIX
2023-10-19 20:24 ` Tom Tromey
0 siblings, 2 replies; 17+ messages in thread
From: Pedro Alves @ 2023-10-17 8:56 UTC (permalink / raw)
To: Tom Tromey, gdb-patches
On 2023-10-17 00:02, Tom Tromey wrote:
> index-write.c has a comment indicating that C++17's try_emplace could
> be used. This patch makes the change.
> ---
> gdb/dwarf2/index-write.c | 24 ++++++++----------------
> 1 file changed, 8 insertions(+), 16 deletions(-)
>
> diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
> index a6d770c9ee5..e402d407ee7 100644
> --- a/gdb/dwarf2/index-write.c
> +++ b/gdb/dwarf2/index-write.c
> @@ -384,24 +384,16 @@ write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool)
> continue;
> gdb_assert (entry.index_offset == 0);
>
> - /* Finding before inserting is faster than always trying to
> - insert, because inserting always allocates a node, does the
> - lookup, and then destroys the new node if another node
> - already had the same key. C++17 try_emplace will avoid
> - this. */
> - const auto found
> - = symbol_hash_table.find (entry.cu_indices);
> - if (found != symbol_hash_table.end ())
> + const auto &pair = symbol_hash_table.try_emplace (entry.cu_indices,
> + cpool.size ());
A little odd to take a const ref to the returned pair instead of taking
it by value. Better yet, C++17 gives us structured bindings, which lets us
hide the ugly pair completely and use helpful names instead of first/second:
auto [it, ins] = symbol_hash_table.try_emplace (entry.cu_indices,
cpool.size ());
How about we use it here?
Pedro Alves
> + entry.index_offset = pair.first->second;
> + if (pair.second)
> {
> - entry.index_offset = found->second;
> - continue;
> + /* Newly inserted. */
> + cpool.append_offset (entry.cu_indices.size ());
> + for (const auto index : entry.cu_indices)
> + cpool.append_offset (index);
> }
> -
> - symbol_hash_table.emplace (entry.cu_indices, cpool.size ());
> - entry.index_offset = cpool.size ();
> - cpool.append_offset (entry.cu_indices.size ());
> - for (const auto index : entry.cu_indices)
> - cpool.append_offset (index);
> }
> }
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 0/7] More C++17 Updates
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
` (6 preceding siblings ...)
2023-10-16 23:02 ` [PATCH 7/7] Use C++17 void_t Tom Tromey
@ 2023-10-17 9:06 ` Pedro Alves
2023-10-19 20:26 ` Tom Tromey
7 siblings, 1 reply; 17+ messages in thread
From: Pedro Alves @ 2023-10-17 9:06 UTC (permalink / raw)
To: Tom Tromey, gdb-patches
On 2023-10-17 00:02, Tom Tromey wrote:
> This series is based on Lancelot's C++17 series. I found some more
> spots in gdb that could easily take advantage of C++17.
>
> I'm sure there are some more spots to be found. For example, I
> suspect try_embed can be used in more places than the one that was
> commented as such.
I guess you mean try_emplace.
>
> I have another branch where I try to replace gdb::array_view with a
> C++20-compatible std::span. However, this one is a bit more invasive,
> so I thought I would leave it for a little later.
I wish that C++ had went the array_view route, but oh well.
> Note that gdb
> doesn't currently build cleanly in C++20 mode (mostly but IIRC not
> entirely due to the use of 'volatile' in the Guile headers).
>
> Regression tested on x86-64 Fedora 38.
>
> Let me know what you think.
Other than the comment on the try_emplace patch, this all LGTM:
Approved-By: Pedro Alves <pedro@palves.net>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 4/7] Use try_emplace in index-write.c
2023-10-17 8:56 ` Pedro Alves
@ 2023-10-17 9:30 ` Lancelot SIX
2023-10-19 20:24 ` Tom Tromey
1 sibling, 0 replies; 17+ messages in thread
From: Lancelot SIX @ 2023-10-17 9:30 UTC (permalink / raw)
To: Pedro Alves; +Cc: Tom Tromey, gdb-patches
> > - const auto found
> > - = symbol_hash_table.find (entry.cu_indices);
> > - if (found != symbol_hash_table.end ())
> > + const auto &pair = symbol_hash_table.try_emplace (entry.cu_indices,
> > + cpool.size ());
>
> A little odd to take a const ref to the returned pair instead of taking
> it by value. Better yet, C++17 gives us structured bindings, which lets us
> hide the ugly pair completely and use helpful names instead of first/second:
>
> auto [it, ins] = symbol_hash_table.try_emplace (entry.cu_indices,
> cpool.size ());
>
> How about we use it here?
>
> Pedro Alves
Hi,
I find such use of structured binding to be a big help in readability.
The pair is always clunky to use.
Best,
Lancelot.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/7] Use C++17 [[fallthrough]] attribute
2023-10-16 23:17 ` John Baldwin
@ 2023-10-19 20:23 ` Tom Tromey
0 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-19 20:23 UTC (permalink / raw)
To: John Baldwin; +Cc: Tom Tromey, gdb-patches
>>>>> "John" == John Baldwin <jhb@FreeBSD.org> writes:
John> On 10/16/23 4:02 PM, Tom Tromey wrote:
>> This changes gdb to use the C++17 [[fallthrough]] attribute rather
>> than special comments.
>> This was mostly done by script, but I neglected a few spellings and
>> so
>> also fixed it up by hand.
>> I suspect this fixes the bug mentioned below, by switching to a
>> standard approach that, presumably, clang supports.
>> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23159
John> The fbsd-nat.c change is explicitly ok with me.
I added your approved-by.
Tom
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/7] Use C++17 [[fallthrough]] attribute
2023-10-17 8:53 ` Luis Machado
@ 2023-10-19 20:23 ` Tom Tromey
0 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-19 20:23 UTC (permalink / raw)
To: Luis Machado; +Cc: Tom Tromey, gdb-patches
...
Luis> OK for the arm and aarch64 parts.
I added your approved-by.
Tom
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 4/7] Use try_emplace in index-write.c
2023-10-17 8:56 ` Pedro Alves
2023-10-17 9:30 ` Lancelot SIX
@ 2023-10-19 20:24 ` Tom Tromey
1 sibling, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-19 20:24 UTC (permalink / raw)
To: Pedro Alves; +Cc: Tom Tromey, gdb-patches
>>>>> "Pedro" == Pedro Alves <pedro@palves.net> writes:
Pedro> A little odd to take a const ref to the returned pair instead of taking
Pedro> it by value. Better yet, C++17 gives us structured bindings, which lets us
Pedro> hide the ugly pair completely and use helpful names instead of first/second:
Pedro> auto [it, ins] = symbol_hash_table.try_emplace (entry.cu_indices,
Pedro> cpool.size ());
Pedro> How about we use it here?
I made this change.
Tom
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 0/7] More C++17 Updates
2023-10-17 9:06 ` [PATCH 0/7] More C++17 Updates Pedro Alves
@ 2023-10-19 20:26 ` Tom Tromey
0 siblings, 0 replies; 17+ messages in thread
From: Tom Tromey @ 2023-10-19 20:26 UTC (permalink / raw)
To: Pedro Alves; +Cc: Tom Tromey, gdb-patches
>> Let me know what you think.
Pedro> Other than the comment on the try_emplace patch, this all LGTM:
Pedro> Approved-By: Pedro Alves <pedro@palves.net>
Thanks.
I added one more patch that I'll send in v2: I realized we can remove
gdb_static_assert now.
Tom
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2023-10-19 20:26 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-16 23:02 [PATCH 0/7] More C++17 Updates Tom Tromey
2023-10-16 23:02 ` [PATCH 1/7] Use C++17 [[fallthrough]] attribute Tom Tromey
2023-10-16 23:17 ` John Baldwin
2023-10-19 20:23 ` Tom Tromey
2023-10-17 8:53 ` Luis Machado
2023-10-19 20:23 ` Tom Tromey
2023-10-16 23:02 ` [PATCH 2/7] Switch to -Wimplicit-fallthrough=5 Tom Tromey
2023-10-16 23:02 ` [PATCH 3/7] Enable some C++14 code in array-view.h Tom Tromey
2023-10-16 23:02 ` [PATCH 4/7] Use try_emplace in index-write.c Tom Tromey
2023-10-17 8:56 ` Pedro Alves
2023-10-17 9:30 ` Lancelot SIX
2023-10-19 20:24 ` Tom Tromey
2023-10-16 23:02 ` [PATCH 5/7] Rely on C++17 <new> in new-op.cc Tom Tromey
2023-10-16 23:02 ` [PATCH 6/7] Rely on copy elision in scope-exit.h Tom Tromey
2023-10-16 23:02 ` [PATCH 7/7] Use C++17 void_t Tom Tromey
2023-10-17 9:06 ` [PATCH 0/7] More C++17 Updates Pedro Alves
2023-10-19 20:26 ` Tom Tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).