diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c
index db2d1e0ac59..10df1a1980d 100644
--- a/gdb/disasm-selftests.c
+++ b/gdb/disasm-selftests.c
@@ -234,7 +234,8 @@ print_one_insn_test (struct gdbarch *gdbarch)
     size_t m_len;
 
     static int read_memory (bfd_vma memaddr, gdb_byte *myaddr,
-			    unsigned int len, struct disassemble_info *info)
+			    unsigned int len,
+			    struct disassemble_info *info) noexcept
     {
       gdb_disassembler_test *self
 	= static_cast<gdb_disassembler_test *>(info->application_data);
@@ -296,7 +297,7 @@ memory_error_test (struct gdbarch *gdbarch)
 
     static int read_memory (bfd_vma memaddr, gdb_byte *myaddr,
 			    unsigned int len,
-			    struct disassemble_info *info)
+			    struct disassemble_info *info) noexcept
     {
       /* Always return an error.  */
       return -1;
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 60f95c398a9..e64cf69b250 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -191,7 +191,7 @@ line_has_code_p (htab_t table, struct symtab *symtab, int line)
 int
 gdb_disassembler_memory_reader::dis_asm_read_memory
   (bfd_vma memaddr, gdb_byte *myaddr, unsigned int len,
-   struct disassemble_info *info)
+   struct disassemble_info *info) noexcept
 {
   return target_read_code (memaddr, myaddr, len);
 }
@@ -199,8 +199,8 @@ gdb_disassembler_memory_reader::dis_asm_read_memory
 /* Wrapper of memory_error.  */
 
 void
