[v2,1/8] Use C++17 [[fallthrough]] attribute

Message ID 20231121152817.31859-2-tom@tromey.com
State New
Headers
Series [v2,1/8] Use C++17 [[fallthrough]] attribute |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Testing passed

Commit Message

Tom Tromey Nov. 21, 2023, 3:27 p.m. UTC
  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
Approved-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Luis Machado <luis.machado@arm.com>
Approved-By: Pedro Alves <pedro@palves.net>
---
 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(-)
  

Comments

Simon Marchi Nov. 30, 2023, 6:03 p.m. UTC | #1
On 11/21/23 10:27, 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.

Are you able to test building on macos?  I see this on my macos builder:

 /Users/jenkins/build/workspace/binutils-gdb_master_macosbuild/platform/macos-amd64/target_board/unix/src/binutils-gdb/gdb/dbxread.c:2809:7: error: fallthrough annotation does not directly precede switch label
       [[fallthrough]];
       ^

Simon
  
Tom Tromey Nov. 30, 2023, 7:13 p.m. UTC | #2
>>>>> "Simon" == Simon Marchi <simark@simark.ca> writes:

Simon> Are you able to test building on macos?

No.

Simon>  /Users/jenkins/build/workspace/binutils-gdb_master_macosbuild/platform/macos-amd64/target_board/unix/src/binutils-gdb/gdb/dbxread.c:2809:7: error: fallthrough annotation does not directly precede switch label
Simon>        [[fallthrough]];
Simon>        ^

Can you try the appended?

thanks,
Tom

diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index 99d9fba96ea..4947a8e8193 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -2808,7 +2808,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
       unknown_symtype_complaint (hex_string (type));
       [[fallthrough]];
 
-    define_a_symbol:
       /* These symbol types don't need the address field relocated,
 	 since it is either unused, or is absolute.  */
     case N_GSYM:		/* Global variable.  */
@@ -2820,6 +2819,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
     case N_LSYM:		/* Local symbol in stack.  */
     case N_PSYM:		/* Parameter variable.  */
     case N_LENG:		/* Length of preceding symbol type.  */
+    define_a_symbol:
       if (name)
 	{
 	  int deftype;
  
Simon Marchi Nov. 30, 2023, 9:08 p.m. UTC | #3
On 11/30/23 14:13, Tom Tromey wrote:
>>>>>> "Simon" == Simon Marchi <simark@simark.ca> writes:
> 
> Simon> Are you able to test building on macos?
> 
> No.
> 
> Simon>  /Users/jenkins/build/workspace/binutils-gdb_master_macosbuild/platform/macos-amd64/target_board/unix/src/binutils-gdb/gdb/dbxread.c:2809:7: error: fallthrough annotation does not directly precede switch label
> Simon>        [[fallthrough]];
> Simon>        ^
> 
> Can you try the appended?
> 
> thanks,
> Tom
> 
> diff --git a/gdb/dbxread.c b/gdb/dbxread.c
> index 99d9fba96ea..4947a8e8193 100644
> --- a/gdb/dbxread.c
> +++ b/gdb/dbxread.c
> @@ -2808,7 +2808,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
>        unknown_symtype_complaint (hex_string (type));
>        [[fallthrough]];
>  
> -    define_a_symbol:
>        /* These symbol types don't need the address field relocated,
>  	 since it is either unused, or is absolute.  */
>      case N_GSYM:		/* Global variable.  */
> @@ -2820,6 +2819,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
>      case N_LSYM:		/* Local symbol in stack.  */
>      case N_PSYM:		/* Parameter variable.  */
>      case N_LENG:		/* Length of preceding symbol type.  */
> +    define_a_symbol:
>        if (name)
>  	{
>  	  int deftype;

Yeah this works.  But you can also move the fallthrough so it's below
the regular label, so that that label stays closer to the code using it
(even though this dbxread code looks like a big spaghetti mess anyway).

Here's a patch that fixes that, plus another instance.  LGTY?


From 6556f153e81d1870f11c7de1fbc82c166d80ddbe Mon Sep 17 00:00:00 2001
From: Simon Marchi <simon.marchi@efficios.com>
Date: Thu, 30 Nov 2023 15:59:16 -0500
Subject: [PATCH] gdb: fix warnings about invalid [[fallthrough]] usage

Fix these two warnings, when building on macos:

      CXX    cp-name-parser.o
    /Users/smarchi/src/binutils-gdb/gdb/cp-name-parser.y:1644:7: error: fallthrough annotation does not directly precede switch label
          [[fallthrough]];
          ^

      CXX    dbxread.o
    /Users/smarchi/src/binutils-gdb/gdb/dbxread.c:2809:7: error: fallthrough annotation does not directly precede switch label
          [[fallthrough]];
          ^

In these two cases, we [[fallthrough]], followed by a regular label,
followed by a case label.  Move the [[fallthrough]] below the regular
label.

Change-Id: If4a3145139e050bdb6950c7f239badd5778e6f64
---
 gdb/cp-name-parser.y | 2 +-
 gdb/dbxread.c        | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y
index 9a359d47b65c..6f9305e15df7 100644
--- a/gdb/cp-name-parser.y
+++ b/gdb/cp-name-parser.y
@@ -1641,9 +1641,9 @@ yylex (YYSTYPE *lvalp, cpname_state *state)
 	  state->lexptr++;
 	  return '-';
 	}
-      [[fallthrough]];

     try_number:
+      [[fallthrough]];
     case '0':
     case '1':
     case '2':
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index 99d9fba96ea9..ebfd48e29cd9 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -2806,9 +2806,9 @@ 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]];

     define_a_symbol:
