diff -urN gcc-16.1.0-orig/gcc/c/c-decl.cc gcc-16.1.0/gcc/c/c-decl.cc
--- gcc-16.1.0-orig/gcc/c/c-decl.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/c/c-decl.cc	2026-06-18 19:17:03 +0900
@@ -62,6 +62,7 @@
 #include "omp-offload.h"  /* For offload_vars.  */
 #include "c-parser.h"
 #include "gcc-urlifier.h"
+#include "flags.h"
 
 #include "tree-pretty-print.h"
 
@@ -3703,9 +3704,10 @@
   if (!olddecl)
     hint = lookup_name_fuzzy (id, FUZZY_LOOKUP_FUNCTION_NAME, loc);
 
+  const char *suggestion = hint.suggestion ();
   if (flag_isoc99)
     {
-      if (const char *suggestion = hint.suggestion ())
+      if (suggestion && flag_diagnostics_add_fixits)
 	{
 	  gcc_rich_location richloc (loc);
 	  richloc.add_fixit_replace (suggestion);
@@ -3718,7 +3720,7 @@
 	warned = permerror_opt (loc, OPT_Wimplicit_function_declaration,
 				"implicit declaration of function %qE", id);
     }
-  else if (const char *suggestion = hint.suggestion ())
+  else if (suggestion && flag_diagnostics_add_fixits)
     {
       gcc_rich_location richloc (loc);
       richloc.add_fixit_replace (suggestion);
@@ -4096,7 +4098,8 @@
   if (current_function_decl == NULL_TREE)
     {
       name_hint guessed_id = lookup_name_fuzzy (id, FUZZY_LOOKUP_NAME, loc);
-      if (const char *suggestion = guessed_id.suggestion ())
+      const char *suggestion = guessed_id.suggestion ();
+      if (suggestion && flag_diagnostics_add_fixits)
 	{
 	  gcc_rich_location richloc (loc);
 	  richloc.add_fixit_replace (suggestion);
@@ -4114,7 +4117,8 @@
       if (!objc_diagnose_private_ivar (id))
 	{
 	  name_hint guessed_id = lookup_name_fuzzy (id, FUZZY_LOOKUP_NAME, loc);
-	  if (const char *suggestion = guessed_id.suggestion ())
+	  const char *suggestion = guessed_id.suggestion ();
+	  if (suggestion && flag_diagnostics_add_fixits)
 	    {
 	      gcc_rich_location richloc (loc);
 	      richloc.add_fixit_replace (suggestion);
@@ -14308,7 +14312,7 @@
 	}
       const char *hint = find_closest_string (IDENTIFIER_POINTER (name),
 					      &candidates);
-      if (hint)
+      if (hint && flag_diagnostics_add_fixits)
 	{
 	  gcc_rich_location richloc (loc);
 	  richloc.add_fixit_replace (hint);
diff -urN gcc-16.1.0-orig/gcc/c/c-parser.cc gcc-16.1.0/gcc/c/c-parser.cc
--- gcc-16.1.0-orig/gcc/c/c-parser.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/c/c-parser.cc	2026-06-18 19:18:01 +0900
@@ -77,6 +77,7 @@
 #include "asan.h"
 #include "c-family/c-ubsan.h"
 #include "gcc-urlifier.h"
+#include "flags.h"
 
 /* We need to walk over decls with incomplete struct/union/enum types
    after parsing the whole translation unit.
@@ -2505,7 +2506,7 @@
 	 If the user forgot a "struct" etc, suggest inserting
 	 it.  Otherwise, attempt to look for misspellings.  */
       gcc_rich_location richloc (here);
-      if (tag_exists_p (RECORD_TYPE, name))
+      if (tag_exists_p (RECORD_TYPE, name) && flag_diagnostics_add_fixits)
 	{
 	  /* This is not C++ with its implicit typedef.  */
 	  richloc.add_fixit_insert_before ("struct ");
@@ -2514,7 +2515,7 @@
 		    " use %<struct%> keyword to refer to the type",
 		    name);
 	}
-      else if (tag_exists_p (UNION_TYPE, name))
+      else if (tag_exists_p (UNION_TYPE, name) && flag_diagnostics_add_fixits)
 	{
 	  richloc.add_fixit_insert_before ("union ");
 	  error_at (&richloc,
@@ -2522,7 +2523,7 @@
 		    " use %<union%> keyword to refer to the type",
 		    name);
 	}
-      else if (tag_exists_p (ENUMERAL_TYPE, name))
+      else if (tag_exists_p (ENUMERAL_TYPE, name) && flag_diagnostics_add_fixits)
 	{
 	  richloc.add_fixit_insert_before ("enum ");
 	  error_at (&richloc,
@@ -2535,7 +2536,8 @@
 	  auto_diagnostic_group d;
 	  name_hint hint = lookup_name_fuzzy (name, FUZZY_LOOKUP_TYPENAME,
 					      here);
-	  if (const char *suggestion = hint.suggestion ())
+	  const char *suggestion = hint.suggestion ();
+	  if (suggestion && flag_diagnostics_add_fixits)
 	    {
 	      richloc.add_fixit_replace (suggestion);
 	      error_at (&richloc,
@@ -3768,7 +3770,8 @@
 	      auto_diagnostic_group d;
 	      name_hint hint = lookup_name_fuzzy (value, FUZZY_LOOKUP_TYPENAME,
 						  loc);
-	      if (const char *suggestion = hint.suggestion ())
+	      const char *suggestion = hint.suggestion ();
+	      if (suggestion && flag_diagnostics_add_fixits)
 		{
 		  gcc_rich_location richloc (loc);
 		  richloc.add_fixit_replace (suggestion);
@@ -4482,7 +4485,7 @@
 	      location_t semicolon_loc
 		= c_parser_peek_token (parser)->location;
 	      gcc_rich_location richloc (semicolon_loc);
-	      richloc.add_fixit_remove ();
+	      if (flag_diagnostics_add_fixits) richloc.add_fixit_remove ();
 	      pedwarn (&richloc, OPT_Wpedantic,
 		       "extra semicolon in struct or union specified");
 	      c_parser_consume_token (parser);
@@ -5475,7 +5478,8 @@
 	  name_hint hint = lookup_name_fuzzy (token->value,
 					      FUZZY_LOOKUP_TYPENAME,
 					      token->location);
-	  if (const char *suggestion = hint.suggestion ())
+	  const char *suggestion = hint.suggestion ();
+	  if (suggestion && flag_diagnostics_add_fixits)
 	    {
 	      gcc_rich_location richloc (token->location);
 	      richloc.add_fixit_replace (suggestion);
diff -urN gcc-16.1.0-orig/gcc/c/c-typeck.cc gcc-16.1.0/gcc/c/c-typeck.cc
--- gcc-16.1.0-orig/gcc/c/c-typeck.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/c/c-typeck.cc	2026-06-18 19:17:03 +0900
@@ -55,6 +55,7 @@
 #include "realmpfr.h"
 #include "tree-pretty-print-markup.h"
 #include "gcc-urlifier.h"
+#include "flags.h"
 
 /* Possible cases of implicit conversions.  Used to select diagnostic messages
    and control folding initializers in convert_for_assignment.  */
@@ -3066,6 +3067,9 @@
 static bool
 should_suggest_deref_p (tree datum_type)
 {
+  if (!flag_diagnostics_add_fixits)
+    return false;
+
   /* We don't do it for Objective-C, since Objective-C 2.0 dot-syntax
      allows "." for ptrs; we could be handling a failed attempt
      to access a property.  */
@@ -3365,7 +3369,7 @@
       if (!field)
 	{
 	  tree guessed_id = lookup_field_fuzzy (type, component);
-	  if (guessed_id)
+	  if (guessed_id && flag_diagnostics_add_fixits)
 	    {
 	      /* Attempt to provide a fixit replacement hint, if
 		 we have a valid range for the component.  */
@@ -5852,7 +5856,7 @@
 	    {
 	      auto_diagnostic_group d;
 	      if (warning_at (location, OPT_Wbool_operation,
-				"%<~%> on a boolean expression"))
+				"%<~%> on a boolean expression") && flag_diagnostics_add_fixits)
 		{
 		  gcc_rich_location richloc (location);
 		  richloc.add_fixit_insert_before (location, "!");
@@ -10782,7 +10786,7 @@
   if (implicit == 1)
     {
       found_missing_braces = 1;
-      if (initializer_stack->missing_brace_richloc)
+      if (initializer_stack->missing_brace_richloc && flag_diagnostics_add_fixits)
 	initializer_stack->missing_brace_richloc->add_fixit_insert_before
 	  (loc, "{");
     }
@@ -10893,7 +10897,7 @@
       gcc_assert (!constructor_range_stack);
     }
   else
-    if (initializer_stack->missing_brace_richloc)
+    if (initializer_stack->missing_brace_richloc && flag_diagnostics_add_fixits)
       initializer_stack->missing_brace_richloc->add_fixit_insert_before
 	(insert_before, "}");
 
@@ -11302,7 +11306,7 @@
   if (field == NULL_TREE)
     {
       tree guessed_id = lookup_field_fuzzy (constructor_type, fieldname);
-      if (guessed_id)
+      if (guessed_id && flag_diagnostics_add_fixits)
 	{
 	  gcc_rich_location rich_loc (fieldname_loc);
 	  rich_loc.add_fixit_misspelled_id (fieldname_loc, guessed_id);
diff -urN gcc-16.1.0-orig/gcc/c-family/c-common.cc gcc-16.1.0/gcc/c-family/c-common.cc
--- gcc-16.1.0-orig/gcc/c-family/c-common.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/c-family/c-common.cc	2026-06-18 19:17:42 +0900
@@ -57,6 +57,7 @@
 #include "gcc-rich-location.h"
 #include "gcc-urlifier.h"
 #include "diagnostics/diagnostics-selftests.h"
+#include "flags.h"
 
 cpp_reader *parse_in;		/* Declared in c-pragma.h.  */
 
@@ -9948,6 +9949,9 @@
 				       enum cpp_ttype token_type,
 				       location_t prev_token_loc)
 {
+  if (!flag_diagnostics_add_fixits)
+    return;
+
   gcc_assert (richloc);
 
   enum missing_token_insertion_kind mtik
@@ -9996,6 +10000,9 @@
 maybe_emit_indirection_note (location_t loc,
 			     tree expr, tree expected_type)
 {
+  if (!flag_diagnostics_add_fixits)
+    return;
+
   gcc_assert (expr);
   gcc_assert (expected_type);
 
@@ -10176,6 +10183,9 @@
 maybe_add_include_fixit (rich_location *richloc, const char *header,
 			 bool override_location)
 {
+  if (!flag_diagnostics_add_fixits)
+    return;
+
   location_t loc = richloc->get_loc ();
   const char *file = LOCATION_FILE (loc);
   if (!file)
diff -urN gcc-16.1.0-orig/gcc/c-family/c-warn.cc gcc-16.1.0/gcc/c-family/c-warn.cc
--- gcc-16.1.0-orig/gcc/c-family/c-warn.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/c-family/c-warn.cc	2026-06-18 19:17:03 +0900
@@ -41,6 +41,7 @@
 #include "tree-pretty-print.h"
 #include "langhooks.h"
 #include "gcc-urlifier.h"
+#include "flags.h"
 
 /* Print a warning if a constant expression had overflow in folding.
    Invoke this function on every expression that the language
@@ -571,7 +572,7 @@
   if (warning_at (location, OPT_Wlogical_not_parentheses,
 		  "logical not is only applied to the left hand side of "
 		  "comparison")
-      && EXPR_HAS_LOCATION (lhs))
+      && EXPR_HAS_LOCATION (lhs) && flag_diagnostics_add_fixits)
     {
       location_t lhs_loc = EXPR_LOCATION (lhs);
       rich_location richloc (line_table, lhs_loc);
@@ -3814,7 +3815,7 @@
 		      "elements in this array; element type is "
 		      "%qT, not %qT", elt_type, type1))
 	{
-	  if (EXPR_HAS_LOCATION (op1))
+	  if (EXPR_HAS_LOCATION (op1) && flag_diagnostics_add_fixits)
 	    {
 	      location_t op1_loc = EXPR_LOCATION (op1);
 	      gcc_rich_location richloc (op1_loc);
@@ -3823,7 +3824,7 @@
 	      inform (&richloc, "add parentheses around %qE to "
 		      "silence this warning", op1);
 	    }
-	  else
+	  else if (flag_diagnostics_add_fixits)
 	    inform (loc, "add parentheses around the second %<sizeof%> "
 		    "to silence this warning");
 	  if (DECL_P (arr))
diff -urN gcc-16.1.0-orig/gcc/common.opt gcc-16.1.0/gcc/common.opt
--- gcc-16.1.0-orig/gcc/common.opt	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/common.opt	2026-06-18 19:17:03 +0900
@@ -1561,6 +1561,10 @@
 EnumValue
 Enum(diagnostics_output_format) String(sarif-file) Value(DIAGNOSTICS_OUTPUT_FORMAT_SARIF_FILE)
 
+fdiagnostics-add-fixits
+Common Var(flag_diagnostics_add_fixits)
+Add fix-it hints to diagnostic messages, where available.
+
 fdiagnostics-parseable-fixits
 Common Var(flag_diagnostics_parseable_fixits)
 Print fix-it hints in machine-readable form.
diff -urN gcc-16.1.0-orig/gcc/cp/decl.cc gcc-16.1.0/gcc/cp/decl.cc
--- gcc-16.1.0-orig/gcc/cp/decl.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/cp/decl.cc	2026-06-18 19:17:03 +0900
@@ -15089,7 +15089,7 @@
 	  auto_diagnostic_group d;
 	  if (warning_at (declarator->parenthesized, OPT_Wparentheses,
 			  "unnecessary parentheses in declaration of %qs",
-			  name))
+			  name) && false)
 	    {
 	      gcc_rich_location iloc (declarator->parenthesized);
 	      iloc.add_fixit_remove (get_start (declarator->parenthesized));
diff -urN gcc-16.1.0-orig/gcc/cp/error.cc gcc-16.1.0/gcc/cp/error.cc
--- gcc-16.1.0-orig/gcc/cp/error.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/cp/error.cc	2026-06-18 19:17:27 +0900
@@ -40,6 +40,7 @@
 #include "attribs.h"
 #include "pretty-print-format-impl.h"
 #include "diagnostics/text-sink.h"
+#include "flags.h"
 
 #define pp_separate_with_comma(PP) pp_cxx_separate_with (PP, ',')
 #define pp_separate_with_semicolon(PP) pp_cxx_separate_with (PP, ';')
@@ -5091,7 +5092,8 @@
 	  name_hint hint;
 	  if (SCOPED_ENUM_P (scope) && TREE_CODE (name) == IDENTIFIER_NODE)
 	    hint = suggest_alternative_in_scoped_enum (name, scope);
-	  if (const char *suggestion = hint.suggestion ())
+	  const char *suggestion = hint.suggestion ();
+	  if (suggestion && flag_diagnostics_add_fixits)
 	    {
 	      gcc_rich_location richloc (location);
 	      richloc.add_fixit_replace (suggestion);
@@ -5117,7 +5119,8 @@
 	     fix-it hints for the suggestion.  */
 	  emit_fixit = false;
 	}
-      if (const char *suggestion = hint.suggestion ())
+      const char *suggestion = hint.suggestion ();
+      if (suggestion && flag_diagnostics_add_fixits)
 	{
 	  gcc_rich_location richloc (location);
 	  if (emit_fixit)
@@ -5132,7 +5135,8 @@
     {
       auto_diagnostic_group d;
       name_hint hint = suggest_alternatives_for (location, name, true);
-      if (const char *suggestion = hint.suggestion ())
+      const char *suggestion = hint.suggestion ();
+      if (suggestion && flag_diagnostics_add_fixits)
 	{
 	  gcc_rich_location richloc (location);
 	  richloc.add_fixit_replace (suggestion);
diff -urN gcc-16.1.0-orig/gcc/cp/lex.cc gcc-16.1.0/gcc/cp/lex.cc
--- gcc-16.1.0-orig/gcc/cp/lex.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/cp/lex.cc	2026-06-18 19:17:03 +0900
@@ -32,6 +32,7 @@
 #include "gcc-rich-location.h"
 #include "cp-name-hint.h"
 #include "langhooks.h"
+#include "flags.h"
 
 static int interface_strcmp (const char *);
 static void init_cp_traits (void);
@@ -819,7 +820,8 @@
 	{
 	  auto_diagnostic_group d;
 	  name_hint hint = suggest_alternatives_for (loc, name, true);
-	  if (const char *suggestion = hint.suggestion ())
+	  const char *suggestion = hint.suggestion ();
+	  if (suggestion && flag_diagnostics_add_fixits)
 	    {
 	      gcc_rich_location richloc (loc);
 	      richloc.add_fixit_replace (suggestion);
diff -urN gcc-16.1.0-orig/gcc/cp/typeck.cc gcc-16.1.0/gcc/cp/typeck.cc
--- gcc-16.1.0-orig/gcc/cp/typeck.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/cp/typeck.cc	2026-06-18 19:17:03 +0900
@@ -40,6 +40,7 @@
 #include "attribs.h"
 #include "asan.h"
 #include "gimplify.h"
+#include "flags.h"
 
 static tree cp_build_addr_expr_strict (tree, tsubst_flags_t);
 static tree cp_build_function_call (tree, tree, tsubst_flags_t);
@@ -3382,6 +3383,9 @@
 void
 access_failure_info::maybe_suggest_accessor (bool const_p) const
 {
+  if (!flag_diagnostics_add_fixits)
+    return;
+
   tree accessor = get_any_accessor (const_p);
   if (accessor == NULL_TREE)
     return;
@@ -3403,7 +3407,7 @@
   /* Attempt to provide a hint about misspelled names.  */
   tree guessed_id = lookup_member_fuzzy (access_path, name,
 					 /*want_type=*/false);
-  if (guessed_id == NULL_TREE)
+  if (guessed_id == NULL_TREE || !flag_diagnostics_add_fixits)
     {
       /* No hint.  */
       error ("%q#T has no member named %qE",
diff -urN gcc-16.1.0-orig/gcc/cp/typeck2.cc gcc-16.1.0/gcc/cp/typeck2.cc
--- gcc-16.1.0-orig/gcc/cp/typeck2.cc	2026-04-30 17:33:20 +0900
+++ gcc-16.1.0/gcc/cp/typeck2.cc	2026-06-18 19:17:03 +0900
@@ -34,6 +34,7 @@
 #include "intl.h"
 #include "gcc-rich-location.h"
 #include "target.h"
+#include "flags.h"
 
 static tree
 process_init_constructor (tree type, tree init, int nested, int flags,
@@ -447,7 +448,7 @@
 	    member = MAYBE_BASELINK_FUNCTIONS (member);
 	    if (TREE_CODE (member) == FUNCTION_DECL
 		&& DECL_OBJECT_MEMBER_FUNCTION_P (member)
-		&& type_num_arguments (TREE_TYPE (member)) == 1)
+		&& type_num_arguments (TREE_TYPE (member)) == 1 && flag_diagnostics_add_fixits)
 	      richloc.add_fixit_insert_after ("()");
 	    complained = emit_diagnostic (diag_kind, &richloc, 0,
 			     "invalid use of member function %qD "