-gdb_disassembler::dis_asm_memory_error (int err, bfd_vma memaddr,
-					struct disassemble_info *info)
+gdb_disassembler::dis_asm_memory_error
+  (int err, bfd_vma memaddr, struct disassemble_info *info) noexcept
 {
   gdb_disassembler *self
     = static_cast<gdb_disassembler *>(info->application_data);
@@ -211,8 +211,8 @@ gdb_disassembler::dis_asm_memory_error (int err, bfd_vma memaddr,
 /* Wrapper of print_address.  */
 
 void
-gdb_disassembler::dis_asm_print_address (bfd_vma addr,
-					 struct disassemble_info *info)
+gdb_disassembler::dis_asm_print_address
+  (bfd_vma addr, struct disassemble_info *info) noexcept
 {
   gdb_disassembler *self
     = static_cast<gdb_disassembler *>(info->application_data);
@@ -256,7 +256,7 @@ gdb_printing_disassembler::stream_from_gdb_disassemble_info (void *dis_info)
 
 int
 gdb_printing_disassembler::fprintf_func (void *dis_info,
-					 const char *format, ...)
+					 const char *format, ...) noexcept
 {
   ui_file *stream = stream_from_gdb_disassemble_info (dis_info);
 
@@ -272,9 +272,9 @@ gdb_printing_disassembler::fprintf_func (void *dis_info,
 /* See disasm.h.  */
 
 int
-gdb_printing_disassembler::fprintf_styled_func (void *dis_info,
-						enum disassembler_style style,
-						const char *format, ...)
+gdb_printing_disassembler::fprintf_styled_func
+  (void *dis_info, enum disassembler_style style,
+   const char *format, ...) noexcept
 {
   ui_file *stream = stream_from_gdb_disassemble_info (dis_info);
   gdb_printing_disassembler *dis = (gdb_printing_disassembler *) dis_info;
@@ -1220,8 +1220,8 @@ gdb_insn_length (struct gdbarch *gdbarch, CORE_ADDR addr)
 /* See disasm.h.  */
 
 int
-gdb_non_printing_disassembler::null_fprintf_func (void *stream,
-						  const char *format, ...)
+gdb_non_printing_disassembler::null_fprintf_func
+  (void *stream, const char *format, ...) noexcept
 {
   return 0;
 }
@@ -1230,7 +1230,8 @@ gdb_non_printing_disassembler::null_fprintf_func (void *stream,
 
 int
 gdb_non_printing_disassembler::null_fprintf_styled_func
-  (void *stream, enum disassembler_style style, const char *format, ...)
+  (void *stream, enum disassembler_style style,
+   const char *format, ...) noexcept
 {
   return 0;
 }
diff --git a/gdb/disasm.h b/gdb/disasm.h
index b7d16744c20..58c6c623098 100644
--- a/gdb/disasm.h
+++ b/gdb/disasm.h
@@ -51,7 +51,13 @@ struct gdb_disassemble_info
 
 protected:
 
-  /* Types for the function callbacks within m_di.  */
+  /* Types for the function callbacks within m_di.  It would be nice if
+     these function types were all defined to include the noexcept
+     keyword, as every implementation of these must be noexcept.  However,
+     using noexcept within a function typedef like this is a C++17
+     feature, trying to do this for earlier C++ versions results in a
+     warning from GCC/Clang, and the noexcept isn't checked.  After we
+     move to C++17 these should be updated to add noexcept.  */
   using read_memory_ftype = decltype (disassemble_info::read_memory_func);
   using memory_error_ftype = decltype (disassemble_info::memory_error_func);
   using print_address_ftype = decltype (disassemble_info::print_address_func);
@@ -127,7 +133,7 @@ struct gdb_printing_disassembler : public gdb_disassemble_info
   /* Callback used as the disassemble_info's fprintf_func callback.  The
      DIS_INFO pointer is a pointer to a gdb_printing_disassembler object.
      Content is written to the m_stream extracted from DIS_INFO.  */
-  static int fprintf_func (void *dis_info, const char *format, ...)
+  static int fprintf_func (void *dis_info, const char *format, ...) noexcept
     ATTRIBUTE_PRINTF(2,3);
 
   /* Callback used as the disassemble_info's fprintf_styled_func callback.
@@ -135,7 +141,7 @@ struct gdb_printing_disassembler : public gdb_disassemble_info
      object.  Content is written to the m_stream extracted from DIS_INFO.  */
   static int fprintf_styled_func (void *dis_info,
 				  enum disassembler_style style,
-				  const char *format, ...)
+				  const char *format, ...) noexcept
     ATTRIBUTE_PRINTF(3,4);
 
   /* Return true if the disassembler is considered inside a comment, false
@@ -187,14 +193,14 @@ struct gdb_non_printing_disassembler : public gdb_disassemble_info
 
   /* Callback used as the disassemble_info's fprintf_func callback, this
      doesn't write anything to STREAM, but just returns 0.  */
-  static int null_fprintf_func (void *stream, const char *format, ...)
+  static int null_fprintf_func (void *stream, const char *format, ...) noexcept
     ATTRIBUTE_PRINTF(2,3);
 
   /* Callback used as the disassemble_info's fprintf_styled_func callback,
      , this doesn't write anything to STREAM, but just returns 0.  */
   static int null_fprintf_styled_func (void *stream,
 				       enum disassembler_style style,
-				       const char *format, ...)
+				       const char *format, ...) noexcept
     ATTRIBUTE_PRINTF(3,4);
 };
 
@@ -208,7 +214,7 @@ struct gdb_disassembler_memory_reader
   /* Implements the read_memory_func disassemble_info callback.  */
   static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr,
 				  unsigned int len,
-				  struct disassemble_info *info);
+				  struct disassemble_info *info) noexcept;
 };
 
 /* A non-printing disassemble_info management class.  The disassemble_info
@@ -281,9 +287,9 @@ struct gdb_disassembler : public gdb_printing_disassembler,
   static bool use_ext_lang_colorization_p;
 
   static void dis_asm_memory_error (int err, bfd_vma memaddr,
-				    struct disassemble_info *info);
+				    struct disassemble_info *info) noexcept;
   static void dis_asm_print_address (bfd_vma addr,
-				     struct disassemble_info *info);
+				     struct disassemble_info *info) noexcept;
 
   /* Return true if we should use the extension language to apply
      disassembler styling.  This requires disassembler styling to be on
diff --git a/gdb/guile/scm-disasm.c b/gdb/guile/scm-disasm.c
index 992a64b9331..c0957559136 100644
--- a/gdb/guile/scm-disasm.c
+++ b/gdb/guile/scm-disasm.c
@@ -106,7 +106,7 @@ gdbscm_disasm_read_memory_worker (void *datap)
 static int
 gdbscm_disasm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
 			   unsigned int length,
-			   struct disassemble_info *dinfo)
+			   struct disassemble_info *dinfo) noexcept
 {
   gdbscm_disassembler *self
     = static_cast<gdbscm_disassembler *> (dinfo->application_data);
diff --git a/gdb/python/py-disasm.c b/gdb/python/py-disasm.c
index 1d460997831..a25252b4306 100644
--- a/gdb/python/py-disasm.c
+++ b/gdb/python/py-disasm.c
@@ -101,12 +101,12 @@ struct gdbpy_disassembler : public gdb_printing_disassembler
 
   /* Callbacks used by disassemble_info.  */
   static void memory_error_func (int status, bfd_vma memaddr,
-				 struct disassemble_info *info);
+				 struct disassemble_info *info) noexcept;
   static void print_address_func (bfd_vma addr,
-				  struct disassemble_info *info);
+				  struct disassemble_info *info) noexcept;
   static int read_memory_func (bfd_vma memaddr, gdb_byte *buff,
 			       unsigned int len,
-			       struct disassemble_info *info);
+			       struct disassemble_info *info) noexcept;
 
   /* Return a reference to an optional that contains the address at which a
      memory error occurred.  The optional will only have a value if a
@@ -513,7 +513,7 @@ disasmpy_info_progspace (PyObject *self, void *closure)
 int
 gdbpy_disassembler::read_memory_func (bfd_vma memaddr, gdb_byte *buff,
 				      unsigned int len,
-				      struct disassemble_info *info)
+				      struct disassemble_info *info) noexcept
 {
   gdbpy_disassembler *dis
     = static_cast<gdbpy_disassembler *> (info->application_data);
@@ -658,7 +658,7 @@ disasmpy_result_init (PyObject *self, PyObject *args, PyObject *kwargs)
 
 void
 gdbpy_disassembler::memory_error_func (int status, bfd_vma memaddr,
-				       struct disassemble_info *info)
+				       struct disassemble_info *info) noexcept
 {
   gdbpy_disassembler *dis
     = static_cast<gdbpy_disassembler *> (info->application_data);
@@ -669,7 +669,7 @@ gdbpy_disassembler::memory_error_func (int status, bfd_vma memaddr,
 
 void
 gdbpy_disassembler::print_address_func (bfd_vma addr,
-					struct disassemble_info *info)
+					struct disassemble_info *info) noexcept
 {
   gdbpy_disassembler *dis
     = static_cast<gdbpy_disassembler *> (info->application_data);