+      [[fallthrough]];
       /* These symbol types don't need the address field relocated,
 	 since it is either unused, or is absolute.  */
     case N_GSYM:		/* Global variable.  */

base-commit: d5835df2eebf8e9cd3ae35b683c831c2a16a5269
  
Tom Tromey Dec. 1, 2023, 3:55 a.m. UTC | #4
Simon> Here's a patch that fixes that, plus another instance.  LGTY?

Looks good, thank you.

Tom
  
Simon Marchi Dec. 1, 2023, 4:17 a.m. UTC | #5
On 2023-11-30 22:55, Tom Tromey wrote:
> Simon> Here's a patch that fixes that, plus another instance.  LGTY?
> 
> Looks good, thank you.
> 
> Tom

Thanks, pushed.

Simon
  

Patch

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 7a93b098247..23fecf7cf66 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 5898b3a8e08..37363631915 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -896,7 +896,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:
@@ -934,7 +934,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 3a3e4d21136..f099504aab7 100644
--- a/gdb/compile/compile-c-support.c
+++ b/gdb/compile/compile-c-support.c
@@ -267,7 +267,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 e6c8c4c09a9..9a359d47b65 100644
--- a/gdb/cp-name-parser.y
+++ b/gdb/cp-name-parser.y
@@ -1604,7 +1604,7 @@  yylex (YYSTYPE *lvalp, cpname_state *state)
 					  sizeof "(anonymous namespace)" - 1);
 	  return NAME;
 	}
-	/* FALL THROUGH */
+	[[fallthrough]];
 
     case ')':
     case ',':
@@ -1641,7 +1641,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 cb169444d2a..9eb5577dd33 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -531,7 +531,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 ccf9f18b31b..ec21cb9e428 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -6494,7 +6494,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;
@@ -6536,7 +6536,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:
@@ -6564,7 +6564,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
@@ -16487,7 +16487,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.  */
@@ -17194,7 +17194,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)
 	{
@@ -17204,7 +17204,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);
@@ -19017,7 +19017,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:
@@ -19194,7 +19194,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:
@@ -19248,7 +19248,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:
@@ -20044,7 +20044,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);
       }
@@ -20228,7 +20228,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 04598c6f4be..b2624ac036d 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -1101,7 +1101,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;
 
@@ -1171,7 +1171,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
@@ -4436,7 +4436,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:
@@ -4608,7 +4608,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.  */
@@ -4741,7 +4741,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 f5ff55de47a..3795759c9d4 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 066c7c80669..c7157c19e7b 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 c0cebbb2f02..89bf28b5133 100644
--- a/gdb/nat/linux-btrace.c
+++ b/gdb/nat/linux-btrace.c
@@ -895,8 +895,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 98f38b2598d..27a4eb3eec6 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 e084196b841..e8498fc4901 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 1bc59928dcf..21081d667d6 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -8123,7 +8123,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;
@@ -8647,7 +8647,7 @@  remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
 	      putpkt (buf);
 	      break;
 	    }
-	  /* fallthrough */
+	  [[fallthrough]];
 	default:
 	  warning (_("Invalid remote reply: %s"), buf);
 	  break;
@@ -9990,7 +9990,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 fef47f8a6b0..16f3da9c011 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -4309,7 +4309,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,
@@ -4375,7 +4375,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 */
@@ -4564,7 +4564,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 */
@@ -4897,7 +4897,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);
@@ -4988,7 +4988,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 */
@@ -5080,7 +5080,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 */
@@ -5103,7 +5103,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 */
@@ -5176,7 +5176,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 */
@@ -5272,7 +5272,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 */
@@ -5566,7 +5566,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;
@@ -5790,7 +5790,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 */
@@ -5884,7 +5884,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 */
@@ -6071,7 +6071,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 */
@@ -6094,7 +6094,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
@@ -6366,7 +6366,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))
@@ -6412,7 +6412,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);
@@ -6449,7 +6449,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 */
@@ -6457,7 +6457,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);
@@ -6468,7 +6468,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 */
@@ -7233,10 +7233,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,
@@ -7246,7 +7246,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);
@@ -7275,7 +7275,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 */
@@ -7295,7 +7295,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 */
@@ -7319,7 +7319,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,
@@ -7347,7 +7347,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 c5af186ad33..09aa70be1d5 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3043,7 +3043,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 7a1841ba21e..5ec8c5671f3 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 b3440344c74..6daea8ecf1c 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':