From patchwork Thu Nov 2 13:19:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Malcolm X-Patchwork-Id: 160878 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp348772vqu; Thu, 2 Nov 2023 06:21:29 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFtyW/s3KGDEF9UY/FQUtHvlBPVE1P7NGbN79AvwvS37nBC2PDdj+HmGdKECmtY3vSMnkaf X-Received: by 2002:a05:6870:3d86:b0:1e9:a70c:1323 with SMTP id lm6-20020a0568703d8600b001e9a70c1323mr24635077oab.39.1698931288992; Thu, 02 Nov 2023 06:21:28 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698931288; cv=pass; d=google.com; s=arc-20160816; b=Wh0TxSmv4DLjMklFvudmRAwZiODBNqA+8/0QmK61vQDxJWOW4FS10tK0PdAFXuwldW Od0w3AsxErq0m6Z74mUoFq7+a3d0jVP7o8MEN3GeReI8uA39TfPxqdpFNBsdrO6zceJz 4RoBZ3m+i8B4+gwTWJuolERhQXaFrn6kx53rDI/0nwU4yVwaS9hmFYAnE4GRYo3ZIggx bxc9fFl+iouZFPxbd+pWS0bIkFSm2vSUlRIEuJamtS+bJ604IQMvbVCJnZfNr/ziGKl5 LVEKkPtBROgETp/ObJMj48Miz4mCQuY45mvaICv4n/tb5cMCQ2x0R4WqhkiRA/bcn/HW YXyw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=rlrJ/ve+H/eWw/sqOgKUjy7QQFaTeRwBBoq4gRdJQDk=; fh=NXemEfxTRbZtBxUkxR2ehQUaYlcDfMdzPkO8MChVQE4=; b=N6cr3nDpK18wfYjWqCJXz7AXG8OgKc3CPwWCGB9pU2KCnIZAkBoAOqu4wyrQOg9yUz ROJfFVb5/yBdqJ2doqlQTCXOSsqctMdbCpmJG7IruKq6OL3yYk2G5WPb9KQ7JuZEJgJx Bf6nnkRnYBCYnVpd7cAilp/Eon492T7YyfBvlwYqGkgwCgW5dO6fYChmKKchE0q5tXna aT3QB2XRJs8mD+577LIknOV8iAD/26ilUTv31MfUIvduU7v+ZlTGHvd+LD3ag6iQyWEf Y3P9v5QAVmnY9YT5QYB3ybRE5UCoA4EK1oGptyoieRrb0yrQLbMJAQucWbahiFHqfadG TMHg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=dKv0yDtP; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id c21-20020a05622a025500b00410a9ddbcf7si4205849qtx.163.2023.11.02.06.21.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 06:21:28 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=dKv0yDtP; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B8B36385DC18 for ; Thu, 2 Nov 2023 13:21:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id E296B3858C41 for ; Thu, 2 Nov 2023 13:19:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E296B3858C41 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E296B3858C41 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931190; cv=none; b=SkgiKAMQTAwYlAd5kdxcK+o53FJpsNYqWJDWmg1Aga0egOh2NeINTwYOui6zO57tkbBrFxm+KwhN4bGPRkb7WR43rhCiQaAYrPeeZggsnlfUOEgdhMcfjIvHdE4dsaUXvxwoIkA2o4tQwB55Vns6jL6jZq7U/gzcaCfPphxuBdk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931190; c=relaxed/simple; bh=JytmiPVWL5mnCJusJq6TEDcJgfnwYdmBdvejTzO+SWE=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=SLj78WYROuKF5dSD0pcY9cAyBh3dVvfdK0MVQCnBBfVwbrLSSnrGxuCD68R7Pm5z5vWzlNOvQIG/Xcw+jcKGc4ryCOK+lgmJ6bJPHQWOiRJW3HQ6iQnrSXIzbGNfQ/8pDnrSDYQnsec4uotQF/tONLsEsifTEtdlaX49WwU97FE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1698931180; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rlrJ/ve+H/eWw/sqOgKUjy7QQFaTeRwBBoq4gRdJQDk=; b=dKv0yDtPvc2hZDaoRmTBoZD6vlR30zVqwdnTXsn/D3wyK0cITjiDH6wXisrHb8JjRf7nZ7 vm5UPBWrXvdQ1w+2mUEYRJaLqVp5Qdhe6zVBKr51pC85MXwhM4UvL21/QKEsGgeyS0moYr LCulYkRDceCWgbfhCEV/8Htpc58cW1s= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-85-tbRo6pjcMM65XIwwZgu_Pw-1; Thu, 02 Nov 2023 09:19:37 -0400 X-MC-Unique: tbRo6pjcMM65XIwwZgu_Pw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BFF83185A784 for ; Thu, 2 Nov 2023 13:19:36 +0000 (UTC) Received: from t14s.localdomain.com (unknown [10.22.8.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8B2BC1C060BA; Thu, 2 Nov 2023 13:19:36 +0000 (UTC) From: David Malcolm To: gcc-patches@gcc.gnu.org Cc: David Malcolm Subject: [PATCH 1/4] c/c++: rework pragma parsing Date: Thu, 2 Nov 2023 09:19:30 -0400 Message-Id: <20231102131933.2161191-2-dmalcolm@redhat.com> In-Reply-To: <20231102131933.2161191-1-dmalcolm@redhat.com> References: <20231102131933.2161191-1-dmalcolm@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781458575160244925 X-GMAIL-MSGID: 1781458575160244925 This patch reworks pragma parsing in c-pragma.cc, with the following improvements: - it replaces the GCC_BAD* macros (that contained "return") in favor of helper classes and functions for emitting diagnostics, making control flow more explicit - the -Wpragmas diagnostics are reworded from the form e.g.: DESCRIPTION OF PROBLEM; ignored to: ignoring malformed '#pragma FOO': DESCRIPTION OF PROBLEM - the locations of the warnings are fixed to more accurately reflect the location of the problem - the names of the pragmas are URLified into links to the documentation for the pragma. For example, in: warning: ignoring malformed '#pragma weak': expected name [-Wpragmas] in a suitable terminal, the "#pragma weak" within quotes is a link to https://gcc.gnu.org/onlinedocs/gcc/Weak-Pragmas.html; similarly with warning: '#pragma pack' has no effect with '-fpack-struct' - ignored [-Wpragmas] the "#pragma pack" text is linkified to https://gcc.gnu.org/onlinedocs/gcc/Structure-Layout-Pragmas.html and the "-fpack-struct" text is linkified to: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fpack-struct I have a more general and maintainable approach to adding URLs to diagnostics which is in a followup. gcc/c-family/ChangeLog: * c-pragma.cc (GCC_BAD): Delete. (GCC_BAD2): Delete. (GCC_BAD_AT): Delete. (GCC_BAD2_AT): Delete. (get_doc_url): New. (class pragma_parser): New. (handle_pragma_pack): Delete redundant forward decl. (pop_alignment): Add param "p" and use it to get doc urls. (enum class pack_action): Move here from within handle_pragma_pack. (class pragma_pack_parser): New. (handle_pragma_pack): Rewrite using pragma_pack_parser and enum class pack_action, eliminating uses of GCC_BAD*, rewording diagnostics. (handle_pragma_weak): Rewrite using pragma_parser, eliminating uses of GCC_BAD*, rewording diagnostics. (class pragma_scalar_storage_order_parser): New. (handle_pragma_scalar_storage_order): Rewrite using above, eliminating uses of GCC_BAD*, rewording diagnostics. (handle_pragma_redefine_extname): Rewrite using pragma_parser, eliminating uses of GCC_BAD*, rewording diagnostics. Fix overlong line. (handle_pragma_visibility): Remove redundant forward decl. (push_visibility): Add "const pragma_parser *" param. Rewrite to eliminate uses of GCC_BAD*. Add note that warning was ignored. (handle_pragma_visibility): Rewrite using pragma_parser, eliminating uses of GCC_BAD*, rewording diagnostics. (handle_pragma_target): Fix name of pragma in "error". Eliminate uses of GCC_BAD*. (handle_pragma_optimize): Eliminate uses of GCC_BAD. (handle_pragma_message): Rewrite using pragma_parser, eliminating uses of GCC_BAD*, rewording diagnostics. * c-pragma.h (class pragma_parser): New forward decl. (push_visibility): Add optional "const pragma_parser *" param. gcc/testsuite/ChangeLog: * c-c++-common/pragma-message-parsing.c: New test. * c-c++-common/pragma-optimize-parsing.c: New test. * c-c++-common/pragma-pack-parsing-1.c: New test. * c-c++-common/pragma-pack-parsing-2.c: New test. * c-c++-common/pragma-redefine_extname-parsing.c: New test. * c-c++-common/pragma-target-parsing.c: New test. * c-c++-common/pragma-visibility-parsing.c: New test. * c-c++-common/pragma-weak-parsing.c: New test. * gcc.dg/bad-pragma-locations.c: Update for changes to wording and location of -Wpragmas. * gcc.dg/pragma-scalar_storate_order-parsing.c: New test. * gcc.dg/sso-6.c: Update for changes to wording of -Wpragmas. --- gcc/c-family/c-pragma.cc | 569 ++++++++++++++---- gcc/c-family/c-pragma.h | 5 +- .../c-c++-common/pragma-message-parsing.c | 21 + .../c-c++-common/pragma-optimize-parsing.c | 16 + .../c-c++-common/pragma-pack-parsing-1.c | 19 + .../c-c++-common/pragma-pack-parsing-2.c | 4 + .../pragma-redefine_extname-parsing.c | 9 + .../c-c++-common/pragma-target-parsing.c | 14 + .../c-c++-common/pragma-visibility-parsing.c | 13 + .../c-c++-common/pragma-weak-parsing.c | 24 + gcc/testsuite/gcc.dg/bad-pragma-locations.c | 22 +- .../pragma-scalar_storate_order-parsing.c | 8 + gcc/testsuite/gcc.dg/sso-6.c | 2 +- 13 files changed, 588 insertions(+), 138 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/pragma-message-parsing.c create mode 100644 gcc/testsuite/c-c++-common/pragma-optimize-parsing.c create mode 100644 gcc/testsuite/c-c++-common/pragma-pack-parsing-1.c create mode 100644 gcc/testsuite/c-c++-common/pragma-pack-parsing-2.c create mode 100644 gcc/testsuite/c-c++-common/pragma-redefine_extname-parsing.c create mode 100644 gcc/testsuite/c-c++-common/pragma-target-parsing.c create mode 100644 gcc/testsuite/c-c++-common/pragma-visibility-parsing.c create mode 100644 gcc/testsuite/c-c++-common/pragma-weak-parsing.c create mode 100644 gcc/testsuite/gcc.dg/pragma-scalar_storate_order-parsing.c diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc index df3e3e6b3b0..6df8683af77 100644 --- a/gcc/c-family/c-pragma.cc +++ b/gcc/c-family/c-pragma.cc @@ -35,14 +35,161 @@ along with GCC; see the file COPYING3. If not see #include "plugin.h" #include "opt-suggestions.h" -#define GCC_BAD(gmsgid) \ - do { warning (OPT_Wpragmas, gmsgid); return; } while (0) -#define GCC_BAD2(gmsgid, arg) \ - do { warning (OPT_Wpragmas, gmsgid, arg); return; } while (0) -#define GCC_BAD_AT(loc, gmsgid) \ - do { warning_at (loc, OPT_Wpragmas, gmsgid); return; } while (0) -#define GCC_BAD2_AT(loc, gmsgid, arg) \ - do { warning_at (loc, OPT_Wpragmas, gmsgid, arg); return; } while (0) +label_text +get_doc_url (const char *doc_url_suffix) +{ + if (!doc_url_suffix) + return label_text (); + return label_text::take (concat (DOCUMENTATION_ROOT_URL, + doc_url_suffix, + nullptr)); +} + +/* A class for implementing parsing within pragma-handling callbacks. + Provides various wrappers around pragma_lex. */ + +class pragma_parser +{ +public: + pragma_parser (const char *space, const char *name, + const char *doc_url_suffix) + : m_start_loc (input_location), + m_space (space), + m_name (name), + m_doc_url_suffix (doc_url_suffix), + m_last_loc (m_start_loc) + { + // SPACE can be null. + gcc_assert (name); + // DOC_URL_SUFFIX can be null + } + + location_t + get_last_location () const + { + return m_last_loc; + } + + bool + require_token (enum cpp_ttype required_ttype, const char *desc) + { + tree x = NULL_TREE; + + enum cpp_ttype ttype = pragma_lex (&x, &m_last_loc); + if (ttype != required_ttype) + { + label_text doc_url (get_doc_url ()); + if (m_space) + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma %s %s%}%>:" + " expected %qs", + doc_url.get (), m_space, m_name, + desc); + else + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma %s%}%>:" + " expected %qs", + doc_url.get (), m_name, + desc); + return false; + } + return true; + } + + bool + require_open_paren () + { + return require_token (CPP_OPEN_PAREN, "("); + } + + bool + require_close_paren () + { + return require_token (CPP_CLOSE_PAREN, ")"); + } + + tree require_name () + { + tree x = NULL_TREE; + + enum cpp_ttype ttype = pragma_lex (&x, &m_last_loc); + if (ttype != CPP_NAME) + { + label_text doc_url (get_doc_url ()); + if (m_space) + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma %s %s%}%>:" + "expected name", + doc_url.get (), m_space, m_name); + else + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma %s%}%>:" + " expected name", + doc_url.get (), m_name); + return NULL_TREE; + } + + return x; + } + + tree require_symbol_name () + { + tree x = NULL_TREE; + + enum cpp_ttype ttype = pragma_lex (&x, &m_last_loc); + if (ttype != CPP_NAME) + { + label_text doc_url (get_doc_url ()); + if (m_space) + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma %s %s%}%>:" + " expected symbol name", + doc_url.get (), m_space, m_name); + else + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma %s%}%>:" + " expected symbol name", + doc_url.get (), m_name); + return NULL_TREE; + } + + return x; + } + + void + check_for_trailing_junk () + { + tree x = NULL_TREE; + enum cpp_ttype t = pragma_lex (&x, &m_last_loc); + warn_about_any_trailing_junk (t, m_last_loc); + } + + void + warn_about_any_trailing_junk (enum cpp_ttype t, location_t loc) const + { + if (t == CPP_EOF) + return; + label_text doc_url (get_doc_url ()); + if (m_space) + warning_at (loc, OPT_Wpragmas, "junk at end of %<%{#pragma %s %s%}%>", + doc_url.get (), m_space, m_name); + else + warning_at (loc, OPT_Wpragmas, "junk at end of %<%{#pragma %s%}%>", + doc_url.get (), m_name); + } + + label_text + get_doc_url () const + { + return ::get_doc_url (m_doc_url_suffix); + } + + const location_t m_start_loc; + const char *const m_space; + const char *const m_name; + const char *m_doc_url_suffix; + location_t m_last_loc; +}; struct GTY(()) align_stack { int alignment; @@ -52,8 +199,6 @@ struct GTY(()) align_stack { static GTY(()) struct align_stack * alignment_stack; -static void handle_pragma_pack (cpp_reader *); - /* If we have a "global" #pragma pack() in effect when the first #pragma pack(push,) is encountered, this stores the value of maximum_field_alignment in effect. When the final pop_alignment() @@ -65,7 +210,7 @@ static int default_alignment; : &alignment_stack->alignment) = (ALIGN)) static void push_alignment (int, tree); -static void pop_alignment (tree); +static void pop_alignment (tree, const pragma_parser &p); /* Push an alignment value onto the stack. */ static void @@ -90,13 +235,19 @@ push_alignment (int alignment, tree id) /* Undo a push of an alignment onto the stack. */ static void -pop_alignment (tree id) +pop_alignment (tree id, const pragma_parser &p) { align_stack * entry; if (alignment_stack == NULL) - GCC_BAD ("%<#pragma pack (pop)%> encountered without matching " - "%<#pragma pack (push)%>"); + { + label_text doc_url (p.get_doc_url ()); + warning (OPT_Wpragmas, + "%<%{#pragma pack (pop)%}%> encountered without matching " + "%<%{#pragma pack (push)%}%>", + doc_url.get (), doc_url.get ()); + return; + } /* If we got an identifier, strip away everything above the target entry so that the next step will restore the state just below it. */ @@ -109,10 +260,12 @@ pop_alignment (tree id) break; } if (entry == NULL) - warning (OPT_Wpragmas, - "%<#pragma pack(pop, %E)%> encountered without matching " - "%<#pragma pack(push, %E)%>" - , id, id); + { + warning (OPT_Wpragmas, + "%<#pragma pack(pop, %E)%> encountered without matching " + "%<#pragma pack(push, %E)%>", + id, id); + } } entry = alignment_stack->prev; @@ -122,6 +275,41 @@ pop_alignment (tree id) alignment_stack = entry; } +enum class pack_action { set, push, pop }; + +class pragma_pack_parser : public pragma_parser +{ +public: + pragma_pack_parser () + : pragma_parser (nullptr, "pack", "gcc/Structure-Layout-Pragmas.html") + { + } + + bool require_integer (tree x, location_t loc) const + { + if (TREE_CODE (x) == INTEGER_CST) + return true; + + label_text doc_url (get_doc_url ()); + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma pack%}%>:" + " invalid constant", + doc_url.get ()); + return false; + } + + void complain_about_malformed_action (pack_action action) const + { + label_text doc_url (get_doc_url ()); + if (action != pack_action::pop) + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<#pragma pack(push[, id][, ])%>"); + else + warning_at (m_last_loc, OPT_Wpragmas, + "ignoring malformed %<#pragma pack(pop[, id])%>"); + } +}; + /* #pragma pack () #pragma pack (N) @@ -134,46 +322,50 @@ pop_alignment (tree id) static void handle_pragma_pack (cpp_reader *) { + pragma_pack_parser p; + location_t loc; tree x, id = 0; int align = -1; + location_t align_loc = input_location; enum cpp_ttype token; - enum { set, push, pop } action; + enum pack_action action; - if (pragma_lex (&x) != CPP_OPEN_PAREN) - GCC_BAD ("missing %<(%> after %<#pragma pack%> - ignored"); + if (!p.require_open_paren ()) + return; token = pragma_lex (&x, &loc); if (token == CPP_CLOSE_PAREN) { - action = set; + action = pack_action::set; align = initial_max_fld_align; } else if (token == CPP_NUMBER) { - if (TREE_CODE (x) != INTEGER_CST) - GCC_BAD_AT (loc, "invalid constant in %<#pragma pack%> - ignored"); + if (!p.require_integer (x, loc)) + return; align = TREE_INT_CST_LOW (x); - action = set; - if (pragma_lex (&x) != CPP_CLOSE_PAREN) - GCC_BAD ("malformed %<#pragma pack%> - ignored"); + align_loc = loc; + action = pack_action::set; + if (!p.require_close_paren ()) + return; } else if (token == CPP_NAME) { -#define GCC_BAD_ACTION do { if (action != pop) \ - GCC_BAD ("malformed %<#pragma pack(push[, id][, ])%> - ignored"); \ - else \ - GCC_BAD ("malformed %<#pragma pack(pop[, id])%> - ignored"); \ - } while (0) - const char *op = IDENTIFIER_POINTER (x); if (!strcmp (op, "push")) - action = push; + action = pack_action::push; else if (!strcmp (op, "pop")) - action = pop; + action = pack_action::pop; else - GCC_BAD2_AT (loc, "unknown action %qE for %<#pragma pack%> - ignored", - x); + { + label_text doc_url (p.get_doc_url ()); + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma pack%}%>:" + " unknown action %qE", + doc_url.get (), x); + return; + } while ((token = pragma_lex (&x)) == CPP_COMMA) { @@ -182,33 +374,56 @@ handle_pragma_pack (cpp_reader *) { id = x; } - else if (token == CPP_NUMBER && action == push && align == -1) + else if (token == CPP_NUMBER + && action == pack_action::push + && align == -1) { - if (TREE_CODE (x) != INTEGER_CST) - GCC_BAD_AT (loc, - "invalid constant in %<#pragma pack%> - ignored"); + if (!p.require_integer (x, loc)) + return; align = TREE_INT_CST_LOW (x); + align_loc = loc; if (align == -1) - action = set; + action = pack_action::set; } else - GCC_BAD_ACTION; + { + p.complain_about_malformed_action (action); + return; + } } if (token != CPP_CLOSE_PAREN) - GCC_BAD_ACTION; -#undef GCC_BAD_ACTION + { + p.complain_about_malformed_action (action); + return; + } } else - GCC_BAD ("malformed %<#pragma pack%> - ignored"); + { + label_text doc_url (p.get_doc_url ()); + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma pack%}%>:" + " expected %<)%>, integer, %, or %", + doc_url.get ()); + return; + } if (pragma_lex (&x, &loc) != CPP_EOF) warning_at (loc, OPT_Wpragmas, "junk at end of %<#pragma pack%>"); if (flag_pack_struct) - GCC_BAD ("%<#pragma pack%> has no effect with %<-fpack-struct%> - ignored"); + { + label_text pragma_doc_url (p.get_doc_url ()); + label_text option_doc_url + (get_doc_url ("gcc/Code-Gen-Options.html#index-fpack-struct")); + warning (OPT_Wpragmas, + "%<%{#pragma pack%}%> has no effect with %<%{-fpack-struct%}%>" + " - ignored", + pragma_doc_url.get (), option_doc_url.get ()); + return; + } - if (action != pop) + if (action != pack_action::pop) switch (align) { case 0: @@ -220,21 +435,28 @@ handle_pragma_pack (cpp_reader *) align *= BITS_PER_UNIT; break; case -1: - if (action == push) + if (action == pack_action::push) { align = maximum_field_alignment; break; } /* FALLTHRU */ default: - GCC_BAD2 ("alignment must be a small power of two, not %d", align); + { + label_text doc_url (p.get_doc_url ()); + warning_at (align_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma pack%}%>:" + " alignment must be a small power of two, not %d", + doc_url.get (), align); + return; + } } switch (action) { - case set: SET_GLOBAL_ALIGNMENT (align); break; - case push: push_alignment (align, id); break; - case pop: pop_alignment (id); break; + case pack_action::set: SET_GLOBAL_ALIGNMENT (align); break; + case pack_action::push: push_alignment (align, id); break; + case pack_action::pop: pop_alignment (id, p); break; } } @@ -357,29 +579,46 @@ maybe_apply_pending_pragma_weaks (void) static void handle_pragma_weak (cpp_reader *) { - tree name, value, x, decl; + pragma_parser p (nullptr, "weak", "gcc/Weak-Pragmas.html"); + + tree x, decl; enum cpp_ttype t; + location_t loc; + location_t name_loc; - value = 0; + tree name = p.require_name (); + if (!name) + return; + name_loc = p.get_last_location (); - if (pragma_lex (&name) != CPP_NAME) - GCC_BAD ("malformed %<#pragma weak%>, ignored"); - t = pragma_lex (&x); + tree value = NULL_TREE; + t = pragma_lex (&x, &loc); if (t == CPP_EQ) { - if (pragma_lex (&value) != CPP_NAME) - GCC_BAD ("malformed %<#pragma weak%>, ignored"); - t = pragma_lex (&x); + value = p.require_name (); + if (!value) + return; + t = pragma_lex (&x, &loc); } - if (t != CPP_EOF) - warning (OPT_Wpragmas, "junk at end of %<#pragma weak%>"); + p.warn_about_any_trailing_junk (t, loc); decl = identifier_global_value (name); if (decl && DECL_P (decl)) { if (!VAR_OR_FUNCTION_DECL_P (decl)) - GCC_BAD2 ("%<#pragma weak%> declaration of %q+D not allowed," - " ignored", decl); + { + auto_diagnostic_group d; + label_text doc_url (p.get_doc_url ()); + if (warning_at (name_loc, OPT_Wpragmas, + "%<%{#pragma weak%}%> declaration of %qD not allowed," + " ignored", + doc_url.get (), decl)) + if (DECL_SOURCE_LOCATION (decl) != UNKNOWN_LOCATION) + inform (DECL_SOURCE_LOCATION (decl), + "%qD is not a variable or function", + decl); + return; + } apply_pragma_weak (decl, value); if (value) { @@ -417,12 +656,29 @@ maybe_apply_pragma_scalar_storage_order (tree type) gcc_unreachable (); } +class pragma_scalar_storage_order_parser : public pragma_parser +{ +public: + pragma_scalar_storage_order_parser () + : pragma_parser (nullptr, "scalar_storage_order", + "gcc/Structure-Layout-Pragmas.html") + { + } + + void complain_about_arg (location_t arg_loc) const + { + label_text doc_url (get_doc_url ()); + warning_at (arg_loc, OPT_Wpragmas, + "ignoring malformed %<%{#pragma scalar_storage_order%}%>:" + " expected %, %, or %", + doc_url.get ()); + } +}; + static void handle_pragma_scalar_storage_order (cpp_reader *) { - const char *kind_string; - enum cpp_ttype token; - tree x; + pragma_scalar_storage_order_parser p; if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN) { @@ -439,11 +695,15 @@ handle_pragma_scalar_storage_order (cpp_reader *) return; } - token = pragma_lex (&x); + tree x; + location_t arg_loc; + enum cpp_ttype token = pragma_lex (&x, &arg_loc); if (token != CPP_NAME) - GCC_BAD ("missing %, %, or % after " - "%<#pragma scalar_storage_order%>"); - kind_string = IDENTIFIER_POINTER (x); + { + p.complain_about_arg (arg_loc); + return; + } + const char *kind_string = IDENTIFIER_POINTER (x); if (strcmp (kind_string, "default") == 0) global_sso = default_sso; else if (strcmp (kind_string, "big") == 0) @@ -451,8 +711,7 @@ handle_pragma_scalar_storage_order (cpp_reader *) else if (strcmp (kind_string, "little") == 0) global_sso = SSO_LITTLE_ENDIAN; else - GCC_BAD ("expected %, %, or % after " - "%<#pragma scalar_storage_order%>"); + p.complain_about_arg (arg_loc); } /* GCC supports two #pragma directives for renaming the external @@ -501,20 +760,19 @@ static void handle_pragma_redefine_extname (cpp_reader *); static void handle_pragma_redefine_extname (cpp_reader *) { - tree oldname, newname, decls, x; - enum cpp_ttype t; - bool found; - - if (pragma_lex (&oldname) != CPP_NAME) - GCC_BAD ("malformed %<#pragma redefine_extname%>, ignored"); - if (pragma_lex (&newname) != CPP_NAME) - GCC_BAD ("malformed %<#pragma redefine_extname%>, ignored"); - t = pragma_lex (&x); - if (t != CPP_EOF) - warning (OPT_Wpragmas, "junk at end of %<#pragma redefine_extname%>"); - - found = false; - for (decls = c_linkage_bindings (oldname); + pragma_parser p (nullptr, "redefine_extname", + "gcc/Symbol-Renaming-Pragmas.html"); + + tree oldname = p.require_symbol_name (); + if (!oldname) + return; + tree newname = p.require_symbol_name (); + if (!newname) + return; + p.check_for_trailing_junk (); + + bool found = false; + for (tree decls = c_linkage_bindings (oldname); decls; ) { tree decl; @@ -535,7 +793,8 @@ handle_pragma_redefine_extname (cpp_reader *) found = true; if (DECL_ASSEMBLER_NAME_SET_P (decl)) { - const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); + const char *name + = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); name = targetm.strip_name_encoding (name); if (!id_equal (newname, name)) @@ -671,8 +930,6 @@ maybe_apply_renaming_pragma (tree decl, tree asmname) } -static void handle_pragma_visibility (cpp_reader *); - static vec visstack; /* Push the visibility indicated by STR onto the top of the #pragma @@ -683,7 +940,7 @@ static vec visstack; KIND and pop using a different one. */ void -push_visibility (const char *str, int kind) +push_visibility (const char *str, int kind, const pragma_parser *p) { visstack.safe_push (((int) default_visibility) | (kind << 8)); if (!strcmp (str, "default")) @@ -695,8 +952,23 @@ push_visibility (const char *str, int kind) else if (!strcmp (str, "protected")) default_visibility = VISIBILITY_PROTECTED; else - GCC_BAD ("%<#pragma GCC visibility push()%> must specify %, " - "%, % or %"); + { + auto_diagnostic_group d; + location_t loc = p ? p->get_last_location () : input_location; + if (warning_at (loc, + OPT_Wpragmas, + "%<#pragma GCC visibility push()%> must specify" + " %, %, %" + " or %")) + if (p) + { + label_text doc_url (p->get_doc_url ()); + inform (loc, + "ignoring malformed %<%{#pragma GCC visibility%}%>", + doc_url.get ()); + } + return; + } visibility_options.inpragma = 1; } @@ -723,6 +995,8 @@ pop_visibility (int kind) static void handle_pragma_visibility (cpp_reader *) { + pragma_parser p ("GCC", "visibility", "gcc/Visibility-Pragmas.html"); + /* Form is #pragma GCC visibility push(hidden)|pop */ tree x; enum cpp_ttype token; @@ -738,30 +1012,41 @@ handle_pragma_visibility (cpp_reader *) action = pop; } if (bad == action) - GCC_BAD ("%<#pragma GCC visibility%> must be followed by % " - "or %"); + { + label_text doc_url (p.get_doc_url ()); + warning (OPT_Wpragmas, + "%<%{#pragma GCC visibility%}%> must be followed by % " + "or %", + doc_url.get ()); + return; + } else { if (pop == action) { if (! pop_visibility (0)) - GCC_BAD ("no matching push for %<#pragma GCC visibility pop%>"); + { + label_text doc_url (p.get_doc_url ()); + warning (OPT_Wpragmas, + "no matching push for" + " %<%{#pragma GCC visibility pop%}%>", + doc_url.get ()); + return; + } } else { - if (pragma_lex (&x) != CPP_OPEN_PAREN) - GCC_BAD ("missing %<(%> after %<#pragma GCC visibility push%> - ignored"); - token = pragma_lex (&x); - if (token != CPP_NAME) - GCC_BAD ("malformed %<#pragma GCC visibility push%>"); - else - push_visibility (IDENTIFIER_POINTER (x), 0); - if (pragma_lex (&x) != CPP_CLOSE_PAREN) - GCC_BAD ("missing %<(%> after %<#pragma GCC visibility push%> - ignored"); + if (!p.require_open_paren ()) + return; + x = p.require_name (); + if (!x) + return; + push_visibility (IDENTIFIER_POINTER (x), 0, &p); + if (!p.require_close_paren ()) + return; } } - if (pragma_lex (&x) != CPP_EOF) - warning (OPT_Wpragmas, "junk at end of %<#pragma GCC visibility%>"); + p.check_for_trailing_junk (); } /* Helper routines for parsing #pragma GCC diagnostic. */ @@ -1051,7 +1336,7 @@ handle_pragma_target(cpp_reader *) if (cfun) { - error ("%<#pragma GCC option%> is not allowed inside functions"); + error ("%<#pragma GCC target option%> is not allowed inside functions"); return; } @@ -1063,7 +1348,12 @@ handle_pragma_target(cpp_reader *) } if (token != CPP_STRING) - GCC_BAD_AT (loc, "%<#pragma GCC option%> is not a string"); + { + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<#pragma GCC target%>:" + " expected a string option"); + return; + } /* Strings are user options. */ else @@ -1088,8 +1378,12 @@ handle_pragma_target(cpp_reader *) if (token == CPP_CLOSE_PAREN) token = pragma_lex (&x); else - GCC_BAD ("%<#pragma GCC target (string [,string]...)%> does " - "not have a final %<)%>"); + { + warning (OPT_Wpragmas, + "%<#pragma GCC target (string [,string]...)%> does " + "not have a final %<)%>"); + return; + } } if (token != CPP_EOF) @@ -1135,7 +1429,11 @@ handle_pragma_optimize (cpp_reader *) } if (token != CPP_STRING && token != CPP_NUMBER) - GCC_BAD ("%<#pragma GCC optimize%> is not a string or number"); + { + warning (OPT_Wpragmas, + "%<#pragma GCC optimize%> is not a string or number"); + return; + } /* Strings/numbers are user options. */ else @@ -1159,8 +1457,12 @@ handle_pragma_optimize (cpp_reader *) if (token == CPP_CLOSE_PAREN) token = pragma_lex (&x); else - GCC_BAD ("%<#pragma GCC optimize (string [,string]...)%> does " - "not have a final %<)%>"); + { + warning (OPT_Wpragmas, + "%<#pragma GCC optimize (string [,string]...)%> does " + "not have a final %<)%>"); + return; + } } if (token != CPP_EOF) @@ -1336,33 +1638,50 @@ handle_pragma_reset_options (cpp_reader *) static void handle_pragma_message (cpp_reader *) { + pragma_parser p (nullptr, "message", "gcc/Diagnostic-Pragmas.html"); + location_t loc; enum cpp_ttype token; tree x, message = 0; - token = pragma_lex (&x); + token = pragma_lex (&x, &loc); if (token == CPP_OPEN_PAREN) { - token = pragma_lex (&x); + token = pragma_lex (&x, &loc); if (token == CPP_STRING) message = x; else - GCC_BAD ("expected a string after %<#pragma message%>"); - if (pragma_lex (&x) != CPP_CLOSE_PAREN) - GCC_BAD ("malformed %<#pragma message%>, ignored"); + { + label_text doc_url (p.get_doc_url ()); + warning_at (loc, OPT_Wpragmas, + "expected a string after %<%{#pragma message%}%>", + doc_url.get ()); + return; + } + if (!p.require_close_paren ()) + return; } else if (token == CPP_STRING) message = x; else if (token == CPP_STRING_USERDEF) - GCC_BAD ("string literal with user-defined suffix is invalid in this " - "context"); + { + warning_at (loc, OPT_Wpragmas, + "string literal with user-defined suffix is invalid in this " + "context"); + return; + } else - GCC_BAD ("expected a string after %<#pragma message%>"); + { + label_text doc_url (p.get_doc_url ()); + warning_at (loc, OPT_Wpragmas, + "expected a string after %<%{#pragma message%}%>", + doc_url.get ()); + return; + } gcc_assert (message); - if (pragma_lex (&x, &loc) != CPP_EOF) - warning_at (loc, OPT_Wpragmas, "junk at end of %<#pragma message%>"); + p.check_for_trailing_junk (); if (TREE_STRING_LENGTH (message) > 1) inform (input_location, "%<#pragma message: %s%>", diff --git a/gcc/c-family/c-pragma.h b/gcc/c-family/c-pragma.h index 682157a4517..abaf897d84d 100644 --- a/gcc/c-family/c-pragma.h +++ b/gcc/c-family/c-pragma.h @@ -203,10 +203,13 @@ enum pragma_omp_clause { extern struct cpp_reader* parse_in; +class pragma_parser; + /* It's safe to always leave visibility pragma enabled as if visibility is not supported on the host OS platform the statements are ignored. */ -extern void push_visibility (const char *, int); +extern void push_visibility (const char *, int, + const pragma_parser *p = nullptr); extern bool pop_visibility (int); extern void init_pragma (void); diff --git a/gcc/testsuite/c-c++-common/pragma-message-parsing.c b/gcc/testsuite/c-c++-common/pragma-message-parsing.c new file mode 100644 index 00000000000..4acb9d16c51 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-message-parsing.c @@ -0,0 +1,21 @@ +/* Test that we provide good warnings for malformed '#pragma message'. */ + +#pragma message /* { dg-line no_arg } */ +/* { dg-warning "expected a string after '#pragma message'" "" { target *-*-* } no_arg } */ + +#pragma message 1066 /* { dg-line bad_arg } */ +/* { dg-warning "17: expected a string after '#pragma message'" "" { target *-*-* } bad_arg } */ + +#pragma message "foo" /* { dg-message "#pragma message: foo" } */ + +#pragma message(1066) /* { dg-line parens_bad_arg } */ +/* { dg-warning "17: expected a string after '#pragma message'" "" { target *-*-* } parens_bad_arg } */ + +#pragma message("bar") /* { dg-message "#pragma message: bar" } */ + +#pragma message("foo") bar /* { dg-warning "24: junk at end of '#pragma message'" } */ + +#if defined(__cplusplus) && __cplusplus >= 201103L +unsigned operator ""_w(const char*); +#pragma message "foo"_w /* { dg-message "17: string literal with user-defined suffix is invalid in this context" "" { target { c++11 } } } */ +#endif diff --git a/gcc/testsuite/c-c++-common/pragma-optimize-parsing.c b/gcc/testsuite/c-c++-common/pragma-optimize-parsing.c new file mode 100644 index 00000000000..4808ce3992a --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-optimize-parsing.c @@ -0,0 +1,16 @@ +/* Test that we provide good warnings for malformed '#pragma GCC optimize'. */ + +#pragma GCC optimize /* { dg-warning "'#pragma GCC optimize' is not a string or number" } */ +#pragma GCC optimize 3 +#pragma GCC optimize( /* { dg-warning "'#pragma GCC optimize' is not a string or number" } */ +#pragma GCC optimize() /* { dg-warning "'#pragma GCC optimize' is not a string or number" } */ +#pragma GCC optimize(3, ) +#pragma GCC optimize("-O3", ) +#pragma GCC optimize(3, /* { dg-warning "'#pragma GCC optimize \\(string \\\[,string\\\]...\\)' does not have a final '\\)'" } */ + +void foo () +{ +#pragma GCC optimize /* { dg-error "#pragma GCC optimize' is not allowed inside functions" } */ +} + +#pragma GCC optimize("-Ofan-noise", ) /* { dg-error "argument to '-O' should be a non-negative integer, 'g', 's', 'z' or 'fast'" } */ diff --git a/gcc/testsuite/c-c++-common/pragma-pack-parsing-1.c b/gcc/testsuite/c-c++-common/pragma-pack-parsing-1.c new file mode 100644 index 00000000000..0e3d806388a --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-pack-parsing-1.c @@ -0,0 +1,19 @@ +/* Test that we provide good warnings for malformed '#pragma pack'. */ + +#pragma pack /* { dg-warning "ignoring malformed '#pragma pack': expected '\\('" } */ + +#pragma pack 42 /* { dg-warning "14: ignoring malformed '#pragma pack': expected '\\('" } */ + +#pragma pack(3.141) /* { dg-warning "14: ignoring malformed '#pragma pack': invalid constant" } */ + +#pragma pack(( /* { dg-warning "14: ignoring malformed '#pragma pack': expected '\\)', integer, 'push', or 'pop'" } */ + +#pragma pack(42 /* { dg-warning "ignoring malformed '#pragma pack': expected '\\)'" } */ + +#pragma pack(42) /* { dg-warning "14: ignoring malformed '#pragma pack': alignment must be a small power of two, not 42" } */ + +#pragma pack(foo /* { dg-warning "14: ignoring malformed '#pragma pack': unknown action 'foo'" } */ + +#pragma pack(push, 3.141 /* { dg-warning "20: ignoring malformed '#pragma pack': invalid constant" } */ + +#pragma pack(push, 42) /* { dg-warning "20: ignoring malformed '#pragma pack': alignment must be a small power of two, not 42" } */ diff --git a/gcc/testsuite/c-c++-common/pragma-pack-parsing-2.c b/gcc/testsuite/c-c++-common/pragma-pack-parsing-2.c new file mode 100644 index 00000000000..efca44e8734 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-pack-parsing-2.c @@ -0,0 +1,4 @@ +/* Test that we provide good warnings for malformed '#pragma pack'. */ +/* { dg-options "-fpack-struct" } */ + +#pragma pack(16) /* { dg-warning "'#pragma pack' has no effect with '-fpack-struct' - ignored" } */ diff --git a/gcc/testsuite/c-c++-common/pragma-redefine_extname-parsing.c b/gcc/testsuite/c-c++-common/pragma-redefine_extname-parsing.c new file mode 100644 index 00000000000..19f4f1b766e --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-redefine_extname-parsing.c @@ -0,0 +1,9 @@ +/* Test that we provide good warnings for malformed '#pragma redefine_extname'. */ + +/* Missing old name. */ +#pragma redefine_extname /* { dg-warning "ignoring malformed '#pragma redefine_extname': expected symbol name" } */ +#pragma redefine_extname 42 /* { dg-warning "26: ignoring malformed '#pragma redefine_extname': expected symbol name" } */ + +/* Missing new name. */ +#pragma redefine_extname foo /* { dg-warning "ignoring malformed '#pragma redefine_extname': expected symbol name" } */ +#pragma redefine_extname foo 42 /* { dg-warning "30: ignoring malformed '#pragma redefine_extname': expected symbol name" } */ diff --git a/gcc/testsuite/c-c++-common/pragma-target-parsing.c b/gcc/testsuite/c-c++-common/pragma-target-parsing.c new file mode 100644 index 00000000000..37e331626e9 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-target-parsing.c @@ -0,0 +1,14 @@ +/* Test that we provide good warnings for malformed '#pragma target'. */ + +#pragma GCC target /* { dg-warning "ignoring malformed '#pragma GCC target': expected a string option" } */ +#pragma GCC target 1066 /* { dg-warning "ignoring malformed '#pragma GCC target': expected a string option" } */ +#pragma GCC target( /* { dg-warning "ignoring malformed '#pragma GCC target': expected a string option" } */ +#pragma GCC target() /* { dg-warning "ignoring malformed '#pragma GCC target': expected a string option" } */ +#pragma GCC target("", ) +#pragma GCC target("", /* { dg-warning "'#pragma GCC target \\(string \\\[,string\\\]...\\)' does not have a final '\\)'" } */ + +void foo () +{ +#pragma GCC target /* { dg-error "#pragma GCC target option' is not allowed inside functions" } */ + /* { dg-warning "ignoring malformed '#pragma GCC target': expected a string option" "" { target c++ } .-1 } */ +} diff --git a/gcc/testsuite/c-c++-common/pragma-visibility-parsing.c b/gcc/testsuite/c-c++-common/pragma-visibility-parsing.c new file mode 100644 index 00000000000..19ad6758b8c --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-visibility-parsing.c @@ -0,0 +1,13 @@ +/* Test that we provide good warnings for malformed '#pragma GCC visibility'. */ + +#pragma GCC visibility /* { dg-line no_action } */ +/* { dg-warning "'#pragma GCC visibility' must be followed by 'push' or 'pop'" "" { target *-*-* } no_action } */ + +#pragma GCC visibility push 1066 /* { dg-warning "29: ignoring malformed '#pragma GCC visibility': expected '\\('" } */ + +#pragma GCC visibility push(foo) /* { dg-line bad_push_arg } */ +/* { dg-warning "29: '#pragma GCC visibility push\\(\\)' must specify 'default', 'internal', 'hidden' or 'protected'" "" { target *-*-* } bad_push_arg } + { dg-message "ignoring malformed '#pragma GCC visibility'" "" { target *-*-* } bad_push_arg } */ + +#pragma GCC visibility push(default) +#pragma GCC visibility pop 1066 /* { dg-warning "28: junk at end of '#pragma GCC visibility'" } */ diff --git a/gcc/testsuite/c-c++-common/pragma-weak-parsing.c b/gcc/testsuite/c-c++-common/pragma-weak-parsing.c new file mode 100644 index 00000000000..902044a2b20 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pragma-weak-parsing.c @@ -0,0 +1,24 @@ +/* Test that we provide good warnings for malformed '#pragma weak'. */ + +int bar; + +#pragma weak /* { dg-warning "ignoring malformed '#pragma weak': expected name" } */ + +#pragma weak 42 /* { dg-warning "14: ignoring malformed '#pragma weak': expected name" } */ + +/* This should be OK. */ +#pragma weak foo + +#pragma weak foo 1066 /* { dg-warning "18: junk at end of '#pragma weak'" } */ + +#pragma weak foo = /* { dg-warning "ignoring malformed '#pragma weak': expected name" } */ + +#pragma weak foo = 1066 /* { dg-warning "20: ignoring malformed '#pragma weak': expected name" } */ + +/* This should be OK. */ +#pragma weak foo = bar + +#pragma weak foo = bar baz /* { dg-warning "24: junk at end of '#pragma weak'" } */ + +typedef int foo_t; /* { dg-message "13: 'foo_t' is not a variable or function" } */ +#pragma weak foo_t /* { dg-warning "14: '#pragma weak' declaration of 'foo_t' not allowed, ignored" } */ diff --git a/gcc/testsuite/gcc.dg/bad-pragma-locations.c b/gcc/testsuite/gcc.dg/bad-pragma-locations.c index 8068839881d..6bf821d8e2a 100644 --- a/gcc/testsuite/gcc.dg/bad-pragma-locations.c +++ b/gcc/testsuite/gcc.dg/bad-pragma-locations.c @@ -7,42 +7,42 @@ /* pack ****************************************************************************/ #pragma pack -/* { dg-warning "missing '\\(' after '#pragma pack' - ignored" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma pack': expected '\\('" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma pack - ^~~~ + ^ { dg-end-multiline-output "" } */ #pragma pack ( -/* { dg-warning "malformed '#pragma pack' - ignored" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma pack': expected '\\)', integer, 'push', or 'pop'" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma pack ( - ^~~~ + ^ { dg-end-multiline-output "" } */ #pragma pack (32 -/* { dg-warning "malformed '#pragma pack' - ignored" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma pack': expected '\\)'" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma pack (32 - ^~~~ + ^ { dg-end-multiline-output "" } */ #pragma pack (3.14159 -/* { dg-warning "invalid constant in '#pragma pack' - ignored" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma pack': invalid constant" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma pack (3.14159 ^~~~~~~ { dg-end-multiline-output "" } */ #pragma pack (push, 3.14159 -/* { dg-warning "invalid constant in '#pragma pack' - ignored" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma pack': invalid constant" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma pack (push, 3.14159 ^~~~~~~ { dg-end-multiline-output "" } */ #pragma pack (toothbrush -/* { dg-warning "unknown action 'toothbrush' for '#pragma pack' - ignored" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma pack': unknown action 'toothbrush'" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma pack (toothbrush ^~~~~~~~~~ @@ -58,14 +58,14 @@ /* target ****************************************************************************/ #pragma GCC target 42 -/* { dg-warning "#pragma GCC option' is not a string" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma GCC target': expected a string option" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma GCC target 42 ^~ { dg-end-multiline-output "" } */ #pragma GCC target ( 1776 -/* { dg-warning "#pragma GCC option' is not a string" "" { target *-*-* } .-1 } +/* { dg-warning "ignoring malformed '#pragma GCC target': expected a string option" "" { target *-*-* } .-1 } { dg-begin-multiline-output "" } #pragma GCC target ( 1776 ^~~~ diff --git a/gcc/testsuite/gcc.dg/pragma-scalar_storate_order-parsing.c b/gcc/testsuite/gcc.dg/pragma-scalar_storate_order-parsing.c new file mode 100644 index 00000000000..b20f41caba8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pragma-scalar_storate_order-parsing.c @@ -0,0 +1,8 @@ +/* Test that we provide good warnings for malformed '#pragma scalar_storage_order'. */ + +#pragma scalar_storage_order /* { dg-warning "ignoring malformed '#pragma scalar_storage_order': expected 'big-endian', 'little-endian', or 'default'" } */ +#pragma scalar_storage_order 1066 /* { dg-warning "ignoring malformed '#pragma scalar_storage_order': expected 'big-endian', 'little-endian', or 'default'" } */ +#pragma scalar_storage_order foo /* { dg-warning "ignoring malformed '#pragma scalar_storage_order': expected 'big-endian', 'little-endian', or 'default'" } */ +#pragma scalar_storage_order little-endian +#pragma scalar_storage_order big-endian +#pragma scalar_storage_order default diff --git a/gcc/testsuite/gcc.dg/sso-6.c b/gcc/testsuite/gcc.dg/sso-6.c index 559253293b5..3654ffcb847 100644 --- a/gcc/testsuite/gcc.dg/sso-6.c +++ b/gcc/testsuite/gcc.dg/sso-6.c @@ -3,7 +3,7 @@ /* { dg-do run } */ /* { dg-require-effective-target int32plus } */ -#pragma scalar_storage_order /* { dg-warning "missing .big-endian., .little-endian., or .default." } */ +#pragma scalar_storage_order /* { dg-warning "expected .big-endian., .little-endian., or .default." } */ #pragma scalar_storage_order big-endian From patchwork Thu Nov 2 13:19:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Malcolm X-Patchwork-Id: 160877 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp348339vqu; Thu, 2 Nov 2023 06:20:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHo1YgBLQMjTpzkOwtI27acBpRZY6hM4kglnc4CvkJgHL0UCfh5ZpN+z0My9TP4EipfMqXa X-Received: by 2002:a05:620a:2989:b0:775:d492:64e9 with SMTP id r9-20020a05620a298900b00775d49264e9mr21110936qkp.41.1698931248959; Thu, 02 Nov 2023 06:20:48 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698931248; cv=pass; d=google.com; s=arc-20160816; b=diqKBzvQgUeNYhXwO3wu1qafN3UiP/IouvMZo8n2FfczuDgLt4a29I4E6c58f5I3Ru ULmZokE0OEbfnuxdPN0yV3uXVFJ57HmTjlAuS7oDOZtyZJAfcaV6288Qp1gAePDq4y1Q ppq+CDFYOveCAwB53wHxPhg8neiJ2O3gUoUx0vMfeirtuWa3y+LpqPPpW+i5MN+7XyC0 l96jBgvD92QaAOkKK2HQ0kyWzYY5PEsFAZOcNWDVCvTrLoJIIyOpmMOuii1I+kiXZM5R mt/HvAE32/UUoU7tz3YZOPvf04p4OkPut71K2bifexj7akMc7QlJUbEASt+VKfSkXTOb fk6Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=4430r8dKyKQGF1u5Glr35UAtcGMZrM20VB4OosoA8dU=; fh=NXemEfxTRbZtBxUkxR2ehQUaYlcDfMdzPkO8MChVQE4=; b=BCUyQOAe8k28Gr60vy624MgW4MBe81mwXy8xAN8ZX6Ypmzi02cfLInNbBklN49aYWB wkm/3YOx22fyeN+39/QD7+iKTUd0lOmS+Hylw8XPDtkK4bBpOlTdn/+xit2k7JZcq84d TjZ3vfr0kEkHv06+6UNmaMBYTRdmGndNoPznpDwA7VnPH6Xfewng+yyTEZibgv5hbSLE w1Q5focnbtE1uUcF0sgfAgSotbtzohlqz0+GZFMn/WKchedyq5JD1yNCblqjONmsiPMp lhS1Nfb2gFAO/lcPApijFOjkcTDpOtHlFgxxKiizIt9fXfXB7GXxC8HMErr80NlyLr/b xeMw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=EnjHTlGl; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id bk30-20020a05620a1a1e00b0077438d488d2si4418931qkb.405.2023.11.02.06.20.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 06:20:48 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=EnjHTlGl; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B2B433858281 for ; Thu, 2 Nov 2023 13:20:48 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 4C5533858D37 for ; Thu, 2 Nov 2023 13:19:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4C5533858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4C5533858D37 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931190; cv=none; b=xmYJKJhRwm3FF5hNc4r5bogLYr3PWagv0YPpZItyM7xQJSGws8jPNLEIhXLYA7cfSTHjYSVlgPPfmIc7A0l+AzyRrX1NGp7iNcD+PEnMsh2TkbgswBQGFSHJB4/6EKiqs6I654hn+7bZu6/0E+Q0vqA/oCPndBFunTSgVuMtuRg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931190; c=relaxed/simple; bh=HlHjzMsxUQER/H/MxjoYbsHRkbu/YT5Fsm9qzOyOc0w=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=QyaO9KgmQaIFS/BpT7a4pEX8zMykm/AV/LlOlNoqLwjvZZxzKrnpUi4PQcwYc+31VKS+C6Tjo7iv2oWbwXm1Z7ke+kdXbvLF5UFwm7g7bPACxjha6qw6jJHJ4nyNAlHreRMUECERcoWoHVjpccXBvXfuYkwdQ8iPPFyp7DKsbD8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1698931178; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4430r8dKyKQGF1u5Glr35UAtcGMZrM20VB4OosoA8dU=; b=EnjHTlGladyLQ8ZFJiChpBpm7C507USqGfmNXMyTyFsUi4ggNAJ5GLODZKCtuvHYFdEm4L mBxe5S5rb6o4ZTTCinwy/mBnq2zYBl86LEerrFkxJHuQEQxGlYd1rID0oQPhQZ0XQTvMuo 83NnSxsuQAQaFVr/QqzgC5RQSxZcQnQ= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-131-Qvv3cnzbNPGUL5BoYwvHBQ-1; Thu, 02 Nov 2023 09:19:37 -0400 X-MC-Unique: Qvv3cnzbNPGUL5BoYwvHBQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0FAC585A58A for ; Thu, 2 Nov 2023 13:19:37 +0000 (UTC) Received: from t14s.localdomain.com (unknown [10.22.8.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id D393B1C060BA; Thu, 2 Nov 2023 13:19:36 +0000 (UTC) From: David Malcolm To: gcc-patches@gcc.gnu.org Cc: David Malcolm Subject: [PATCH 2/4] c: add #pragma GCC show_layout Date: Thu, 2 Nov 2023 09:19:31 -0400 Message-Id: <20231102131933.2161191-3-dmalcolm@redhat.com> In-Reply-To: <20231102131933.2161191-1-dmalcolm@redhat.com> References: <20231102131933.2161191-1-dmalcolm@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00, BODY_8BITS, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SCC_10_SHORT_WORD_LINES, SCC_20_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781458533503643703 X-GMAIL-MSGID: 1781458533503643703 This patch adds a new pragma to the C frontend that will make it emit a human-readable diagram of a struct's layout. For example, given this contrived usage: struct example { char foo : 7; char bar; char visible : 1; char active : 1; }; the compiler will emit output similar to the following: note: 'sizeof(struct example)' == 3; layout: ┌───────┬────┬───────────────┬─────────────────────┬─────────────────────────┬───────────────────────┐ │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼───┬───┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16 │17 │18│19│20│21│22│23│24│25│26│27│28│29│30│31│ ├───────┼────┼─┴─┴─┴─┴─┴─┴─┼─┼─┴─┴──┴──┴──┴──┴──┴──┼───┼───┼──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┘ │ 0 │ 0 │ 'foo' │*│ 'bar' │(1)│(2)│ padding │ └───────┴────┴─────────────┴─┴─────────────────────┴───┴───┴─────────────────┘ *: padding (1): 'visible' (2): 'active' The output is intended for humans, rather than scripts, and is subject to change. One wart is that it uses some analyzer internals, and thus requires GCC to have been configured without disabling the analyzer. Caveat: only tested on x86_64, and probably has some endianness and packing assumptions in the testcases. Thoughts? gcc/analyzer/ChangeLog: * record-layout.cc: Define INCLUDE_ALGORITHM and INCLUDE_VECTOR. Include "intl.h", "text-art/table.h", "text-art/widget.h", and "diagnostic-diagram.h". (class layout_diagram): New. (layout_diagram::layout_diagram): New. (layout_diagram::bit_to_table_coord): New. (layout_diagram::ensure_table_rows): New. (layout_diagram::get_string_for_item): New. (impl_show_record_layout): New. (show_record_layout): New. * record-layout.h (class layout_diagram): New forward decl. (class record_layout): Add friend class layout_diagram. gcc/c-family/ChangeLog: * c-pragma.cc: Include "stor-layout.h". (class pragma_parser_show_layout): New. (handle_pragma_show_layout): New. (init_pragma): Register it. gcc/ChangeLog: * doc/extend.texi (Other Pragmas): New subsection, with '#pragma GCC show_layout'. * stor-layout.h (show_record_layout): New decl. gcc/testsuite/ChangeLog: * gcc.dg/parsing-pragma-show_layout.c: New test. * gcc.dg/pragma-show_layout-1.c: New test. * gcc.dg/pragma-show_layout-2.c: New test. * gcc.dg/pragma-show_layout-infoleak-CVE-2017-18550.c: New test. --- gcc/analyzer/record-layout.cc | 235 ++++++++++++++++++ gcc/analyzer/record-layout.h | 4 + gcc/c-family/c-pragma.cc | 95 +++++++ gcc/doc/extend.texi | 49 ++++ gcc/stor-layout.h | 3 + .../gcc.dg/parsing-pragma-show_layout.c | 15 ++ gcc/testsuite/gcc.dg/pragma-show_layout-1.c | 12 + gcc/testsuite/gcc.dg/pragma-show_layout-2.c | 184 ++++++++++++++ ...agma-show_layout-infoleak-CVE-2017-18550.c | 175 +++++++++++++ 9 files changed, 772 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/parsing-pragma-show_layout.c create mode 100644 gcc/testsuite/gcc.dg/pragma-show_layout-1.c create mode 100644 gcc/testsuite/gcc.dg/pragma-show_layout-2.c create mode 100644 gcc/testsuite/gcc.dg/pragma-show_layout-infoleak-CVE-2017-18550.c diff --git a/gcc/analyzer/record-layout.cc b/gcc/analyzer/record-layout.cc index 1369bfb5eff..242a9895309 100644 --- a/gcc/analyzer/record-layout.cc +++ b/gcc/analyzer/record-layout.cc @@ -19,7 +19,9 @@ along with GCC; see the file COPYING3. If not see . */ #include "config.h" +#define INCLUDE_ALGORITHM #define INCLUDE_MEMORY +#define INCLUDE_VECTOR #include "system.h" #include "coretypes.h" #include "tree.h" @@ -28,8 +30,13 @@ along with GCC; see the file COPYING3. If not see #include "gimple.h" #include "diagnostic.h" #include "tree-diagnostic.h" +#include "intl.h" +#include "make-unique.h" #include "analyzer/analyzer.h" #include "analyzer/record-layout.h" +#include "text-art/table.h" +#include "text-art/widget.h" +#include "diagnostic-diagram.h" #if ENABLE_ANALYZER @@ -120,6 +127,234 @@ record_layout::maybe_pad_to (bit_offset_t next_offset) } } +class layout_diagram : public text_art::vbox_widget +{ +public: + layout_diagram (const ana::record_layout &layout, + text_art::style_manager &sm, + const text_art::theme &theme); + +private: + text_art::table::coord_t bit_to_table_coord (ana::bit_offset_t bit); + + void ensure_table_rows (text_art::style_manager &sm, + text_art::table &table, + int table_y); + + text_art::styled_string + get_string_for_item (const ana::record_layout::item &item, + text_art::style_manager &sm); + + std::vector m_footnote_fields; + bool m_has_short_padding; +}; + +layout_diagram::layout_diagram (const ana::record_layout &layout, + text_art::style_manager &sm, + const text_art::theme &theme) +: m_has_short_padding (false) +{ + using namespace text_art; + + table table (table::size_t (34, 2)); + table.set_cell (table::coord_t (0, 0), styled_string (sm, _("Offsets"))); + table.set_cell (table::coord_t (1, 0), styled_string (sm, _("Byte"))); + table.set_cell (table::coord_t (0, 1), styled_string (sm, _("Byte"))); + for (int octet = 0; octet < 4; octet++) + table.set_cell_span (table::rect_t (table::coord_t (2 + (octet * 8), 0), + table::size_t (8, 1)), + styled_string::from_fmt (sm, nullptr, "%i", octet)); + table.set_cell (table::coord_t (1, 1), styled_string (sm, _("Bit"))); + for (int bit = 0; bit < 32; bit++) + table.set_cell (table::coord_t (bit + 2, 1), + styled_string::from_fmt (sm, nullptr, "%i", bit)); + + for (auto &item : layout.m_items) + { + table::coord_t start_coord + = bit_to_table_coord (item.get_start_bit_offset ()); + table::coord_t max_coord + = bit_to_table_coord (item.get_next_bit_offset () - 1); + gcc_assert (start_coord.y <= max_coord.y); + ensure_table_rows (sm, table, max_coord.y); + styled_string content (get_string_for_item (item, sm)); + if (start_coord.y == max_coord.y) + { + table.set_cell_span + (table::rect_t (start_coord, + table::size_t (max_coord.x + 1 - start_coord.x, + 1)), + std::move (content)); + } + else + { + /* Item is split between multiple rows. */ + table::range_t full_rows (start_coord.y, max_coord.y + 1); + // Initial row + if (start_coord.x > 2) + { + table.set_cell_span + (table::rect_t (start_coord, + table::size_t (34 - start_coord.x, 1)), + get_string_for_item (item, sm)); + full_rows.start++; + } + + // Final row + if (max_coord.x < 33) + { + table.set_cell_span + (table::rect_t (table::coord_t (2, max_coord.y), + table::size_t (33 - max_coord.x, 1)), + get_string_for_item (item, sm)); + full_rows.next--; + } + + // Middle rows + if (full_rows.get_size () > 0) + table.set_cell_span + (table::rect_t (table::range_t (2, 34), + full_rows), + std::move (content)); + } + } + + /* Add a child widget for the table. */ + text_art::canvas canvas (table.to_canvas (theme, sm)); + add_child (::make_unique (std::move (canvas))); + + /* Add text child widgets for any lines with showing footnotes. */ + if (m_has_short_padding) + { + styled_string s + (styled_string::from_fmt (sm, default_tree_printer, + "*: %s", _("padding"))); + add_child (::make_unique (std::move (s))); + } + for (int i = 0; i < (int)m_footnote_fields.size (); i++) + { + tree field = m_footnote_fields[i]; + styled_string s (styled_string::from_fmt (sm, default_tree_printer, + "(%i): %qE", + i + 1, field)); + add_child (::make_unique (std::move (s))); + } +} + +text_art::table::coord_t +layout_diagram::bit_to_table_coord (bit_offset_t bit) +{ + return text_art::table::coord_t ((bit % 32).to_shwi () + 2, + (bit / 32).to_shwi () + 2); +} + +void +layout_diagram::ensure_table_rows (text_art::style_manager &sm, + text_art::table &table, + int table_y) +{ + using namespace text_art; + + while (table_y >= table.get_size ().h) + { + const int word = table.get_size ().h - 2; + table.add_row (); + table.set_cell (table::coord_t (0, word + 2), + styled_string::from_fmt (sm, nullptr, + "%i", word * 4)); + table.set_cell (table::coord_t (1, word + 2), + styled_string::from_fmt (sm, nullptr, + "%i", word * 32)); + } +} + +text_art::styled_string +layout_diagram::get_string_for_item (const ana::record_layout::item &item, + text_art::style_manager &sm) +{ + if (item.m_bit_range.m_size_in_bits > 1) + { + if (item.m_is_padding) + return text_art::styled_string (sm, _("padding")); + else + return text_art::styled_string::from_fmt + (sm, default_tree_printer, + "%qE", item.m_field); + } + else + { + /* To avoid bloating the table, for 1-bit items, add footnotes of the + form "(1)", "(2)", ... for fields, and "*" for padding. */ + if (item.m_is_padding) + { + m_has_short_padding = true; + return text_art::styled_string ('*'); + } + else + { + m_footnote_fields.push_back (item.m_field); + return text_art::styled_string::from_fmt + (sm, nullptr, "(%i)", + (int)m_footnote_fields.size ()); + } + } +} + +static void +impl_show_record_layout (location_t loc, + tree type, + tree size) +{ + gcc_assert (TREE_CODE (type) == RECORD_TYPE); + gcc_assert (size == error_mark_node + || TREE_CODE (size) == INTEGER_CST); + + const text_art::theme *theme = global_dc->m_diagrams.m_theme; + if (!theme) + { + inform (loc, "not showing layout of %qT; %qs is %qs", + type, + "-fdiagnostics-text-art-charset", "none"); + return; + } + + /* Generate canvas. */ + ana::record_layout layout (type); + text_art::style_manager sm; + ana::layout_diagram diagram (layout, sm, *theme); + text_art::canvas canvas (diagram.to_canvas (sm)); + + /* Generate alt-text. */ + pretty_printer pp; + pp_format_decoder (&pp) = default_tree_printer; + pp_show_color (&pp) = pp_show_color (global_dc->printer); + pp_printf (&pp, "Diagram showing layout of %qT", type); + + auto_diagnostic_group d; + if (size != error_mark_node) + inform (loc, "% == %E; layout:", + type, size); + else + inform (loc, "layout of %qT", type); + diagnostic_emit_diagram (global_dc, + diagnostic_diagram (canvas, + pp_formatted_text (&pp))); +} + } // namespace ana #endif /* #if ENABLE_ANALYZER */ + +void +show_record_layout (location_t loc ATTRIBUTE_UNUSED, + tree type ATTRIBUTE_UNUSED, + tree size ATTRIBUTE_UNUSED) +{ + gcc_assert (TREE_CODE (type) == RECORD_TYPE); + +#if ENABLE_ANALYZER + ana::impl_show_record_layout (loc, type, size); +#else + sorry_no_analyzer (); +#endif /* #if ENABLE_ANALYZER */ +} diff --git a/gcc/analyzer/record-layout.h b/gcc/analyzer/record-layout.h index b63e7b00e48..de5426dd23c 100644 --- a/gcc/analyzer/record-layout.h +++ b/gcc/analyzer/record-layout.h @@ -25,12 +25,16 @@ along with GCC; see the file COPYING3. If not see namespace ana { +class layout_diagram; + /* Information of the layout of a RECORD_TYPE, capturing it as a vector of items, where each item is either a field or padding. */ class record_layout { public: + friend class layout_diagram; + /* An item within a record; either a field, or padding after a field. */ struct item { diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc index 6df8683af77..904a1fcd55d 100644 --- a/gcc/c-family/c-pragma.cc +++ b/gcc/c-family/c-pragma.cc @@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see #include "opts.h" #include "plugin.h" #include "opt-suggestions.h" +#include "stor-layout.h" label_text get_doc_url (const char *doc_url_suffix) @@ -1688,6 +1689,98 @@ handle_pragma_message (cpp_reader *) TREE_STRING_POINTER (message)); } +/* Subclass of pragma_parser for use when parsing '#pragma GCC show_layout'. */ + +class pragma_parser_show_layout : public pragma_parser +{ +public: + pragma_parser_show_layout () + : pragma_parser ("GCC", "show_layout", nullptr) + { + } + + bool require_id (const char *str) + { + location_t loc = UNKNOWN_LOCATION; + tree x = NULL_TREE; + + enum cpp_ttype ttype = pragma_lex (&x, &loc); + if (ttype != CPP_NAME + || strcmp (IDENTIFIER_POINTER (x), str)) + { + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<#pragma GCC show_layout%>:" + " expected %qs", str); + return false; + } + return true; + } + + tree require_struct_tag () + { + location_t loc = UNKNOWN_LOCATION; + tree tag = NULL_TREE; + + enum cpp_ttype ttype = pragma_lex (&tag, &loc); + if (ttype != CPP_NAME) + { + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<#pragma GCC show_layout%>:" + " expected struct tag"); + return NULL_TREE; + } + + tree type = identifier_global_tag (tag); + if (type == NULL_TREE) + { + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<#pragma GCC show_layout%>:" + " unknown struct tag %qs", + IDENTIFIER_POINTER (tag)); + return NULL_TREE; + } + if (TREE_CODE (type) != RECORD_TYPE) + { + warning_at (loc, OPT_Wpragmas, + "ignoring malformed %<#pragma GCC show_layout%>:" + " expected struct tag"); + return NULL_TREE; + } + + return type; + } +}; + +/* Handler for '#pragma GCC show_layout'. */ + +static void +handle_pragma_show_layout (cpp_reader *) +{ + pragma_parser_show_layout p; + + if (c_dialect_cxx ()) + { + if (warn_unknown_pragmas > in_system_header_at (input_location)) + warning (OPT_Wunknown_pragmas, + "%<#pragma GCC show_layout%> is not supported for C++"); + return; + } + + if (!p.require_open_paren ()) + return; + if (!p.require_id ("struct")) + return; + tree type = p.require_struct_tag (); + if (!type) + return; + if (!p.require_close_paren ()) + return; + gcc_assert (TREE_CODE (type) == RECORD_TYPE); + + tree size = c_sizeof_or_alignof_type (input_location, type, true, false, 0); + show_record_layout (input_location, type, size); +} + /* Ignore a no-op pragma that GCC recognizes, but which has no effect. */ static void handle_pragma_ignore (cpp_reader *) @@ -2201,6 +2294,8 @@ init_pragma (void) c_register_pragma (0, "scalar_storage_order", handle_pragma_scalar_storage_order); + c_register_pragma ("GCC", "show_layout", handle_pragma_show_layout); + /* Allow plugins to register their own pragmas. */ invoke_plugin_callbacks (PLUGIN_PRAGMAS, NULL); } diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index cf0d0c63cce..ea499951caf 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -24376,6 +24376,7 @@ information. * Push/Pop Macro Pragmas:: * Function Specific Option Pragmas:: * Loop-Specific Pragmas:: +* Other Pragmas:: @end menu @node AArch64 Pragmas @@ -25001,6 +25002,54 @@ The values of @math{0} and @math{1} block any unrolling of the loop. @end table +@node Other Pragmas +@subsection Other Pragmas + +@table @code +@cindex pragma GCC show_layout +@item #pragma GCC show_layout + +With this pragma, the compiler will emit a diagram showing the in-memory +layout of a particular @code{struct}, with the relative locations and sizes +of fields and of padding. + +For example, given this contrived usage: + +@smallexample +struct example @{ + char foo : 7; + char bar; + char visible : 1; + char active : 1; +@}; +#pragma GCC show_layout(struct example) +@end smallexample + +the compiler will emit output similar to the following: + +@smallexample +note: 'sizeof(struct example)' == 3; layout: + + ┌───────┬────┬───────────────┬─────────────────────┬─────────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼───┬───┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16 │17 │18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼─┴─┴─┴─┴─┴─┴─┼─┼─┴─┴──┴──┴──┴──┴──┴──┼───┼───┼──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┘ + │ 0 │ 0 │ 'foo' │*│ 'bar' │(1)│(2)│ padding │ + └───────┴────┴─────────────┴─┴─────────────────────┴───┴───┴─────────────────┘ + *: padding + (1): 'visible' + (2): 'active' +@end smallexample + +The output is intended for humans, rather than scripts, and is +subject to change. + +This pragma is not available from C++. It is also not available when GCC +has been configured without support for the analyzer. + +@end table + @node Unnamed Fields @section Unnamed Structure and Union Fields @cindex @code{struct} diff --git a/gcc/stor-layout.h b/gcc/stor-layout.h index 589ce33c950..8d8e324409f 100644 --- a/gcc/stor-layout.h +++ b/gcc/stor-layout.h @@ -113,4 +113,7 @@ extern void relayout_decl (tree); belongs to a function parameter. */ extern tree variable_size (tree); +/* Implemented in analyzer/record-layout.cc */ +extern void show_record_layout (location_t loc, tree type, tree size); + #endif // GCC_STOR_LAYOUT_H diff --git a/gcc/testsuite/gcc.dg/parsing-pragma-show_layout.c b/gcc/testsuite/gcc.dg/parsing-pragma-show_layout.c new file mode 100644 index 00000000000..564cd8ed3f9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/parsing-pragma-show_layout.c @@ -0,0 +1,15 @@ +/* Test that we provide good warnings for malformed '#pragma show_layout'. */ + +/* { dg-do compile } */ + +#pragma GCC show_layout /* { dg-warning "ignoring malformed '#pragma GCC show_layout': expected '\\('" } */ + +#pragma GCC show_layout( /* { dg-warning "ignoring malformed '#pragma GCC show_layout': expected 'struct'" } */ + +#pragma GCC show_layout(struct /* { dg-warning "ignoring malformed '#pragma GCC show_layout': expected struct tag" } */ + +#pragma GCC show_layout(struct foo /* { dg-warning "32: ignoring malformed '#pragma GCC show_layout': unknown struct tag 'foo'" } */ + +union not_a_struct { int placeholder; }; + +#pragma GCC show_layout(struct not_a_struct /* { dg-warning "32: ignoring malformed '#pragma GCC show_layout': expected struct tag" } */ diff --git a/gcc/testsuite/gcc.dg/pragma-show_layout-1.c b/gcc/testsuite/gcc.dg/pragma-show_layout-1.c new file mode 100644 index 00000000000..db161547e9b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pragma-show_layout-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ + +#include + +struct foo +{ + int32_t i; + int16_t j; + int32_t k; +}; + +#pragma GCC show_layout(struct foo) /* { dg-message "not showing layout of 'struct foo'; '-fdiagnostics-text-art-charset' is 'none'" } */ diff --git a/gcc/testsuite/gcc.dg/pragma-show_layout-2.c b/gcc/testsuite/gcc.dg/pragma-show_layout-2.c new file mode 100644 index 00000000000..d673d4a8f83 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pragma-show_layout-2.c @@ -0,0 +1,184 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target analyzer } */ +/* { dg-options "-fdiagnostics-text-art-charset=unicode" } */ + +#include + +struct empty {}; +#pragma GCC show_layout(struct empty) /* { dg-message "sizeof\\(struct empty\\)' == 0; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + └───────┴────┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ + + { dg-end-multiline-output "" } */ + + +struct st_1 +{ + int32_t i; + int16_t j; + int32_t k; +}; +#pragma GCC show_layout(struct st_1) /* { dg-message "sizeof\\(struct st_1\\)' == 12; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┤ + │ 0 │ 0 │ 'i' │ + ├───────┼────┼─────────────────────────────────────┬───────────────────────────────────────────────┤ + │ 4 │ 32 │ 'j' │ padding │ + ├───────┼────┼─────────────────────────────────────┴───────────────────────────────────────────────┤ + │ 8 │ 64 │ 'k' │ + └───────┴────┴─────────────────────────────────────────────────────────────────────────────────────┘ + + { dg-end-multiline-output "" } */ + + +struct st_2 +{ + int16_t a; + char buf[40]; +}; +#pragma GCC show_layout(struct st_2) /* { dg-message "sizeof\\(struct st_2\\)' == 42; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┤ + │ 0 │ 0 │ 'a' │ 'buf' │ + ├───────┼────┼─────────────────────────────────────┴───────────────────────────────────────────────┤ + │ 4 │ 32 │ │ + ├───────┼────┤ │ + │ 8 │ 64 │ │ + ├───────┼────┤ │ + │ 12 │ 96 │ │ + ├───────┼────┤ │ + │ 16 │128 │ │ + ├───────┼────┤ │ + │ 20 │160 │ 'buf' │ + ├───────┼────┤ │ + │ 24 │192 │ │ + ├───────┼────┤ │ + │ 28 │224 │ │ + ├───────┼────┤ │ + │ 32 │256 │ │ + ├───────┼────┤ │ + │ 36 │288 │ │ + ├───────┼────┼─────────────────────────────────────┬───────────────────────────────────────────────┘ + │ 40 │320 │ 'buf' │ + └───────┴────┴─────────────────────────────────────┘ + + { dg-end-multiline-output "" } */ + + +struct st_3 +{ + int foo : 1; + int bar : 2; +}; +#pragma GCC show_layout(struct st_3) /* { dg-message "sizeof\\(struct st_3\\)' == 4; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼───┬──┬──┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │ 0 │1 │2 │3│4│5│6│7│8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼───┼──┴──┼─┴─┴─┴─┴─┴─┴─┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┤ + │ 0 │ 0 │(1)│'bar'│ padding │ + └───────┴────┴───┴─────┴───────────────────────────────────────────────────────────────────────────────┘ + (1): 'foo' + + { dg-end-multiline-output "" } */ + + +struct st_4 +{ + char ch; +}; +#pragma GCC show_layout(struct st_4) /* { dg-message "sizeof\\(struct st_4\\)' == 1; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ + │ 0 │ 0 │ 'ch' │ + └───────┴────┴───────────────┘ + + { dg-end-multiline-output "" } */ + + +struct st_5 +{ + int foo : 7; + char bar; +}; +#pragma GCC show_layout(struct st_5) /* { dg-message "sizeof\\(struct st_5\\)' == 4; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼─┴─┴─┴─┴─┴─┴─┼─┼─┴─┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┤ + │ 0 │ 0 │ 'foo' │*│ 'bar' │ padding │ + └───────┴────┴─────────────┴─┴─────────────────────┴───────────────────────────────────────────────┘ + *: padding + + { dg-end-multiline-output "" } */ + + +struct st_5a +{ + char foo : 7; + char bar; +}; +#pragma GCC show_layout(struct st_5a) /* { dg-message "sizeof\\(struct st_5a\\)' == 2; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼─┴─┴─┴─┴─┴─┴─┼─┼─┴─┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ + │ 0 │ 0 │ 'foo' │*│ 'bar' │ + └───────┴────┴─────────────┴─┴─────────────────────┘ + *: padding + + { dg-end-multiline-output "" } */ + + +/* Example from docs. */ + +struct example +{ + char foo : 7; + char bar; + char visible : 1; + char active : 1; +}; +#pragma GCC show_layout(struct example) /* { dg-message "sizeof\\(struct example\\)' == 3; layout:" } */ + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────┬─────────────────────┬─────────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬──┬──┬──┬──┬──┬──┼───┬───┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │0│1│2│3│4│5│6│7│8│9│10│11│12│13│14│15│16 │17 │18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼─┴─┴─┴─┴─┴─┴─┼─┼─┴─┴──┴──┴──┴──┴──┴──┼───┼───┼──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┘ + │ 0 │ 0 │ 'foo' │*│ 'bar' │(1)│(2)│ padding │ + └───────┴────┴─────────────┴─┴─────────────────────┴───┴───┴─────────────────┘ + *: padding + (1): 'visible' + (2): 'active' + + { dg-end-multiline-output "" } */ diff --git a/gcc/testsuite/gcc.dg/pragma-show_layout-infoleak-CVE-2017-18550.c b/gcc/testsuite/gcc.dg/pragma-show_layout-infoleak-CVE-2017-18550.c new file mode 100644 index 00000000000..a8434ff2fce --- /dev/null +++ b/gcc/testsuite/gcc.dg/pragma-show_layout-infoleak-CVE-2017-18550.c @@ -0,0 +1,175 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target analyzer } */ +/* { dg-options "-fdiagnostics-text-art-charset=unicode" } */ + +typedef unsigned int __u32; +typedef unsigned int u32; +typedef unsigned char u8; + +/* Adapted from Linux: drivers/scsi/aacraid/aacraid.h */ + +struct aac_hba_info { + + u8 driver_name[50]; + u8 adapter_number; + u8 system_io_bus_number; + u8 device_number; + u32 function_number; + u32 vendor_id; + u32 device_id; + u32 sub_vendor_id; + u32 sub_system_id; + u32 mapped_base_address_size; + u32 base_physical_address_high_part; + u32 base_physical_address_low_part; + + u32 max_command_size; + u32 max_fib_size; + u32 max_scatter_gather_from_os; + u32 max_scatter_gather_to_fw; + u32 max_outstanding_fibs; + + u32 queue_start_threshold; + u32 queue_dump_threshold; + u32 max_io_size_queued; + u32 outstanding_io; + + u32 firmware_build_number; + u32 bios_build_number; + u32 driver_build_number; + u32 serial_number_high_part; + u32 serial_number_low_part; + u32 supported_options; + u32 feature_bits; + u32 currentnumber_ports; + + u8 new_comm_interface:1; + u8 new_commands_supported:1; + u8 disable_passthrough:1; + u8 expose_non_dasd:1; + u8 queue_allowed:1; + u8 bled_check_enabled:1; + u8 reserved1:1; + u8 reserted2:1; + + u32 reserved3[10]; +}; + +#pragma GCC show_layout(struct aac_hba_info) /* { dg-message "sizeof\\(struct aac_hba_info\\)' == 200; layout:" } + /* { dg-begin-multiline-output "" } + + ┌───────┬────┬───────────────────────────────┬─────────────────────┬───────────────────────┬───────────────────────┐ + │Offsets│Byte│ 0 │ 1 │ 2 │ 3 │ + ├───────┼────┼───┬───┬───┬───┬───┬───┬───┬───┼─┬─┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┬──┬──┬──┤ + │ Byte │Bit │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │8│9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ + ├───────┼────┼───┴───┴───┴───┴───┴───┴───┴───┴─┴─┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┤ + │ 0 │ 0 │ │ + ├───────┼────┤ │ + │ 4 │ 32 │ │ + ├───────┼────┤ │ + │ 8 │ 64 │ │ + ├───────┼────┤ │ + │ 12 │ 96 │ │ + ├───────┼────┤ │ + │ 16 │128 │ │ + ├───────┼────┤ │ + │ 20 │160 │ │ + ├───────┼────┤ 'driver_name' │ + │ 24 │192 │ │ + ├───────┼────┤ │ + │ 28 │224 │ │ + ├───────┼────┤ │ + │ 32 │256 │ │ + ├───────┼────┤ │ + │ 36 │288 │ │ + ├───────┼────┤ │ + │ 40 │320 │ │ + ├───────┼────┤ │ + │ 44 │352 │ │ + ├───────┼────┼─────────────────────────────────────────────────────┬───────────────────────┬───────────────────────┤ + │ 48 │384 │ 'driver_name' │ 'adapter_number' │'system_io_bus_number' │ + ├───────┼────┼───────────────────────────────┬─────────────────────┴───────────────────────┴───────────────────────┤ + │ 52 │416 │ 'device_number' │ padding │ + ├───────┼────┼───────────────────────────────┴─────────────────────────────────────────────────────────────────────┤ + │ 56 │448 │ 'function_number' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 60 │480 │ 'vendor_id' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 64 │512 │ 'device_id' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 68 │544 │ 'sub_vendor_id' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 72 │576 │ 'sub_system_id' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 76 │608 │ 'mapped_base_address_size' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 80 │640 │ 'base_physical_address_high_part' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 84 │672 │ 'base_physical_address_low_part' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 88 │704 │ 'max_command_size' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 92 │736 │ 'max_fib_size' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 96 │768 │ 'max_scatter_gather_from_os' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 100 │800 │ 'max_scatter_gather_to_fw' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 104 │832 │ 'max_outstanding_fibs' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 108 │864 │ 'queue_start_threshold' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 112 │896 │ 'queue_dump_threshold' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 116 │928 │ 'max_io_size_queued' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 120 │960 │ 'outstanding_io' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 124 │992 │ 'firmware_build_number' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 128 │1024│ 'bios_build_number' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 132 │1056│ 'driver_build_number' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 136 │1088│ 'serial_number_high_part' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 140 │1120│ 'serial_number_low_part' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 144 │1152│ 'supported_options' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 148 │1184│ 'feature_bits' │ + ├───────┼────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤ + │ 152 │1216│ 'currentnumber_ports' │ + ├───────┼────┼───┬───┬───┬───┬───┬───┬───┬───┬─────────────────────────────────────────────────────────────────────┤ + │ 156 │1248│(1)│(2)│(3)│(4)│(5)│(6)│(7)│(8)│ padding │ + ├───────┼────┼───┴───┴───┴───┴───┴───┴───┴───┴─────────────────────────────────────────────────────────────────────┤ + │ 160 │1280│ │ + ├───────┼────┤ │ + │ 164 │1312│ │ + ├───────┼────┤ │ + │ 168 │1344│ │ + ├───────┼────┤ │ + │ 172 │1376│ │ + ├───────┼────┤ │ + │ 176 │1408│ │ + ├───────┼────┤ 'reserved3' │ + │ 180 │1440│ │ + ├───────┼────┤ │ + │ 184 │1472│ │ + ├───────┼────┤ │ + │ 188 │1504│ │ + ├───────┼────┤ │ + │ 192 │1536│ │ + ├───────┼────┤ │ + │ 196 │1568│ │ + └───────┴────┴─────────────────────────────────────────────────────────────────────────────────────────────────────┘ + (1): 'new_comm_interface' + (2): 'new_commands_supported' + (3): 'disable_passthrough' + (4): 'expose_non_dasd' + (5): 'queue_allowed' + (6): 'bled_check_enabled' + (7): 'reserved1' + (8): 'reserted2' + + { dg-end-multiline-output "" } */ From patchwork Thu Nov 2 13:19:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Malcolm X-Patchwork-Id: 160876 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp348014vqu; Thu, 2 Nov 2023 06:20:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE1HUbYyfz/sIpt5S+LfIULasjidaYL6ZtWOeT2SYfm97MnI4m9YwF/F+2LozfzB1qPjEl3 X-Received: by 2002:a05:6870:ab88:b0:1e9:896a:8055 with SMTP id gs8-20020a056870ab8800b001e9896a8055mr23820626oab.25.1698931221084; Thu, 02 Nov 2023 06:20:21 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698931221; cv=pass; d=google.com; s=arc-20160816; b=l8SLix9WHy+vz71zsqxWLzpXn+Vi7VeI0JCYFoNJmMbbiYf94ot6Eo0HpDly365anf Gpb0fvDRBepdio6kYnkHTsAOuPZMW9vCollA2z1p15VCPKgTa+GfEFjsKZkaepeLN/PH VvMAs7N+Rb9ed+skHLBh/ym+SGpqKFb2fBVkxv4fUzL5wLmzuTlEixtM6S7N423kYSBK wIghprYxH8foiASOEgXLB/qr3ECp1B1ai8xECbLt09374uds15kwTAgklD0tVXZQ/RsN l/wr0rIXEi7U5cZXn+axFNavAlIWhFOhsTRqr30E87c2MYcxONdzLvKBaTbzae8YpOp1 Ic0w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=AUwoH2W/vGHILnb9FqSfcajb79nYUk8U5nWkKdVXrMY=; fh=NXemEfxTRbZtBxUkxR2ehQUaYlcDfMdzPkO8MChVQE4=; b=UXX1S0IVF4FxCdVcL0CidowPmIjYlxgBXwUPxMSwDHuD4B5uSg/6AufzKq3RMKH/a4 NxATNox6kdZKD63OR0dlWicnEgHgaUXyR8ERyfHfnQ/OXKYR2tXyAb2VrAeKeyhw4zqy 7kJrFmW0dPN/qucUUU+YCFijKSa26kAC1ilIZ4MXqQhcD5YYaz1sc3NJ6O5RflGl0GN8 HKeYOgW7u+OqQUv1PDZ48yGcTBtA34s9IXA3Eu2xG7RJD9hDtNxHTzCNO7BgLtW9qU0K VYPGANY9z6QCLz/9X2LUoxlkwmxviNbnz3jvhQvyqI1+wJlRo38uPfTrqR5bbbQFYQTy 24eA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=X15wUHWo; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id ea5-20020ad458a5000000b0066d7ec3340asi4402693qvb.63.2023.11.02.06.20.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 06:20:21 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=X15wUHWo; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F188B3857806 for ; Thu, 2 Nov 2023 13:20:18 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 7FE0A3858CD1 for ; Thu, 2 Nov 2023 13:19:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7FE0A3858CD1 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7FE0A3858CD1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931189; cv=none; b=JPN6+PT4HBDLcy5kTToKPHI3UGbcux1T7b8IiIsI2k+AIoTViiPhifH0hkfh+KKVpXXEP3g/6cj8lyq2OaR5QYSn2MCB6SyjjtdrsPkk6w16VVrzaE0rmvAgsdkguIlCHPaiqO22m3QSYOQ2knS6qobYbFNjzDeqLBjHug0ZgTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931189; c=relaxed/simple; bh=sjrn4sbCiRLeKz8WGDC4ic6OCjErHzsdgyUf0mhxWc8=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=WunnZ/SkPpgdrUQp57chcmeKv0xD067nFLaJR/SUuFmXrQFlSAYLASQfmLrV3RNlTFmrI/iT2KSQteCgLCL12a4CXCTyT1KprhbyOIJKCJK/mmqnIvCeL/TJWNS1ww3/9w9z8eRGNiPWLoZLC0g0ABpQJjrsuJD9zg4B7vrYDOE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1698931180; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AUwoH2W/vGHILnb9FqSfcajb79nYUk8U5nWkKdVXrMY=; b=X15wUHWo+oe1X0G/NO+ymF/wFArlnymG1NmCpKmu4CvxLzKyzq0Mzb+jwre8Fr8rNoHR3R gqJ4xslzYc81pQLhmVCfAHX/7oEKysCOd33vJpbNoMw9hrKBrkyQtFChcGeE8S85ndfjgf C8xixRyfOIE7MpVzxUXrC1OFfvaKUAU= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-438-8aYvuoZ0MHeAE0VfvgQrvw-1; Thu, 02 Nov 2023 09:19:37 -0400 X-MC-Unique: 8aYvuoZ0MHeAE0VfvgQrvw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 50DEE82BA86 for ; Thu, 2 Nov 2023 13:19:37 +0000 (UTC) Received: from t14s.localdomain.com (unknown [10.22.8.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2146F1C060BA; Thu, 2 Nov 2023 13:19:37 +0000 (UTC) From: David Malcolm To: gcc-patches@gcc.gnu.org Cc: David Malcolm Subject: [PATCH 3/4] diagnostics: add automatic URL-ification within messages Date: Thu, 2 Nov 2023 09:19:32 -0400 Message-Id: <20231102131933.2161191-4-dmalcolm@redhat.com> In-Reply-To: <20231102131933.2161191-1-dmalcolm@redhat.com> References: <20231102131933.2161191-1-dmalcolm@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781458504224445070 X-GMAIL-MSGID: 1781458504224445070 In r10-3781-gd26082357676a3 GCC's pretty-print framework gained the ability to emit embedding URLs via escape sequences for marking up text output.. In r10-3783-gb4c7ca2ef3915a GCC started using this for the [-Wname-of-option] emitted at the end of each diagnostic so that it becomes a hyperlink to the documentation for that option on the GCC website. This makes it much more convenient for the user to locate pertinent documentation when a diagnostic is emitted. The above involved special-casing in one specific place, but there is plenty of quoted text throughout GCC's diagnostic messages that could usefully have a documentation URL: references to options, pragmas, etc This patch adds a new optional "urlifier" parameter to pp_format. The idea is that a urlifier object has responsibility for mapping from quoted strings in diagnostic messages to URLs, and pp_format has the ability to automatically add URL escapes for strings that the urlifier gives it URLs for. For example, given the format string: "%<#pragma pack%> has no effect with %<-fpack-struct%>" with this patch GCC is able to automatically linkify the "#pragma pack" text to https://gcc.gnu.org/onlinedocs/gcc/Structure-Layout-Pragmas.html and the "-fpack-struct" text to: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fpack-struct and we don't have to modify the format string itself. This is only done for the pp_format within diagnostic_report_diagnostic i.e. just for the primary message in each diagnostics, and not for other places within GCC that use pp_format internally. "urlifier" is an abstract base class, with a GCC-specific subclass implementing the logic for generating URLs into GCC's HTML documentation via binary search in a data table. This patch implements the gcc_urlifier with a small table generated by hand; the data table in this patch only covers enough pragmas and options to allow undoing some of the hardcoding from the previous pragma-parsing patch. I have a followup patch that scripts the creation of this data by directly scraping the output of "make html", thus automating all this, and (I hope) minimizing the work of ensuring that documentation URLs emitted by GCC match the generated documentation. gcc/ChangeLog: * Makefile.in (GCC_OBJS): Add gcc-urlifier.o. (OBJS): Likewise. gcc/c-family/ChangeLog: * c-pragma.cc:: Eliminate uses of %{ and %} and get_doc_url in all places where it's just the name of the pragma (or of an option). (handle_pragma_push_options): Fix missing "GCC" in name of pragma in "junk" message. (handle_pragma_pop_options): Likewise. gcc/ChangeLog: * diagnostic.cc: Include "pretty-print-urlifier.h". (diagnostic_initialize): Initialize m_urlifier. (diagnostic_finish): Clean up m_urlifier (diagnostic_report_diagnostic): Pass context->m_urlifier to pp_format. * diagnostic.h (diagnostic_context::m_urlifier): New field. * gcc-urlifier.cc: New file. * gcc-urlifier.def: New file. * gcc-urlifier.h: New file. * gcc.cc: Include "gcc-urlifier.h". (driver::global_initializations): Initialize global_dc->m_urlifier. * pretty-print-urlifier.h: New file. * pretty-print.cc: Include "pretty-print-urlifier.h". (obstack_append_string): New. (urlify_quoted_string): New. (pp_format): Add "urlifier" param and use it to implement optional urlification of quoted text strings. (pp_output_formatted_text): Make buffer a const pointer. (selftest::pp_printf_with_urlifier): New. (selftest::test_urlification): New. (selftest::pretty_print_cc_tests): Call it. * pretty-print.h (class urlifier): New forward declaration. (pp_format): Add optional urlifier param. * selftest-run-tests.cc (selftest::run_tests): Call selftest::gcc_urlifier_cc_tests . * selftest.h (selftest::gcc_urlifier_cc_tests): New decl. * toplev.cc: Include "gcc-urlifier.h". (general_init): Initialize global_dc->m_urlifier. --- gcc/Makefile.in | 3 +- gcc/c-family/c-pragma.cc | 73 ++++------- gcc/diagnostic.cc | 8 +- gcc/diagnostic.h | 4 + gcc/gcc-urlifier.cc | 159 +++++++++++++++++++++++ gcc/gcc-urlifier.def | 20 +++ gcc/gcc-urlifier.h | 26 ++++ gcc/gcc.cc | 2 + gcc/pretty-print-urlifier.h | 33 +++++ gcc/pretty-print.cc | 242 +++++++++++++++++++++++++++++++++++- gcc/pretty-print.h | 5 +- gcc/selftest-run-tests.cc | 1 + gcc/selftest.h | 1 + gcc/toplev.cc | 2 + 14 files changed, 520 insertions(+), 59 deletions(-) create mode 100644 gcc/gcc-urlifier.cc create mode 100644 gcc/gcc-urlifier.def create mode 100644 gcc/gcc-urlifier.h create mode 100644 gcc/pretty-print-urlifier.h diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 41ed8163cd8..ff77d3cdc64 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1279,7 +1279,7 @@ FORTRAN_TARGET_OBJS=@fortran_target_objs@ RUST_TARGET_OBJS=@rust_target_objs@ # Object files for gcc many-languages driver. -GCC_OBJS = gcc.o gcc-main.o ggc-none.o +GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o c-family-warn = $(STRICT_WARN) @@ -1452,6 +1452,7 @@ OBJS = \ function-tests.o \ fwprop.o \ gcc-rich-location.o \ + gcc-urlifier.o \ gcse.o \ gcse-common.o \ ggc-common.o \ diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc index 904a1fcd55d..d762fa68285 100644 --- a/gcc/c-family/c-pragma.cc +++ b/gcc/c-family/c-pragma.cc @@ -291,17 +291,14 @@ public: if (TREE_CODE (x) == INTEGER_CST) return true; - label_text doc_url (get_doc_url ()); warning_at (loc, OPT_Wpragmas, - "ignoring malformed %<%{#pragma pack%}%>:" - " invalid constant", - doc_url.get ()); + "ignoring malformed %<#pragma pack%>:" + " invalid constant"); return false; } void complain_about_malformed_action (pack_action action) const { - label_text doc_url (get_doc_url ()); if (action != pack_action::pop) warning_at (m_last_loc, OPT_Wpragmas, "ignoring malformed %<#pragma pack(push[, id][, ])%>"); @@ -360,11 +357,10 @@ handle_pragma_pack (cpp_reader *) action = pack_action::pop; else { - label_text doc_url (p.get_doc_url ()); warning_at (loc, OPT_Wpragmas, - "ignoring malformed %<%{#pragma pack%}%>:" + "ignoring malformed %<#pragma pack%>:" " unknown action %qE", - doc_url.get (), x); + x); return; } @@ -401,11 +397,9 @@ handle_pragma_pack (cpp_reader *) } else { - label_text doc_url (p.get_doc_url ()); warning_at (loc, OPT_Wpragmas, - "ignoring malformed %<%{#pragma pack%}%>:" - " expected %<)%>, integer, %, or %", - doc_url.get ()); + "ignoring malformed %<#pragma pack%>:" + " expected %<)%>, integer, %, or %"); return; } @@ -414,13 +408,9 @@ handle_pragma_pack (cpp_reader *) if (flag_pack_struct) { - label_text pragma_doc_url (p.get_doc_url ()); - label_text option_doc_url - (get_doc_url ("gcc/Code-Gen-Options.html#index-fpack-struct")); warning (OPT_Wpragmas, - "%<%{#pragma pack%}%> has no effect with %<%{-fpack-struct%}%>" - " - ignored", - pragma_doc_url.get (), option_doc_url.get ()); + "%<#pragma pack%> has no effect with %<-fpack-struct%>" + " - ignored"); return; } @@ -444,11 +434,10 @@ handle_pragma_pack (cpp_reader *) /* FALLTHRU */ default: { - label_text doc_url (p.get_doc_url ()); warning_at (align_loc, OPT_Wpragmas, - "ignoring malformed %<%{#pragma pack%}%>:" + "ignoring malformed %<#pragma pack%>:" " alignment must be a small power of two, not %d", - doc_url.get (), align); + align); return; } } @@ -609,11 +598,10 @@ handle_pragma_weak (cpp_reader *) if (!VAR_OR_FUNCTION_DECL_P (decl)) { auto_diagnostic_group d; - label_text doc_url (p.get_doc_url ()); if (warning_at (name_loc, OPT_Wpragmas, - "%<%{#pragma weak%}%> declaration of %qD not allowed," + "%<#pragma weak%> declaration of %qD not allowed," " ignored", - doc_url.get (), decl)) + decl)) if (DECL_SOURCE_LOCATION (decl) != UNKNOWN_LOCATION) inform (DECL_SOURCE_LOCATION (decl), "%qD is not a variable or function", @@ -668,11 +656,9 @@ public: void complain_about_arg (location_t arg_loc) const { - label_text doc_url (get_doc_url ()); warning_at (arg_loc, OPT_Wpragmas, - "ignoring malformed %<%{#pragma scalar_storage_order%}%>:" - " expected %, %, or %", - doc_url.get ()); + "ignoring malformed %<#pragma scalar_storage_order%>:" + " expected %, %, or %"); } }; @@ -962,12 +948,8 @@ push_visibility (const char *str, int kind, const pragma_parser *p) " %, %, %" " or %")) if (p) - { - label_text doc_url (p->get_doc_url ()); - inform (loc, - "ignoring malformed %<%{#pragma GCC visibility%}%>", - doc_url.get ()); - } + inform (loc, + "ignoring malformed %<#pragma GCC visibility%>"); return; } visibility_options.inpragma = 1; @@ -1014,11 +996,9 @@ handle_pragma_visibility (cpp_reader *) } if (bad == action) { - label_text doc_url (p.get_doc_url ()); warning (OPT_Wpragmas, - "%<%{#pragma GCC visibility%}%> must be followed by % " - "or %", - doc_url.get ()); + "%<#pragma GCC visibility%> must be followed by % " + "or %"); return; } else @@ -1027,11 +1007,8 @@ handle_pragma_visibility (cpp_reader *) { if (! pop_visibility (0)) { - label_text doc_url (p.get_doc_url ()); warning (OPT_Wpragmas, - "no matching push for" - " %<%{#pragma GCC visibility pop%}%>", - doc_url.get ()); + "no matching push for %<#pragma GCC visibility pop%>"); return; } } @@ -1511,7 +1488,7 @@ handle_pragma_push_options (cpp_reader *) token = pragma_lex (&x); if (token != CPP_EOF) { - warning (OPT_Wpragmas, "junk at end of %<#pragma push_options%>"); + warning (OPT_Wpragmas, "junk at end of %<#pragma GCC push_options%>"); return; } @@ -1548,7 +1525,7 @@ handle_pragma_pop_options (cpp_reader *) token = pragma_lex (&x); if (token != CPP_EOF) { - warning (OPT_Wpragmas, "junk at end of %<#pragma pop_options%>"); + warning (OPT_Wpragmas, "junk at end of %<#pragma GCC pop_options%>"); return; } @@ -1653,10 +1630,8 @@ handle_pragma_message (cpp_reader *) message = x; else { - label_text doc_url (p.get_doc_url ()); warning_at (loc, OPT_Wpragmas, - "expected a string after %<%{#pragma message%}%>", - doc_url.get ()); + "expected a string after %<#pragma message%>"); return; } if (!p.require_close_paren ()) @@ -1673,10 +1648,8 @@ handle_pragma_message (cpp_reader *) } else { - label_text doc_url (p.get_doc_url ()); warning_at (loc, OPT_Wpragmas, - "expected a string after %<%{#pragma message%}%>", - doc_url.get ()); + "expected a string after %<#pragma message%>"); return; } diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index 0f392358aef..e3c440a9e8d 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see #include "opts.h" #include "cpplib.h" #include "text-art/theme.h" +#include "pretty-print-urlifier.h" #ifdef HAVE_TERMIOS_H # include @@ -193,6 +194,7 @@ diagnostic_initialize (diagnostic_context *context, int n_opts) context->option_state = NULL; context->option_name = NULL; context->get_option_url = NULL; + context->m_urlifier = nullptr; context->last_location = UNKNOWN_LOCATION; context->last_module = 0; context->x_data = NULL; @@ -347,6 +349,9 @@ diagnostic_finish (diagnostic_context *context) delete context->m_client_data_hooks; context->m_client_data_hooks = NULL; } + + delete context->m_urlifier; + context->m_urlifier = nullptr; } /* Initialize DIAGNOSTIC, where the message MSG has already been @@ -1574,7 +1579,8 @@ diagnostic_report_diagnostic (diagnostic_context *context, context->m_output_format->on_begin_group (); context->diagnostic_group_emission_count++; - pp_format (context->printer, &diagnostic->message); + pp_format (context->printer, &diagnostic->message, + context->m_urlifier); context->m_output_format->on_begin_diagnostic (diagnostic); pp_output_formatted_text (context->printer); if (context->show_cwe) diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index a2c8740cbd0..d79369289bc 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -354,6 +354,10 @@ struct diagnostic_context particular option. */ char *(*get_option_url) (diagnostic_context *, int); + /* An optional hook for adding URLs to quoted text strings in + diagnostics. Only used for the main diagnostic message. */ + urlifier *m_urlifier; + void (*print_path) (diagnostic_context *, const diagnostic_path *); json::value *(*make_json_for_path) (diagnostic_context *, const diagnostic_path *); diff --git a/gcc/gcc-urlifier.cc b/gcc/gcc-urlifier.cc new file mode 100644 index 00000000000..269246bc703 --- /dev/null +++ b/gcc/gcc-urlifier.cc @@ -0,0 +1,159 @@ +/* Automatic generation of links into GCC's documentation. + Copyright (C) 2023 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "pretty-print.h" +#include "pretty-print-urlifier.h" +#include "gcc-urlifier.h" +#include "selftest.h" + +namespace { + +/* Concrete subclass of urlifier for generating links into + GCC's HTML documentation. */ + +class gcc_urlifier : public urlifier +{ +public: + char *get_url_for_quoted_text (const char *p, size_t sz) const final override; + + const char *get_url_suffix_for_quoted_text (const char *p, size_t sz) const; + const char *get_url_suffix_for_quoted_text (const char *p) const; + +private: + static char * + make_doc_url (const char *doc_url_suffix); +}; + +/* class gcc_urlifier : public urlifier. */ + +#define DOC_URL(QUOTED_TEXT, URL_SUFFIX) \ + { (QUOTED_TEXT), (URL_SUFFIX) } + +const struct +{ + const char *quoted_text; + const char *url_suffix; +} doc_urls[] = { + +#include "gcc-urlifier.def" + +}; + +char * +gcc_urlifier::get_url_for_quoted_text (const char *p, size_t sz) const +{ + if (const char *url_suffix = get_url_suffix_for_quoted_text (p, sz)) + return make_doc_url (url_suffix); + return nullptr; +} + +const char * +gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const +{ + /* Binary search. This assumes that the quoted_text fields of doc_urls + are in sorted order. */ + int min = 0; + int max = ARRAY_SIZE (doc_urls) - 1; + while (true) + { + if (min > max) + return nullptr; + int midpoint = (min + max) / 2; + gcc_assert ((size_t)midpoint < ARRAY_SIZE (doc_urls)); + int cmp = strncmp (p, doc_urls[midpoint].quoted_text, sz); + if (cmp == 0) + { + if (doc_urls[midpoint].quoted_text[sz] == '\0') + return doc_urls[midpoint].url_suffix; + else + max = midpoint - 1; + } + else if (cmp < 0) + max = midpoint - 1; + else + min = midpoint + 1; + } + return nullptr; +} + +const char * +gcc_urlifier::get_url_suffix_for_quoted_text (const char *p) const +{ + return get_url_suffix_for_quoted_text (p, strlen (p)); +} + +char * +gcc_urlifier::make_doc_url (const char *doc_url_suffix) +{ + if (!doc_url_suffix) + return nullptr; + + return concat (DOCUMENTATION_ROOT_URL, doc_url_suffix, nullptr); +} + +} // anonymous namespace + +urlifier * +make_gcc_urlifier () +{ + return new gcc_urlifier (); +} + +#if CHECKING_P + +namespace selftest { + +/* Selftests. */ + +/* Run all of the selftests within this file. */ + +void +gcc_urlifier_cc_tests () +{ + /* Check that doc_urls.quoted_text is sorted. */ + for (size_t idx = 1; idx < ARRAY_SIZE (doc_urls); idx++) + gcc_assert (strcmp (doc_urls[idx - 1].quoted_text, + doc_urls[idx].quoted_text) + < 0); + + gcc_urlifier u; + + ASSERT_EQ (u.get_url_suffix_for_quoted_text (""), nullptr); + ASSERT_EQ (u.get_url_suffix_for_quoted_text (")"), nullptr); + + ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message"), + "gcc/Diagnostic-Pragmas.html"); + + // Incomplete prefix of a quoted_text + ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess"), nullptr); + + /* Check that every element is findable. */ + for (size_t idx = 0; idx < ARRAY_SIZE (doc_urls); idx++) + ASSERT_STREQ + (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text), + doc_urls[idx].url_suffix); +} + +} // namespace selftest + +#endif /* #if CHECKING_P */ diff --git a/gcc/gcc-urlifier.def b/gcc/gcc-urlifier.def new file mode 100644 index 00000000000..360de930e9e --- /dev/null +++ b/gcc/gcc-urlifier.def @@ -0,0 +1,20 @@ +/* Keep this file sorted. */ +DOC_URL ("#pragma GCC diagnostic", "gcc/Diagnostic-Pragmas.html"), +DOC_URL ("#pragma GCC diagnostic ignored_attributes", "gcc/Diagnostic-Pragmas.html"), +DOC_URL ("#pragma GCC ivdep", "gcc/Loop-Specific-Pragmas.html#index-pragma-GCC-ivdep"), +DOC_URL ("#pragma GCC novector", "gcc/Loop-Specific-Pragmas.html#index-pragma-GCC-novector"), +DOC_URL ("#pragma GCC optimize", "gcc/Function-Specific-Option-Pragmas.html#index-pragma-GCC-optimize"), +DOC_URL ("#pragma GCC pop_options", "gcc/Push_002fPop-Macro-Pragmas.html"), +DOC_URL ("#pragma GCC push_options", "gcc/Push_002fPop-Macro-Pragmas.html"), +DOC_URL ("#pragma GCC reset_options", "gcc/Function-Specific-Option-Pragmas.html#index-pragma-GCC-reset_005foptions"), +DOC_URL ("#pragma GCC target", "gcc/Function-Specific-Option-Pragmas.html#index-pragma-GCC-target"), +DOC_URL ("#pragma GCC unroll", "gcc/Loop-Specific-Pragmas.html#index-pragma-GCC-unroll-n"), +DOC_URL ("#pragma GCC visibility", "gcc/Visibility-Pragmas.html"), +DOC_URL ("#pragma GCC visibility pop", "gcc/Visibility-Pragmas.html"), +DOC_URL ("#pragma message", "gcc/Diagnostic-Pragmas.html"), +DOC_URL ("#pragma pack", "gcc/Structure-Layout-Pragmas.html"), +DOC_URL ("#pragma redefine_extname", "gcc/Symbol-Renaming-Pragmas.html"), +DOC_URL ("#pragma scalar_storage_order", "gcc/Structure-Layout-Pragmas.html"), +DOC_URL ("#pragma weak", "gcc/Weak-Pragmas.html"), +DOC_URL ("--version", "gcc/Overall-Options.html#index-version"), +DOC_URL ("-fpack-struct", "gcc/Code-Gen-Options.html#index-fpack-struct"), diff --git a/gcc/gcc-urlifier.h b/gcc/gcc-urlifier.h new file mode 100644 index 00000000000..614e1c64b94 --- /dev/null +++ b/gcc/gcc-urlifier.h @@ -0,0 +1,26 @@ +/* Automatic generation of links into GCC's documentation. + Copyright (C) 2023 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#ifndef GCC_GCC_URLIFIER_H +#define GCC_GCC_URLIFIER_H + +extern urlifier *make_gcc_urlifier (); + +#endif /* GCC_GCC_URLIFIER_H */ diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 884284e66b4..2bc2fc0e72d 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -47,6 +47,7 @@ compilation is specified by a string called a "spec". */ #include "opts-jobserver.h" #include "common/common-target.h" #include "diagnostic-text-art.h" +#include "gcc-urlifier.h" #ifndef MATH_LIBRARY #define MATH_LIBRARY "m" @@ -8293,6 +8294,7 @@ driver::global_initializations () diagnostic_initialize (global_dc, 0); diagnostic_color_init (global_dc); diagnostic_urls_init (global_dc); + global_dc->m_urlifier = make_gcc_urlifier (); #ifdef GCC_DRIVER_HOST_INITIALIZATION /* Perform host dependent initialization when needed. */ diff --git a/gcc/pretty-print-urlifier.h b/gcc/pretty-print-urlifier.h new file mode 100644 index 00000000000..bdb7fca00d4 --- /dev/null +++ b/gcc/pretty-print-urlifier.h @@ -0,0 +1,33 @@ +/* Copyright (C) 2023 Free Software Foundation, Inc. + Contributed by David Malcolm + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#ifndef GCC_PRETTY_PRINT_URLIFIER_H +#define GCC_PRETTY_PRINT_URLIFIER_H + +/* Abstract base class for optional use in pp_format for adding URLs + to quoted text strings. */ + +class urlifier +{ +public: + virtual ~urlifier () {} + virtual char *get_url_for_quoted_text (const char *p, size_t sz) const = 0; +}; + +#endif /* GCC_PRETTY_PRINT_URLIFIER_H */ diff --git a/gcc/pretty-print.cc b/gcc/pretty-print.cc index 80780cfd7b8..9a4827622dc 100644 --- a/gcc/pretty-print.cc +++ b/gcc/pretty-print.cc @@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "intl.h" #include "pretty-print.h" +#include "pretty-print-urlifier.h" #include "diagnostic-color.h" #include "diagnostic-event-id.h" #include "selftest.h" @@ -1022,6 +1023,95 @@ pp_indent (pretty_printer *pp) static const char *get_end_url_string (pretty_printer *); +/* Append STR to OSTACK, without a null-terminator. */ + +static void +obstack_append_string (obstack *ostack, const char *str) +{ + obstack_grow (ostack, str, strlen (str)); +} + +/* Given quoted text starting at QUOTED_TEXT_START_IDX within PP's buffer, + potentially use URLIFIER (if non-null) to see if there's a URL for the + quoted text. + + If so, replace the quoted part of the text in the buffer with a URLified + version of the text, using PP's settings. + + For example, given this is the buffer: + "this is a test `hello world" + .................^~~~~~~~~~~ + with the quoted text starting at the 'h' of "hello world", the buffer + becomes: + "this is a test `BEGIN_URL(URL)hello worldEND(URL)" + .................^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + .................-----------replacement----------- +*/ + +static void +urlify_quoted_string (pretty_printer *pp, + const urlifier *urlifier, + size_t quoted_text_start_idx) +{ + if (pp->url_format == URL_FORMAT_NONE) + return; + if (!urlifier) + return; + + output_buffer * const buffer = pp_buffer (pp); + + /* Get end of quoted string. */ + const size_t close_quote_idx + = obstack_object_size (&buffer->chunk_obstack); + gcc_assert (close_quote_idx >= quoted_text_start_idx); + if (close_quote_idx == quoted_text_start_idx) + /* Empty quoted string; do nothing. */ + return; + const size_t len = close_quote_idx - quoted_text_start_idx; + const char *start = (buffer->chunk_obstack.object_base + + quoted_text_start_idx); + char *url = urlifier->get_url_for_quoted_text (start, len); + if (!url) + /* No URL for this quoted text; do nothing. */ + return; + + /* Stash a copy of the quoted text. */ + char *text = xstrndup (start, len); + + /* Replace quoted text... */ + buffer->chunk_obstack.next_free -= len; + + /* ...with URLified version of the text. */ + /* Begin URL. */ + switch (pp->url_format) + { + default: + case URL_FORMAT_NONE: + gcc_unreachable (); + case URL_FORMAT_ST: + obstack_append_string (&buffer->chunk_obstack, + "\33]8;;"); + obstack_append_string (&buffer->chunk_obstack, url); + obstack_append_string (&buffer->chunk_obstack, + "\33\\"); + break; + case URL_FORMAT_BEL: + obstack_append_string (&buffer->chunk_obstack, + "\33]8;;"); + obstack_append_string (&buffer->chunk_obstack, url); + obstack_append_string (&buffer->chunk_obstack, + "\a"); + break; + } + /* Add the text back. */ + obstack_append_string (&buffer->chunk_obstack, text); + /* End URL. */ + obstack_append_string (&buffer->chunk_obstack, + get_end_url_string (pp)); + free (text); + free (url); +} + /* The following format specifiers are recognized as being client independent: %d, %i: (signed) integer in base ten. %u: unsigned integer in base ten. @@ -1064,12 +1154,25 @@ static const char *get_end_url_string (pretty_printer *); /* Formatting phases 1 and 2: render TEXT->format_spec plus text->m_args_ptr into a series of chunks in pp_buffer (PP)->args[]. - Phase 3 is in pp_output_formatted_text. */ + Phase 3 is in pp_output_formatted_text. + + If URLIFIER is non-NULL, then use it to add URLs for quoted + strings, so that e.g. + "before % after" + with a URLIFIER that has a URL for "quoted" might be emitted as: + "before `BEGIN_URL(http://example.com)quotedEND_URL' after" + This only works for message fragments that are: + - quoted entirely in phase 1 (e.g. "%"), or + - quoted entirely in phase 2 (e.g. "%qs"), + but *not* in strings that use a mixture of both phases + (e.g. "%"). */ void -pp_format (pretty_printer *pp, text_info *text) +pp_format (pretty_printer *pp, + text_info *text, + const urlifier *urlifier) { - output_buffer *buffer = pp_buffer (pp); + output_buffer * const buffer = pp_buffer (pp); const char *p; const char **args; struct chunk_info *new_chunk_array; @@ -1079,6 +1182,9 @@ pp_format (pretty_printer *pp, text_info *text) bool any_unnumbered = false, any_numbered = false; const char **formatters[PP_NL_ARGMAX]; + /* Keep track of location of last "%", if any. */ + size_t quoted_text_start_idx = 0; + /* Allocate a new chunk structure. */ new_chunk_array = XOBNEW (&buffer->chunk_obstack, struct chunk_info); new_chunk_array->prev = buffer->cur_chunk_array; @@ -1122,11 +1228,21 @@ pp_format (pretty_printer *pp, text_info *text) = colorize_start (pp_show_color (pp), "quote"); obstack_grow (&buffer->chunk_obstack, colorstr, strlen (colorstr)); p++; + + /* Stash offset of start of quoted string. */ + quoted_text_start_idx + = obstack_object_size (&buffer->chunk_obstack); + continue; } case '>': { + if (quoted_text_start_idx) + { + urlify_quoted_string (pp, urlifier, quoted_text_start_idx); + quoted_text_start_idx = 0; + } const char *colorstr = colorize_stop (pp_show_color (pp)); obstack_grow (&buffer->chunk_obstack, colorstr, strlen (colorstr)); } @@ -1168,6 +1284,12 @@ pp_format (pretty_printer *pp, text_info *text) obstack_1grow (&buffer->chunk_obstack, '\0'); gcc_assert (chunk < PP_NL_ARGMAX * 2); args[chunk++] = XOBFINISH (&buffer->chunk_obstack, const char *); + /* We can't yet handle urlifying quoted strings that use + a combination of phase 1 and phase 2 e.g. + "did you mean %<-%s%>". + Stop any phase 1 quoted text if there are going to be any + phase 2 quoted chunks. */ + quoted_text_start_idx = 0; break; } @@ -1270,6 +1392,7 @@ pp_format (pretty_printer *pp, text_info *text) bool plus = false; bool hash = false; bool quote = false; + quoted_text_start_idx = 0; /* We do not attempt to enforce any ordering on the modifier characters. */ @@ -1310,7 +1433,11 @@ pp_format (pretty_printer *pp, text_info *text) gcc_assert (!wide || precision == 0); if (quote) - pp_begin_quote (pp, pp_show_color (pp)); + { + pp_begin_quote (pp, pp_show_color (pp)); + quoted_text_start_idx + = obstack_object_size (&buffer->chunk_obstack); + } switch (*p) { @@ -1480,7 +1607,14 @@ pp_format (pretty_printer *pp, text_info *text) } if (quote) - pp_end_quote (pp, pp_show_color (pp)); + { + if (quoted_text_start_idx) + { + urlify_quoted_string (pp, urlifier, quoted_text_start_idx); + quoted_text_start_idx = 0; + } + pp_end_quote (pp, pp_show_color (pp)); + } obstack_1grow (&buffer->chunk_obstack, '\0'); *formatters[argno] = XOBFINISH (&buffer->chunk_obstack, const char *); @@ -1507,7 +1641,7 @@ void pp_output_formatted_text (pretty_printer *pp) { unsigned int chunk; - output_buffer *buffer = pp_buffer (pp); + output_buffer * const buffer = pp_buffer (pp); struct chunk_info *chunk_array = buffer->cur_chunk_array; const char **args = chunk_array->args; @@ -2640,6 +2774,101 @@ test_null_urls () } } +/* Verify that URLification works as expected. */ + +static void +pp_printf_with_urlifier (pretty_printer *pp, + const urlifier *urlifier, + const char *msg, ...) +{ + va_list ap; + + va_start (ap, msg); + text_info text (msg, &ap, errno); + pp_format (pp, &text, urlifier); + pp_output_formatted_text (pp); + va_end (ap); +} + + +void +test_urlification () +{ + class test_urlifier : public urlifier + { + public: + char * + get_url_for_quoted_text (const char *p, size_t sz) const final override + { + if (!strncmp (p, "-foption", sz)) + return xstrdup ("http://example.com"); + return nullptr; + } + }; + + auto_fix_quotes fix_quotes; + const test_urlifier urlifier; + + /* Uses of "%<" and "%>". */ + { + { + pretty_printer pp; + pp.url_format = URL_FORMAT_NONE; + pp_printf_with_urlifier (&pp, &urlifier, + "foo %<-foption%> % bar"); + ASSERT_STREQ ("foo `-foption' `unrecognized' bar", + pp_formatted_text (&pp)); + } + { + pretty_printer pp; + pp.url_format = URL_FORMAT_ST; + pp_printf_with_urlifier (&pp, &urlifier, + "foo %<-foption%> % bar"); + ASSERT_STREQ + ("foo `\33]8;;http://example.com\33\\-foption\33]8;;\33\\'" + " `unrecognized' bar", + pp_formatted_text (&pp)); + } + { + pretty_printer pp; + pp.url_format = URL_FORMAT_BEL; + pp_printf_with_urlifier (&pp, &urlifier, + "foo %<-foption%> % bar"); + ASSERT_STREQ + ("foo `\33]8;;http://example.com\a-foption\33]8;;\a'" + " `unrecognized' bar", + pp_formatted_text (&pp)); + } + } + + /* Use of "%qs". */ + { + pretty_printer pp; + pp.url_format = URL_FORMAT_ST; + pp_printf_with_urlifier (&pp, &urlifier, + "foo %qs %qs bar", + "-foption", "unrecognized"); + ASSERT_STREQ + ("foo `\33]8;;http://example.com\33\\-foption\33]8;;\33\\'" + " `unrecognized' bar", + pp_formatted_text (&pp)); + } + + /* Mixed usage of %< and %s, where the quoted string is built between + a mixture of phase 1 and phase 2. */ + { + pretty_printer pp; + pp.url_format = URL_FORMAT_ST; + pp_printf_with_urlifier (&pp, &urlifier, + "foo %<-f%s%> bar", + "option"); + /* We don't support this, but make sure we don't crash. */ + ASSERT_STREQ + ("foo `-foption' bar", + pp_formatted_text (&pp)); + } +} + /* Test multibyte awareness. */ static void test_utf8 () { @@ -2690,6 +2919,7 @@ pretty_print_cc_tests () test_prefixes_and_wrapping (); test_urls (); test_null_urls (); + test_urlification (); test_utf8 (); } diff --git a/gcc/pretty-print.h b/gcc/pretty-print.h index 8759f0def38..9ba2c0a406e 100644 --- a/gcc/pretty-print.h +++ b/gcc/pretty-print.h @@ -228,6 +228,8 @@ class format_postprocessor /* True if colors should be shown. */ #define pp_show_color(PP) (PP)->show_color +class urlifier; + /* The data structure that contains the bare minimum required to do proper pretty-printing. Clients may derived from this structure and add additional fields they need. */ @@ -404,7 +406,8 @@ extern void pp_verbatim (pretty_printer *, const char *, ...) ATTRIBUTE_GCC_PPDIAG(2,3); extern void pp_flush (pretty_printer *); extern void pp_really_flush (pretty_printer *); -extern void pp_format (pretty_printer *, text_info *); +extern void pp_format (pretty_printer *, text_info *, + const urlifier * = nullptr); extern void pp_output_formatted_text (pretty_printer *); extern void pp_format_verbatim (pretty_printer *, text_info *); diff --git a/gcc/selftest-run-tests.cc b/gcc/selftest-run-tests.cc index e2fc8f84b1b..cb53e90ebaf 100644 --- a/gcc/selftest-run-tests.cc +++ b/gcc/selftest-run-tests.cc @@ -120,6 +120,7 @@ selftest::run_tests () lang_hooks.run_lang_selftests (); text_art_tests (); + gcc_urlifier_cc_tests (); /* Run the analyzer selftests (if enabled). */ ana::selftest::run_analyzer_selftests (); diff --git a/gcc/selftest.h b/gcc/selftest.h index 20d522afda4..b0a4142fe34 100644 --- a/gcc/selftest.h +++ b/gcc/selftest.h @@ -231,6 +231,7 @@ extern void et_forest_cc_tests (); extern void fibonacci_heap_cc_tests (); extern void fold_const_cc_tests (); extern void function_tests_cc_tests (); +extern void gcc_urlifier_cc_tests (); extern void ggc_tests_cc_tests (); extern void gimple_cc_tests (); extern void hash_map_tests_cc_tests (); diff --git a/gcc/toplev.cc b/gcc/toplev.cc index 9a734890a18..6ca25c6f909 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -88,6 +88,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-modref.h" #include "ipa-param-manipulation.h" #include "dbgcnt.h" +#include "gcc-urlifier.h" #include "selftest.h" @@ -1049,6 +1050,7 @@ general_init (const char *argv0, bool init_signals) global_dc->option_state = &global_options; global_dc->option_name = option_name; global_dc->get_option_url = get_option_url; + global_dc->m_urlifier = make_gcc_urlifier (); if (init_signals) { From patchwork Thu Nov 2 13:19:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Malcolm X-Patchwork-Id: 160879 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp349456vqu; Thu, 2 Nov 2023 06:22:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE9UjJRIkiS7szjqSmrJPLr9obuTxLBIt9I6vJrk57rGAQfijli9MiGjB5IeP4T1nqnpymL X-Received: by 2002:a05:620a:4407:b0:777:27f9:7e54 with SMTP id v7-20020a05620a440700b0077727f97e54mr21964032qkp.50.1698931354785; Thu, 02 Nov 2023 06:22:34 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698931354; cv=pass; d=google.com; s=arc-20160816; b=Fe0uhwvJLPMQUM+UZtOwzcIFhjmPWNMbVTnenIf3O3kVNoUYHDXAH11qLHHuGpTQ5M EmeZYxeskGbz3hzuUCWIlAMaC/Q+JBHyMLrJEFbKJCcamDt0jygBkY4zUbOhoQR4F1wf sZFJyydsYJr21JXGpwUSGODGvDW1xev1BJyXScoc0dlVTGbXHtLO7CS/mG/xKcZ4+vcY F0TYnMn3Iwz4itDgQDvGVLO6QKbvbpbcVxuoJyTwVcT0MzhXZNVVlna0a0HIfDDNXL+j riWPoK/L0QyUTlL4uXmiu3lUBc/NAWZKoJWsFr+dNqmFuWoxV1qIMLddQRH3/grmzID8 RIcw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=DS8uvjSdbwqbZNuOQwMnijyGCDu3juUQXL4Bru4cl7s=; fh=NXemEfxTRbZtBxUkxR2ehQUaYlcDfMdzPkO8MChVQE4=; b=n8dzI6Fz8z5gY+6FidIN87EPIkLp5MnNNjSHkoXFDWI+b+bVLGCcTxaQpIUA3yludQ hAMC2V2TuwtkbsYgmvEox/0ftV/BLBguLj/BJrvqH2Rtcj9fQAliKLchDjT1z+YDK9me B3bGaDX+qq99Ky3jyQ6GokuJZEPW8ezK81ulMp2XD7nq+xrHqpF23xpm1r4qIXMGu9qd 3WvH4rm8uQAaNCk0cokb4nNio5gSl+r7a7nBJyJcMFo1+sa8zF7fbldbYAeHNzlP2eat Qp+7zNbQFk+aC1R011+2b74Qwpq1X10VKzzC1u/NlJ9eGey2KS1gvPPXN0Qri9ufAhRS su5g== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ahF4bleP; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id dp1-20020a05620a2b4100b007742a7ffa0csi4392897qkb.155.2023.11.02.06.22.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 06:22:34 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ahF4bleP; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 37BE4385E012 for ; Thu, 2 Nov 2023 13:22:34 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 496B23858C5F for ; Thu, 2 Nov 2023 13:19:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 496B23858C5F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 496B23858C5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931190; cv=none; b=pWGBwkNAYqteu5tfrd5mSOGpr0TKEB+Ctjo7epGjSCFfU7hgyQiDDXNg545O+jRxnJYnpsrjJSLawP+XW/5/pnJGFerLs1fhKylDE1AGNddaL0WEvhQ6HB/tiuccbZcW5vNYRJWDUbzJ17IdyHwG2zddlHldZt9ripDUCxMsru0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698931190; c=relaxed/simple; bh=zhf6TrUJDU+lydPCyPoL4Rt9FCjz+FtceHUd9HM3I9g=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=uOeLAVKuhyOGi+8nWqgE+LFkDa4Sc4udlEQR484i/KcBJ5Pj1FzU/CspT88jegMLtX+V/7d45/Q2UogyiL0zCnFhVaWNf8LWGkAiPg/syGAsl/MI685jPUBTmxjWkINFKtdCsQhaL4OYu0ARq00JaQ5a5M2NS3HlRvSULkJfmT4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1698931180; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DS8uvjSdbwqbZNuOQwMnijyGCDu3juUQXL4Bru4cl7s=; b=ahF4bleP39jGqlaHFAlxMmntaFwuXs7mf5HdqjON0lz5YG4CxggnaSMFQpTIix7At35LXs IqLZYmxQ/8a4jGdWZLsJnwjZMitE0A2TrV3r2BviYqUv29dqBSH5H65i/7G/CBfxRVe0Qx BRSXrkPCpoNgEfiuZ3v0L0L5Pqj16DE= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-161-RIEzBDKOPDuSkg5XcBpIjw-1; Thu, 02 Nov 2023 09:19:37 -0400 X-MC-Unique: RIEzBDKOPDuSkg5XcBpIjw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AAA9C85A58B for ; Thu, 2 Nov 2023 13:19:37 +0000 (UTC) Received: from t14s.localdomain.com (unknown [10.22.8.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 673691C060BA; Thu, 2 Nov 2023 13:19:37 +0000 (UTC) From: David Malcolm To: gcc-patches@gcc.gnu.org Cc: David Malcolm Subject: [PATCH 4/4] RFC: add contrib/regenerate-index-urls.py Date: Thu, 2 Nov 2023 09:19:33 -0400 Message-Id: <20231102131933.2161191-5-dmalcolm@redhat.com> In-Reply-To: <20231102131933.2161191-1-dmalcolm@redhat.com> References: <20231102131933.2161191-1-dmalcolm@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, LIKELY_SPAM_BODY, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781458644415376068 X-GMAIL-MSGID: 1781458644415376068 This patch adds a script for regenerating gcc/gcc-urlifier.def from the result of "make html", and uses it to regenerate the file. It works, but perhaps we should be instead capturing the URLs and merging it with the data from the .opt files so that the URLifier is reusing the option-parsing logic. contrib/ChangeLog: * regenerate-index-urls.py: New file. gcc/ChangeLog: * gcc-urlifier.def: Regenerate. --- contrib/regenerate-index-urls.py | 245 +++ gcc/gcc-urlifier.def | 2516 +++++++++++++++++++++++++++++- 2 files changed, 2759 insertions(+), 2 deletions(-) create mode 100755 contrib/regenerate-index-urls.py diff --git a/contrib/regenerate-index-urls.py b/contrib/regenerate-index-urls.py new file mode 100755 index 00000000000..d405e90b587 --- /dev/null +++ b/contrib/regenerate-index-urls.py @@ -0,0 +1,245 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2023 Free Software Foundation, Inc. +# +# Script to regenerate gcc/gcc-urlifier.def +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 3, or (at your option) any later +# version. +# +# GCC is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . */ + + +import argparse +from collections import namedtuple +from pathlib import Path +import sys +import re +import unittest + + +class Index: + def __init__(self): + self.entries = {} + self.duplicates = set() + + def add_entry(self, matched_text, url_suffix, verbose=False): + if matched_text in self.duplicates: + return + if matched_text in self.entries: + if url_suffix != self.entries[matched_text]: + if verbose: + print(f'duplicate: {matched_text=}: {url_suffix} != {self.entries[matched_text]}') + del self.entries[matched_text] + self.duplicates.add(matched_text) + return + self.entries[matched_text] = url_suffix + + def add_hardcoded_entries(self, hardcoded_entries): + for text, url_suffix in hardcoded_entries: + self.add_entry(text, url_suffix) + + def get_url_suffix(self, text): + return self.entries.get(text) + + def parse_option_index(self, input_filename, verbose=False): + with open(input_filename) as f: + for line in f: + self.parse_html_line_option_index(line, verbose) + + def parse_html_line_option_index(self, line, verbose=False): + if verbose: + print(repr(line)) + + # Update for this in the GCC website's bin/preprocess process_html_file: + # | sed -e 's/_002d/-/g' -e 's/_002a/*/g' \ + line = line.replace('_002d', '-') + line = line.replace('_002a', '*') + + # e.g. fmodulo-sched + m = re.search(r'([\S]+)', line) + if not m: + return + if verbose: + print(m.groups()) + url_suffix, index_text = m.groups() + #print(f'{url_suffix=} {index_text=}') + # FIXME: assume we need to add a leading dash... + option = '-' + index_text + url_suffix = 'gcc/' + url_suffix + self.add_entry(option, url_suffix, verbose) + + # Also detect the "no-" prefixes from options, and add the + # positive form + # TODO: are these all valid? + # Do we need to parse the .opt files, or look at the + # option data? + if option[:5] == '-Wno-': + self.add_entry('-W' + option[5:], url_suffix, verbose) + if option[:5] == '-fno-': + self.add_entry('-f' + option[5:], url_suffix, verbose) + + +def get_str_as_c(s): + # For now, we don't handle escaping + return '"%s"' % s + +class Entry(namedtuple('NamedTuple', ['matched_text', 'url_suffix'])): + def write_as_c(self, outfile): + outfile.write('DOC_URL (%s, %s),\n' + % (get_str_as_c(self.matched_text), + get_str_as_c(self.url_suffix))) + + +class DataTable: + def __init__(self, index): + self.entries = [] + for text, url_suffix in sorted(index.entries.items()): + self.entries.append(Entry(text, url_suffix)) + + def write_as_c(self, outfile): + for entry in self.entries: + entry.write_as_c(outfile) + +# TODO: options: +# - path to BUILDDIR/gcc +# - path to SRCDIR/gcc ? + +# FIXME: what about duplicates? +# FIXME: also, per-target duplicates +# FIXME: what about "no-" prefix? +# FIXME: but some are "-", some are "--", some are "--f"... +# FIXME: should we also parse the common.opt etc? + +# The index ought to have pragmas, and perhaps attributes. +# Ideally we'd get this from 'gcc/Concept-and-Symbol-Index.html' +# Unfortunately the wordings don't quite match, so for now, we +# hardcode these. +DOC_URL = Entry +HARDCODED_ENTRIES = [ +DOC_URL ("#pragma GCC diagnostic", "gcc/Diagnostic-Pragmas.html"), +DOC_URL ("#pragma GCC diagnostic ignored_attributes", "gcc/Diagnostic-Pragmas.html"), +DOC_URL ("#pragma GCC ivdep", "gcc/Loop-Specific-Pragmas.html#index-pragma-GCC-ivdep"), +DOC_URL ("#pragma GCC novector", "gcc/Loop-Specific-Pragmas.html#index-pragma-GCC-novector"), +DOC_URL ("#pragma GCC optimize", "gcc/Function-Specific-Option-Pragmas.html#index-pragma-GCC-optimize"), +DOC_URL ("#pragma GCC pop_options", "gcc/Push_002fPop-Macro-Pragmas.html"), +DOC_URL ("#pragma GCC push_options", "gcc/Push_002fPop-Macro-Pragmas.html"), +DOC_URL ("#pragma GCC reset_options", "gcc/Function-Specific-Option-Pragmas.html#index-pragma-GCC-reset_005foptions"), +DOC_URL ("#pragma GCC target", "gcc/Function-Specific-Option-Pragmas.html#index-pragma-GCC-target"), +DOC_URL ("#pragma GCC unroll", "gcc/Loop-Specific-Pragmas.html#index-pragma-GCC-unroll-n"), +DOC_URL ("#pragma GCC visibility", "gcc/Visibility-Pragmas.html"), +DOC_URL ("#pragma GCC visibility pop", "gcc/Visibility-Pragmas.html"), +DOC_URL ("#pragma message", "gcc/Diagnostic-Pragmas.html"), +DOC_URL ("#pragma pack", "gcc/Structure-Layout-Pragmas.html"), +DOC_URL ("#pragma redefine_extname", "gcc/Symbol-Renaming-Pragmas.html"), +DOC_URL ("#pragma scalar_storage_order", "gcc/Structure-Layout-Pragmas.html"), +DOC_URL ("#pragma weak", "gcc/Weak-Pragmas.html"), +] + +# Unit-testing: run this from "BUILDDIR/gcc", with --unit-test +INPUT_HTML_PATH = Path('HTML/gcc-14.0.0') # FIXME: version + +class TestParsingIndex(unittest.TestCase): + def test_parse_line(self): + index = Index() + index.parse_html_line_option_index('fmodulo-sched') + self.assertEqual(index.get_url_suffix('-fmodulo-sched'), + 'gcc/Optimize-Options.html#index-fmodulo-sched') + + def test_negated_flag(self): + index = Index() + index.parse_html_line_option_index('fno-analyzerStatic Analyzer Options\n') + print(index.entries) + self.assertEqual(index.get_url_suffix('-fno-analyzer'), + 'gcc/Static-Analyzer-Options.html#index-fno-analyzer') + self.assertEqual(index.get_url_suffix('-fanalyzer'), + 'gcc/Static-Analyzer-Options.html#index-fno-analyzer') + + def test_negated_warning(self): + index = Index() + index.parse_html_line_option_index('Wno-allocaWarning Options\n') + print(index.entries) + self.assertEqual(index.get_url_suffix('-Wno-alloca'), + 'gcc/Warning-Options.html#index-Wno-alloca') + self.assertEqual(index.get_url_suffix('-Walloca'), + 'gcc/Warning-Options.html#index-Wno-alloca') + + def test_parse_option_index(self): + index = Index() + index.parse_option_index(INPUT_HTML_PATH / 'gcc/Option-Index.html') + self.assertEqual(index.get_url_suffix('-fmodulo-sched'), + 'gcc/Optimize-Options.html#index-fmodulo-sched') + self.assertEqual(index.get_url_suffix('-O'), + 'gcc/Optimize-Options.html#index-O') + self.assertEqual(index.get_url_suffix('-O0'), + 'gcc/Optimize-Options.html#index-O0') + + self.assertEqual(index.get_url_suffix('-Wframe-larger-than='), + 'gcc/Warning-Options.html#index-Wframe-larger-than_003d') + + # For now, we skip duplicates, rather than trying to have + # target-specific URLs. + self.assertEqual(index.get_url_suffix('-march'), None) + self.assertIn('-march', index.duplicates) + + def test_hardcoded_entries(self): + index = Index() + index.add_hardcoded_entries(HARDCODED_ENTRIES) + self.assertEqual(index.get_url_suffix('#pragma GCC diagnostic'), + 'gcc/Diagnostic-Pragmas.html') + +class TestDataTable(unittest.TestCase): + def test_table(self): + index = Index() + index.add_hardcoded_entries(HARDCODED_ENTRIES) + index.parse_option_index(INPUT_HTML_PATH / 'gcc/Option-Index.html') + + # Test some hardcoded entries + self.assertEqual(index.get_url_suffix('#pragma GCC diagnostic'), + 'gcc/Diagnostic-Pragmas.html') + self.assertEqual(index.get_url_suffix('#pragma weak'), + 'gcc/Weak-Pragmas.html') + + # Test some parsed entries: + # TODO: this comes out as "-version", rather than "--version" + if 0: + self.assertEqual(index.get_url_suffix('--version'), + 'gcc/Overall-Options.html#index-version') + self.assertEqual(index.get_url_suffix('-fpack-struct'), + 'gcc/Code-Gen-Options.html#index-fpack-struct') + + table = DataTable(index) + if 0: + table.write(sys.stdout) + self.assertEqual(table.entries[0], + Entry('#pragma GCC diagnostic', + 'gcc/Diagnostic-Pragmas.html')) + self.assertEqual(table.entries[-1], + Entry('-z', 'gcc/Link-Options.html#index-z')) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('base_html_dir', type=Path) + parser.add_argument('--unit-test', action='store_true') + args = parser.parse_args() + + if args.unit_test: + unittest.main(argv=[sys.argv[0], '-v']) + else: + index = Index() + index.add_hardcoded_entries(HARDCODED_ENTRIES) + index.parse_option_index(args.base_html_dir / 'gcc/Option-Index.html') + table = DataTable(index) + table.write_as_c(sys.stdout) diff --git a/gcc/gcc-urlifier.def b/gcc/gcc-urlifier.def index 360de930e9e..18e296d2e0c 100644 --- a/gcc/gcc-urlifier.def +++ b/gcc/gcc-urlifier.def @@ -1,4 +1,3 @@ -/* Keep this file sorted. */ DOC_URL ("#pragma GCC diagnostic", "gcc/Diagnostic-Pragmas.html"), DOC_URL ("#pragma GCC diagnostic ignored_attributes", "gcc/Diagnostic-Pragmas.html"), DOC_URL ("#pragma GCC ivdep", "gcc/Loop-Specific-Pragmas.html#index-pragma-GCC-ivdep"), @@ -16,5 +15,2518 @@ DOC_URL ("#pragma pack", "gcc/Structure-Layout-Pragmas.html"), DOC_URL ("#pragma redefine_extname", "gcc/Symbol-Renaming-Pragmas.html"), DOC_URL ("#pragma scalar_storage_order", "gcc/Structure-Layout-Pragmas.html"), DOC_URL ("#pragma weak", "gcc/Weak-Pragmas.html"), -DOC_URL ("--version", "gcc/Overall-Options.html#index-version"), +DOC_URL ("-###", "gcc/Overall-Options.html#index-_0023_0023_0023"), +DOC_URL ("-A", "gcc/Preprocessor-Options.html#index-A"), +DOC_URL ("-B", "gcc/Directory-Options.html#index-B"), +DOC_URL ("-Bdynamic", "gcc/VxWorks-Options.html#index-Bdynamic"), +DOC_URL ("-Bstatic", "gcc/VxWorks-Options.html#index-Bstatic"), +DOC_URL ("-C", "gcc/Preprocessor-Options.html#index-C"), +DOC_URL ("-CC", "gcc/Preprocessor-Options.html#index-CC"), +DOC_URL ("-D", "gcc/Preprocessor-Options.html#index-D-1"), +DOC_URL ("-F", "gcc/Darwin-Options.html#index-F"), +DOC_URL ("-H", "gcc/Preprocessor-Options.html#index-H"), +DOC_URL ("-I", "gcc/Directory-Options.html#index-I"), +DOC_URL ("-I-", "gcc/Directory-Options.html#index-I-"), +DOC_URL ("-L", "gcc/Directory-Options.html#index-L"), +DOC_URL ("-M", "gcc/Preprocessor-Options.html#index-M"), +DOC_URL ("-MD", "gcc/Preprocessor-Options.html#index-MD"), +DOC_URL ("-MF", "gcc/Preprocessor-Options.html#index-MF"), +DOC_URL ("-MG", "gcc/Preprocessor-Options.html#index-MG"), +DOC_URL ("-MM", "gcc/Preprocessor-Options.html#index-MM"), +DOC_URL ("-MMD", "gcc/Preprocessor-Options.html#index-MMD"), +DOC_URL ("-MP", "gcc/Preprocessor-Options.html#index-MP"), +DOC_URL ("-MQ", "gcc/Preprocessor-Options.html#index-MQ"), +DOC_URL ("-MT", "gcc/Preprocessor-Options.html#index-MT"), +DOC_URL ("-Mno-modules", "gcc/Preprocessor-Options.html#index-Mno-modules"), +DOC_URL ("-O", "gcc/Optimize-Options.html#index-O"), +DOC_URL ("-O0", "gcc/Optimize-Options.html#index-O0"), +DOC_URL ("-O1", "gcc/Optimize-Options.html#index-O1"), +DOC_URL ("-O2", "gcc/Optimize-Options.html#index-O2"), +DOC_URL ("-O3", "gcc/Optimize-Options.html#index-O3"), +DOC_URL ("-Ofast", "gcc/Optimize-Options.html#index-Ofast"), +DOC_URL ("-Og", "gcc/Optimize-Options.html#index-Og"), +DOC_URL ("-Os", "gcc/Optimize-Options.html#index-Os"), +DOC_URL ("-Oz", "gcc/Optimize-Options.html#index-Oz"), +DOC_URL ("-P", "gcc/Preprocessor-Options.html#index-P"), +DOC_URL ("-Q", "gcc/Developer-Options.html#index-Q"), +DOC_URL ("-Qn", "gcc/System-V-Options.html#index-Qn"), +DOC_URL ("-Qy", "gcc/System-V-Options.html#index-Qy"), +DOC_URL ("-T", "gcc/Link-Options.html#index-T"), +DOC_URL ("-U", "gcc/Preprocessor-Options.html#index-U"), +DOC_URL ("-Wa", "gcc/Assembler-Options.html#index-Wa"), +DOC_URL ("-Wabi-tag", "gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag"), +DOC_URL ("-Walloc-size-larger-than=", "gcc/Warning-Options.html#index-Walloc-size-larger-than_003d"), +DOC_URL ("-Walloca-larger-than=", "gcc/Warning-Options.html#index-Walloca-larger-than_003d"), +DOC_URL ("-Warray-parameter", "gcc/Warning-Options.html#index-Wno-array-parameter"), +DOC_URL ("-Wbidi-chars=", "gcc/Warning-Options.html#index-Wbidi-chars_003d"), +DOC_URL ("-Wcast-align=strict", "gcc/Warning-Options.html#index-Wcast-align_003dstrict"), +DOC_URL ("-Wcomment", "gcc/Warning-Options.html#index-Wcomment"), +DOC_URL ("-Wcomments", "gcc/Warning-Options.html#index-Wcomments"), +DOC_URL ("-Wcompare-distinct-pointer-types", "gcc/Warning-Options.html#index-Wcompare-distinct-pointer-types"), +DOC_URL ("-Wexpansion-to-defined", "gcc/Warning-Options.html#index-Wexpansion-to-defined"), +DOC_URL ("-Wformat=", "gcc/Warning-Options.html#index-Wformat_003d"), +DOC_URL ("-Wformat=1", "gcc/Warning-Options.html#index-Wformat_003d1"), +DOC_URL ("-Wformat=2", "gcc/Warning-Options.html#index-Wformat_003d2"), +DOC_URL ("-Wframe-larger-than=", "gcc/Warning-Options.html#index-Wframe-larger-than_003d"), +DOC_URL ("-Wimplicit-fallthrough=", "gcc/Warning-Options.html#index-Wimplicit-fallthrough_003d"), +DOC_URL ("-Winterference-size", "gcc/Warning-Options.html#index-Winterference-size"), +DOC_URL ("-Wl", "gcc/Link-Options.html#index-Wl"), +DOC_URL ("-Wlarger-than", "gcc/Warning-Options.html#index-Wno-larger-than"), +DOC_URL ("-Wlarger-than-byte-size", "gcc/Warning-Options.html#index-Wlarger-than-byte-size"), +DOC_URL ("-Wlarger-than=", "gcc/Warning-Options.html#index-Wlarger-than_003d"), +DOC_URL ("-Wno-abi", "gcc/Warning-Options.html#index-Wno-abi"), +DOC_URL ("-Wno-absolute-value", "gcc/Warning-Options.html#index-Wno-absolute-value"), +DOC_URL ("-Wno-addr-space-convert", "gcc/AVR-Options.html#index-Wno-addr-space-convert"), +DOC_URL ("-Wno-address", "gcc/Warning-Options.html#index-Wno-address"), +DOC_URL ("-Wno-address-of-packed-member", "gcc/Warning-Options.html#index-Wno-address-of-packed-member"), +DOC_URL ("-Wno-aggregate-return", "gcc/Warning-Options.html#index-Wno-aggregate-return"), +DOC_URL ("-Wno-aggressive-loop-optimizations", "gcc/Warning-Options.html#index-Wno-aggressive-loop-optimizations"), +DOC_URL ("-Wno-aligned-new", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-aligned-new"), +DOC_URL ("-Wno-all", "gcc/Warning-Options.html#index-Wno-all"), +DOC_URL ("-Wno-alloc-zero", "gcc/Warning-Options.html#index-Wno-alloc-zero"), +DOC_URL ("-Wno-alloca", "gcc/Warning-Options.html#index-Wno-alloca"), +DOC_URL ("-Wno-analyzer-allocation-size", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-allocation-size"), +DOC_URL ("-Wno-analyzer-deref-before-check", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-deref-before-check"), +DOC_URL ("-Wno-analyzer-double-fclose", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-double-fclose"), +DOC_URL ("-Wno-analyzer-double-free", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-double-free"), +DOC_URL ("-Wno-analyzer-exposure-through-output-file", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-exposure-through-output-file"), +DOC_URL ("-Wno-analyzer-exposure-through-uninit-copy", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-exposure-through-uninit-copy"), +DOC_URL ("-Wno-analyzer-fd-access-mode-mismatch", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-fd-access-mode-mismatch"), +DOC_URL ("-Wno-analyzer-fd-double-close", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-fd-double-close"), +DOC_URL ("-Wno-analyzer-fd-leak", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-fd-leak"), +DOC_URL ("-Wno-analyzer-fd-phase-mismatch", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-fd-phase-mismatch"), +DOC_URL ("-Wno-analyzer-fd-type-mismatch", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-fd-type-mismatch"), +DOC_URL ("-Wno-analyzer-fd-use-after-close", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-fd-use-after-close"), +DOC_URL ("-Wno-analyzer-fd-use-without-check", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-fd-use-without-check"), +DOC_URL ("-Wno-analyzer-file-leak", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-file-leak"), +DOC_URL ("-Wno-analyzer-free-of-non-heap", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-free-of-non-heap"), +DOC_URL ("-Wno-analyzer-imprecise-fp-arithmetic", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-imprecise-fp-arithmetic"), +DOC_URL ("-Wno-analyzer-infinite-recursion", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-infinite-recursion"), +DOC_URL ("-Wno-analyzer-jump-through-null", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-jump-through-null"), +DOC_URL ("-Wno-analyzer-malloc-leak", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-malloc-leak"), +DOC_URL ("-Wno-analyzer-mismatching-deallocation", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-mismatching-deallocation"), +DOC_URL ("-Wno-analyzer-null-argument", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-null-argument"), +DOC_URL ("-Wno-analyzer-null-dereference", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-null-dereference"), +DOC_URL ("-Wno-analyzer-out-of-bounds", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-out-of-bounds"), +DOC_URL ("-Wno-analyzer-overlapping-buffers", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-overlapping-buffers"), +DOC_URL ("-Wno-analyzer-possible-null-argument", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-possible-null-argument"), +DOC_URL ("-Wno-analyzer-possible-null-dereference", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-possible-null-dereference"), +DOC_URL ("-Wno-analyzer-putenv-of-auto-var", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-putenv-of-auto-var"), +DOC_URL ("-Wno-analyzer-shift-count-negative", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-shift-count-negative"), +DOC_URL ("-Wno-analyzer-shift-count-overflow", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-shift-count-overflow"), +DOC_URL ("-Wno-analyzer-stale-setjmp-buffer", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-stale-setjmp-buffer"), +DOC_URL ("-Wno-analyzer-tainted-allocation-size", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-tainted-allocation-size"), +DOC_URL ("-Wno-analyzer-tainted-array-index", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-tainted-array-index"), +DOC_URL ("-Wno-analyzer-tainted-assertion", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-tainted-assertion"), +DOC_URL ("-Wno-analyzer-tainted-divisor", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-tainted-divisor"), +DOC_URL ("-Wno-analyzer-tainted-offset", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-tainted-offset"), +DOC_URL ("-Wno-analyzer-tainted-size", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-tainted-size"), +DOC_URL ("-Wno-analyzer-too-complex", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-too-complex"), +DOC_URL ("-Wno-analyzer-unsafe-call-within-signal-handler", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-unsafe-call-within-signal-handler"), +DOC_URL ("-Wno-analyzer-use-after-free", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-use-after-free"), +DOC_URL ("-Wno-analyzer-use-of-pointer-in-stale-stack-frame", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-use-of-pointer-in-stale-stack-frame"), +DOC_URL ("-Wno-analyzer-use-of-uninitialized-value", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-use-of-uninitialized-value"), +DOC_URL ("-Wno-analyzer-va-arg-type-mismatch", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-va-arg-type-mismatch"), +DOC_URL ("-Wno-analyzer-va-list-exhausted", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-va-list-exhausted"), +DOC_URL ("-Wno-analyzer-va-list-leak", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-va-list-leak"), +DOC_URL ("-Wno-analyzer-va-list-use-after-va-end", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-va-list-use-after-va-end"), +DOC_URL ("-Wno-analyzer-write-to-const", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-write-to-const"), +DOC_URL ("-Wno-analyzer-write-to-string-literal", "gcc/Static-Analyzer-Options.html#index-Wno-analyzer-write-to-string-literal"), +DOC_URL ("-Wno-arith-conversion", "gcc/Warning-Options.html#index-Wno-arith-conversion"), +DOC_URL ("-Wno-array-bounds", "gcc/Warning-Options.html#index-Wno-array-bounds"), +DOC_URL ("-Wno-array-compare", "gcc/Warning-Options.html#index-Wno-array-compare"), +DOC_URL ("-Wno-array-parameter", "gcc/Warning-Options.html#index-Wno-array-parameter"), +DOC_URL ("-Wno-assign-intercept", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-assign-intercept"), +DOC_URL ("-Wno-attribute-alias", "gcc/Warning-Options.html#index-Wno-attribute-alias"), +DOC_URL ("-Wno-attribute-warning", "gcc/Warning-Options.html#index-Wno-attribute-warning"), +DOC_URL ("-Wno-attributes", "gcc/Warning-Options.html#index-Wno-attributes"), +DOC_URL ("-Wno-bad-function-cast", "gcc/Warning-Options.html#index-Wno-bad-function-cast"), +DOC_URL ("-Wno-bidi-chars", "gcc/Warning-Options.html#index-Wno-bidi-chars"), +DOC_URL ("-Wno-bool-compare", "gcc/Warning-Options.html#index-Wno-bool-compare"), +DOC_URL ("-Wno-bool-operation", "gcc/Warning-Options.html#index-Wno-bool-operation"), +DOC_URL ("-Wno-builtin-declaration-mismatch", "gcc/Warning-Options.html#index-Wno-builtin-declaration-mismatch"), +DOC_URL ("-Wno-builtin-macro-redefined", "gcc/Warning-Options.html#index-Wno-builtin-macro-redefined"), +DOC_URL ("-Wno-c++-compat", "gcc/Warning-Options.html#index-Wno-c_002b_002b-compat"), +DOC_URL ("-Wno-c++11-compat", "gcc/Warning-Options.html#index-Wno-c_002b_002b11-compat"), +DOC_URL ("-Wno-c++11-extensions", "gcc/Warning-Options.html#index-Wno-c_002b_002b11-extensions"), +DOC_URL ("-Wno-c++14-compat", "gcc/Warning-Options.html#index-Wno-c_002b_002b14-compat"), +DOC_URL ("-Wno-c++14-extensions", "gcc/Warning-Options.html#index-Wno-c_002b_002b14-extensions"), +DOC_URL ("-Wno-c++17-compat", "gcc/Warning-Options.html#index-Wno-c_002b_002b17-compat"), +DOC_URL ("-Wno-c++17-extensions", "gcc/Warning-Options.html#index-Wno-c_002b_002b17-extensions"), +DOC_URL ("-Wno-c++20-compat", "gcc/Warning-Options.html#index-Wno-c_002b_002b20-compat"), +DOC_URL ("-Wno-c++20-extensions", "gcc/Warning-Options.html#index-Wno-c_002b_002b20-extensions"), +DOC_URL ("-Wno-c++23-extensions", "gcc/Warning-Options.html#index-Wno-c_002b_002b23-extensions"), +DOC_URL ("-Wno-c11-c2x-compat", "gcc/Warning-Options.html#index-Wno-c11-c2x-compat"), +DOC_URL ("-Wno-c90-c99-compat", "gcc/Warning-Options.html#index-Wno-c90-c99-compat"), +DOC_URL ("-Wno-c99-c11-compat", "gcc/Warning-Options.html#index-Wno-c99-c11-compat"), +DOC_URL ("-Wno-cast-align", "gcc/Warning-Options.html#index-Wno-cast-align"), +DOC_URL ("-Wno-cast-function-type", "gcc/Warning-Options.html#index-Wno-cast-function-type"), +DOC_URL ("-Wno-cast-qual", "gcc/Warning-Options.html#index-Wno-cast-qual"), +DOC_URL ("-Wno-catch-value", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-catch-value"), +DOC_URL ("-Wno-char-subscripts", "gcc/Warning-Options.html#index-Wno-char-subscripts"), +DOC_URL ("-Wno-class-conversion", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-class-conversion"), +DOC_URL ("-Wno-class-memaccess", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-class-memaccess"), +DOC_URL ("-Wno-clobbered", "gcc/Warning-Options.html#index-Wno-clobbered"), +DOC_URL ("-Wno-comma-subscript", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-comma-subscript"), +DOC_URL ("-Wno-complain-wrong-lang", "gcc/Warning-Options.html#index-Wno-complain-wrong-lang"), +DOC_URL ("-Wno-conditionally-supported", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-conditionally-supported"), +DOC_URL ("-Wno-conversion", "gcc/Warning-Options.html#index-Wno-conversion"), +DOC_URL ("-Wno-conversion-null", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-conversion-null"), +DOC_URL ("-Wno-coverage-invalid-line-number", "gcc/Warning-Options.html#index-Wno-coverage-invalid-line-number"), +DOC_URL ("-Wno-coverage-mismatch", "gcc/Warning-Options.html#index-Wno-coverage-mismatch"), +DOC_URL ("-Wno-cpp", "gcc/Warning-Options.html#index-Wno-cpp"), +DOC_URL ("-Wno-ctad-maybe-unsupported", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-ctad-maybe-unsupported"), +DOC_URL ("-Wno-ctor-dtor-privacy", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-ctor-dtor-privacy"), +DOC_URL ("-Wno-dangling-else", "gcc/Warning-Options.html#index-Wno-dangling-else"), +DOC_URL ("-Wno-dangling-pointer", "gcc/Warning-Options.html#index-Wno-dangling-pointer"), +DOC_URL ("-Wno-dangling-reference", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-dangling-reference"), +DOC_URL ("-Wno-date-time", "gcc/Warning-Options.html#index-Wno-date-time"), +DOC_URL ("-Wno-declaration-after-statement", "gcc/Warning-Options.html#index-Wno-declaration-after-statement"), +DOC_URL ("-Wno-delete-incomplete", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-delete-incomplete"), +DOC_URL ("-Wno-delete-non-virtual-dtor", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-delete-non-virtual-dtor"), +DOC_URL ("-Wno-deprecated", "gcc/Warning-Options.html#index-Wno-deprecated"), +DOC_URL ("-Wno-deprecated-copy", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-deprecated-copy"), +DOC_URL ("-Wno-deprecated-declarations", "gcc/Warning-Options.html#index-Wno-deprecated-declarations"), +DOC_URL ("-Wno-deprecated-enum-enum-conversion", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-deprecated-enum-enum-conversion"), +DOC_URL ("-Wno-deprecated-enum-float-conversion", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-deprecated-enum-float-conversion"), +DOC_URL ("-Wno-designated-init", "gcc/Warning-Options.html#index-Wno-designated-init"), +DOC_URL ("-Wno-disabled-optimization", "gcc/Warning-Options.html#index-Wno-disabled-optimization"), +DOC_URL ("-Wno-discarded-array-qualifiers", "gcc/Warning-Options.html#index-Wno-discarded-array-qualifiers"), +DOC_URL ("-Wno-discarded-qualifiers", "gcc/Warning-Options.html#index-Wno-discarded-qualifiers"), +DOC_URL ("-Wno-div-by-zero", "gcc/Warning-Options.html#index-Wno-div-by-zero"), +DOC_URL ("-Wno-double-promotion", "gcc/Warning-Options.html#index-Wno-double-promotion"), +DOC_URL ("-Wno-duplicate-decl-specifier", "gcc/Warning-Options.html#index-Wno-duplicate-decl-specifier"), +DOC_URL ("-Wno-duplicated-branches", "gcc/Warning-Options.html#index-Wno-duplicated-branches"), +DOC_URL ("-Wno-duplicated-cond", "gcc/Warning-Options.html#index-Wno-duplicated-cond"), +DOC_URL ("-Wno-effc++", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-effc_002b_002b"), +DOC_URL ("-Wno-elaborated-enum-base", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-elaborated-enum-base"), +DOC_URL ("-Wno-empty-body", "gcc/Warning-Options.html#index-Wno-empty-body"), +DOC_URL ("-Wno-enum-compare", "gcc/Warning-Options.html#index-Wno-enum-compare"), +DOC_URL ("-Wno-enum-conversion", "gcc/Warning-Options.html#index-Wno-enum-conversion"), +DOC_URL ("-Wno-enum-int-mismatch", "gcc/Warning-Options.html#index-Wno-enum-int-mismatch"), +DOC_URL ("-Wno-error", "gcc/Warning-Options.html#index-Wno-error"), +DOC_URL ("-Wno-error=", "gcc/Warning-Options.html#index-Wno-error_003d"), +DOC_URL ("-Wno-exceptions", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-exceptions"), +DOC_URL ("-Wno-extra-semi", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-extra-semi"), +DOC_URL ("-Wno-fatal-errors", "gcc/Warning-Options.html#index-Wno-fatal-errors"), +DOC_URL ("-Wno-flex-array-member-not-at-end", "gcc/Warning-Options.html#index-Wno-flex-array-member-not-at-end"), +DOC_URL ("-Wno-float-conversion", "gcc/Warning-Options.html#index-Wno-float-conversion"), +DOC_URL ("-Wno-float-equal", "gcc/Warning-Options.html#index-Wno-float-equal"), +DOC_URL ("-Wno-format-contains-nul", "gcc/Warning-Options.html#index-Wno-format-contains-nul"), +DOC_URL ("-Wno-format-extra-args", "gcc/Warning-Options.html#index-Wno-format-extra-args"), +DOC_URL ("-Wno-format-nonliteral", "gcc/Warning-Options.html#index-Wno-format-nonliteral"), +DOC_URL ("-Wno-format-security", "gcc/Warning-Options.html#index-Wno-format-security"), +DOC_URL ("-Wno-format-signedness", "gcc/Warning-Options.html#index-Wno-format-signedness"), +DOC_URL ("-Wno-format-y2k", "gcc/Warning-Options.html#index-Wno-format-y2k"), +DOC_URL ("-Wno-format-zero-length", "gcc/Warning-Options.html#index-Wno-format-zero-length"), +DOC_URL ("-Wno-frame-address", "gcc/Warning-Options.html#index-Wno-frame-address"), +DOC_URL ("-Wno-free-nonheap-object", "gcc/Warning-Options.html#index-Wno-free-nonheap-object"), +DOC_URL ("-Wno-if-not-aligned", "gcc/Warning-Options.html#index-Wno-if-not-aligned"), +DOC_URL ("-Wno-ignored-attributes", "gcc/Warning-Options.html#index-Wno-ignored-attributes"), +DOC_URL ("-Wno-ignored-qualifiers", "gcc/Warning-Options.html#index-Wno-ignored-qualifiers"), +DOC_URL ("-Wno-implicit", "gcc/Warning-Options.html#index-Wno-implicit"), +DOC_URL ("-Wno-implicit-fallthrough", "gcc/Warning-Options.html#index-Wno-implicit-fallthrough"), +DOC_URL ("-Wno-implicit-function-declaration", "gcc/Warning-Options.html#index-Wno-implicit-function-declaration"), +DOC_URL ("-Wno-implicit-int", "gcc/Warning-Options.html#index-Wno-implicit-int"), +DOC_URL ("-Wno-inaccessible-base", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-inaccessible-base"), +DOC_URL ("-Wno-incompatible-pointer-types", "gcc/Warning-Options.html#index-Wno-incompatible-pointer-types"), +DOC_URL ("-Wno-infinite-recursion", "gcc/Warning-Options.html#index-Wno-infinite-recursion"), +DOC_URL ("-Wno-inherited-variadic-ctor", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-inherited-variadic-ctor"), +DOC_URL ("-Wno-init-list-lifetime", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-init-list-lifetime"), +DOC_URL ("-Wno-init-self", "gcc/Warning-Options.html#index-Wno-init-self"), +DOC_URL ("-Wno-inline", "gcc/Warning-Options.html#index-Wno-inline"), +DOC_URL ("-Wno-int-conversion", "gcc/Warning-Options.html#index-Wno-int-conversion"), +DOC_URL ("-Wno-int-in-bool-context", "gcc/Warning-Options.html#index-Wno-int-in-bool-context"), +DOC_URL ("-Wno-int-to-pointer-cast", "gcc/Warning-Options.html#index-Wno-int-to-pointer-cast"), +DOC_URL ("-Wno-invalid-constexpr", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-invalid-constexpr"), +DOC_URL ("-Wno-invalid-imported-macros", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-invalid-imported-macros"), +DOC_URL ("-Wno-invalid-memory-model", "gcc/Warning-Options.html#index-Wno-invalid-memory-model"), +DOC_URL ("-Wno-invalid-offsetof", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-invalid-offsetof"), +DOC_URL ("-Wno-invalid-pch", "gcc/Warning-Options.html#index-Wno-invalid-pch"), +DOC_URL ("-Wno-invalid-utf8", "gcc/Warning-Options.html#index-Wno-invalid-utf8"), +DOC_URL ("-Wno-jump-misses-init", "gcc/Warning-Options.html#index-Wno-jump-misses-init"), +DOC_URL ("-Wno-larger-than", "gcc/Warning-Options.html#index-Wno-larger-than"), +DOC_URL ("-Wno-literal-suffix", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-literal-suffix"), +DOC_URL ("-Wno-logical-not-parentheses", "gcc/Warning-Options.html#index-Wno-logical-not-parentheses"), +DOC_URL ("-Wno-logical-op", "gcc/Warning-Options.html#index-Wno-logical-op"), +DOC_URL ("-Wno-long-long", "gcc/Warning-Options.html#index-Wno-long-long"), +DOC_URL ("-Wno-lto-type-mismatch", "gcc/Warning-Options.html#index-Wno-lto-type-mismatch"), +DOC_URL ("-Wno-main", "gcc/Warning-Options.html#index-Wno-main"), +DOC_URL ("-Wno-maybe-uninitialized", "gcc/Warning-Options.html#index-Wno-maybe-uninitialized"), +DOC_URL ("-Wno-memset-elt-size", "gcc/Warning-Options.html#index-Wno-memset-elt-size"), +DOC_URL ("-Wno-memset-transposed-args", "gcc/Warning-Options.html#index-Wno-memset-transposed-args"), +DOC_URL ("-Wno-misleading-indentation", "gcc/Warning-Options.html#index-Wno-misleading-indentation"), +DOC_URL ("-Wno-mismatched-dealloc", "gcc/Warning-Options.html#index-Wno-mismatched-dealloc"), +DOC_URL ("-Wno-mismatched-new-delete", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-mismatched-new-delete"), +DOC_URL ("-Wno-mismatched-tags", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-mismatched-tags"), +DOC_URL ("-Wno-missing-attributes", "gcc/Warning-Options.html#index-Wno-missing-attributes"), +DOC_URL ("-Wno-missing-braces", "gcc/Warning-Options.html#index-Wno-missing-braces"), +DOC_URL ("-Wno-missing-declarations", "gcc/Warning-Options.html#index-Wno-missing-declarations"), +DOC_URL ("-Wno-missing-field-initializers", "gcc/Warning-Options.html#index-Wno-missing-field-initializers"), +DOC_URL ("-Wno-missing-format-attribute", "gcc/Warning-Options.html#index-Wno-missing-format-attribute"), +DOC_URL ("-Wno-missing-include-dirs", "gcc/Warning-Options.html#index-Wno-missing-include-dirs"), +DOC_URL ("-Wno-missing-noreturn", "gcc/Warning-Options.html#index-Wno-missing-noreturn"), +DOC_URL ("-Wno-missing-parameter-type", "gcc/Warning-Options.html#index-Wno-missing-parameter-type"), +DOC_URL ("-Wno-missing-profile", "gcc/Warning-Options.html#index-Wno-missing-profile"), +DOC_URL ("-Wno-missing-prototypes", "gcc/Warning-Options.html#index-Wno-missing-prototypes"), +DOC_URL ("-Wno-missing-requires", "gcc/Warning-Options.html#index-Wno-missing-requires"), +DOC_URL ("-Wno-missing-template-keyword", "gcc/Warning-Options.html#index-Wno-missing-template-keyword"), +DOC_URL ("-Wno-missing-variable-declarations", "gcc/Warning-Options.html#index-Wno-missing-variable-declarations"), +DOC_URL ("-Wno-misspelled-isr", "gcc/AVR-Options.html#index-Wno-misspelled-isr"), +DOC_URL ("-Wno-multichar", "gcc/Warning-Options.html#index-Wno-multichar"), +DOC_URL ("-Wno-multiple-inheritance", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-multiple-inheritance"), +DOC_URL ("-Wno-multistatement-macros", "gcc/Warning-Options.html#index-Wno-multistatement-macros"), +DOC_URL ("-Wno-namespaces", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-namespaces"), +DOC_URL ("-Wno-narrowing", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-narrowing"), +DOC_URL ("-Wno-nested-externs", "gcc/Warning-Options.html#index-Wno-nested-externs"), +DOC_URL ("-Wno-noexcept", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept"), +DOC_URL ("-Wno-noexcept-type", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept-type"), +DOC_URL ("-Wno-non-template-friend", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-template-friend"), +DOC_URL ("-Wno-non-virtual-dtor", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-virtual-dtor"), +DOC_URL ("-Wno-nonnull", "gcc/Warning-Options.html#index-Wno-nonnull"), +DOC_URL ("-Wno-nonnull-compare", "gcc/Warning-Options.html#index-Wno-nonnull-compare"), +DOC_URL ("-Wno-normalized", "gcc/Warning-Options.html#index-Wno-normalized"), +DOC_URL ("-Wno-nrvo", "gcc/Warning-Options.html#index-Wno-nrvo"), +DOC_URL ("-Wno-null-dereference", "gcc/Warning-Options.html#index-Wno-null-dereference"), +DOC_URL ("-Wno-odr", "gcc/Warning-Options.html#index-Wno-odr"), +DOC_URL ("-Wno-old-style-cast", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-old-style-cast"), +DOC_URL ("-Wno-old-style-declaration", "gcc/Warning-Options.html#index-Wno-old-style-declaration"), +DOC_URL ("-Wno-old-style-definition", "gcc/Warning-Options.html#index-Wno-old-style-definition"), +DOC_URL ("-Wno-openacc-parallelism", "gcc/Warning-Options.html#index-Wno-openacc-parallelism"), +DOC_URL ("-Wno-openmp-simd", "gcc/Warning-Options.html#index-Wno-openmp-simd"), +DOC_URL ("-Wno-overflow", "gcc/Warning-Options.html#index-Wno-overflow"), +DOC_URL ("-Wno-overlength-strings", "gcc/Warning-Options.html#index-Wno-overlength-strings"), +DOC_URL ("-Wno-overloaded-virtual", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual"), +DOC_URL ("-Wno-override-init", "gcc/Warning-Options.html#index-Wno-override-init"), +DOC_URL ("-Wno-override-init-side-effects", "gcc/Warning-Options.html#index-Wno-override-init-side-effects"), +DOC_URL ("-Wno-packed", "gcc/Warning-Options.html#index-Wno-packed"), +DOC_URL ("-Wno-packed-bitfield-compat", "gcc/Warning-Options.html#index-Wno-packed-bitfield-compat"), +DOC_URL ("-Wno-packed-not-aligned", "gcc/Warning-Options.html#index-Wno-packed-not-aligned"), +DOC_URL ("-Wno-padded", "gcc/Warning-Options.html#index-Wno-padded"), +DOC_URL ("-Wno-parentheses", "gcc/Warning-Options.html#index-Wno-parentheses"), +DOC_URL ("-Wno-pedantic", "gcc/Warning-Options.html#index-Wno-pedantic"), +DOC_URL ("-Wno-pedantic-ms-format", "gcc/Warning-Options.html#index-Wno-pedantic-ms-format"), +DOC_URL ("-Wno-pessimizing-move", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-pessimizing-move"), +DOC_URL ("-Wno-placement-new", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new"), +DOC_URL ("-Wno-pointer-arith", "gcc/Warning-Options.html#index-Wno-pointer-arith"), +DOC_URL ("-Wno-pointer-compare", "gcc/Warning-Options.html#index-Wno-pointer-compare"), +DOC_URL ("-Wno-pointer-sign", "gcc/Warning-Options.html#index-Wno-pointer-sign"), +DOC_URL ("-Wno-pointer-to-int-cast", "gcc/Warning-Options.html#index-Wno-pointer-to-int-cast"), +DOC_URL ("-Wno-pragmas", "gcc/Warning-Options.html#index-Wno-pragmas"), +DOC_URL ("-Wno-prio-ctor-dtor", "gcc/Warning-Options.html#index-Wno-prio-ctor-dtor"), +DOC_URL ("-Wno-property-assign-default", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-property-assign-default"), +DOC_URL ("-Wno-protocol", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-protocol"), +DOC_URL ("-Wno-range-loop-construct", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-range-loop-construct"), +DOC_URL ("-Wno-redundant-decls", "gcc/Warning-Options.html#index-Wno-redundant-decls"), +DOC_URL ("-Wno-redundant-move", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-move"), +DOC_URL ("-Wno-redundant-tags", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-tags"), +DOC_URL ("-Wno-register", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-register"), +DOC_URL ("-Wno-reorder", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-reorder"), +DOC_URL ("-Wno-restrict", "gcc/Warning-Options.html#index-Wno-restrict"), +DOC_URL ("-Wno-return-local-addr", "gcc/Warning-Options.html#index-Wno-return-local-addr"), +DOC_URL ("-Wno-return-type", "gcc/Warning-Options.html#index-Wno-return-type"), +DOC_URL ("-Wno-scalar-storage-order", "gcc/Warning-Options.html#index-Wno-scalar-storage-order"), +DOC_URL ("-Wno-selector", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-selector"), +DOC_URL ("-Wno-self-move", "gcc/Warning-Options.html#index-Wno-self-move"), +DOC_URL ("-Wno-sequence-point", "gcc/Warning-Options.html#index-Wno-sequence-point"), +DOC_URL ("-Wno-shadow", "gcc/Warning-Options.html#index-Wno-shadow"), +DOC_URL ("-Wno-shadow-ivar", "gcc/Warning-Options.html#index-Wno-shadow-ivar"), +DOC_URL ("-Wno-shift-count-negative", "gcc/Warning-Options.html#index-Wno-shift-count-negative"), +DOC_URL ("-Wno-shift-count-overflow", "gcc/Warning-Options.html#index-Wno-shift-count-overflow"), +DOC_URL ("-Wno-shift-negative-value", "gcc/Warning-Options.html#index-Wno-shift-negative-value"), +DOC_URL ("-Wno-shift-overflow", "gcc/Warning-Options.html#index-Wno-shift-overflow"), +DOC_URL ("-Wno-sign-compare", "gcc/Warning-Options.html#index-Wno-sign-compare"), +DOC_URL ("-Wno-sign-conversion", "gcc/Warning-Options.html#index-Wno-sign-conversion"), +DOC_URL ("-Wno-sign-promo", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-sign-promo"), +DOC_URL ("-Wno-sized-deallocation", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-sized-deallocation"), +DOC_URL ("-Wno-sizeof-array-argument", "gcc/Warning-Options.html#index-Wno-sizeof-array-argument"), +DOC_URL ("-Wno-sizeof-array-div", "gcc/Warning-Options.html#index-Wno-sizeof-array-div"), +DOC_URL ("-Wno-sizeof-pointer-div", "gcc/Warning-Options.html#index-Wno-sizeof-pointer-div"), +DOC_URL ("-Wno-sizeof-pointer-memaccess", "gcc/Warning-Options.html#index-Wno-sizeof-pointer-memaccess"), +DOC_URL ("-Wno-stack-protector", "gcc/Warning-Options.html#index-Wno-stack-protector"), +DOC_URL ("-Wno-strict-aliasing", "gcc/Warning-Options.html#index-Wno-strict-aliasing"), +DOC_URL ("-Wno-strict-flex-arrays", "gcc/Warning-Options.html#index-Wno-strict-flex-arrays"), +DOC_URL ("-Wno-strict-null-sentinel", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-strict-null-sentinel"), +DOC_URL ("-Wno-strict-overflow", "gcc/Warning-Options.html#index-Wno-strict-overflow"), +DOC_URL ("-Wno-strict-prototypes", "gcc/Warning-Options.html#index-Wno-strict-prototypes"), +DOC_URL ("-Wno-strict-selector-match", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-strict-selector-match"), +DOC_URL ("-Wno-string-compare", "gcc/Warning-Options.html#index-Wno-string-compare"), +DOC_URL ("-Wno-stringop-overread", "gcc/Warning-Options.html#index-Wno-stringop-overread"), +DOC_URL ("-Wno-stringop-truncation", "gcc/Warning-Options.html#index-Wno-stringop-truncation"), +DOC_URL ("-Wno-subobject-linkage", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-subobject-linkage"), +DOC_URL ("-Wno-suggest-attribute=", "gcc/Warning-Options.html#index-Wno-suggest-attribute_003d"), +DOC_URL ("-Wno-suggest-attribute=cold", "gcc/Warning-Options.html#index-Wno-suggest-attribute_003dcold"), +DOC_URL ("-Wno-suggest-attribute=const", "gcc/Warning-Options.html#index-Wno-suggest-attribute_003dconst"), +DOC_URL ("-Wno-suggest-attribute=format", "gcc/Warning-Options.html#index-Wno-suggest-attribute_003dformat"), +DOC_URL ("-Wno-suggest-attribute=malloc", "gcc/Warning-Options.html#index-Wno-suggest-attribute_003dmalloc"), +DOC_URL ("-Wno-suggest-attribute=noreturn", "gcc/Warning-Options.html#index-Wno-suggest-attribute_003dnoreturn"), +DOC_URL ("-Wno-suggest-attribute=pure", "gcc/Warning-Options.html#index-Wno-suggest-attribute_003dpure"), +DOC_URL ("-Wno-suggest-final-methods", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-methods"), +DOC_URL ("-Wno-suggest-final-types", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-types"), +DOC_URL ("-Wno-suggest-override", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-override"), +DOC_URL ("-Wno-switch", "gcc/Warning-Options.html#index-Wno-switch"), +DOC_URL ("-Wno-switch-bool", "gcc/Warning-Options.html#index-Wno-switch-bool"), +DOC_URL ("-Wno-switch-default", "gcc/Warning-Options.html#index-Wno-switch-default"), +DOC_URL ("-Wno-switch-enum", "gcc/Warning-Options.html#index-Wno-switch-enum"), +DOC_URL ("-Wno-switch-outside-range", "gcc/Warning-Options.html#index-Wno-switch-outside-range"), +DOC_URL ("-Wno-switch-unreachable", "gcc/Warning-Options.html#index-Wno-switch-unreachable"), +DOC_URL ("-Wno-sync-nand", "gcc/Warning-Options.html#index-Wno-sync-nand"), +DOC_URL ("-Wno-system-headers", "gcc/Warning-Options.html#index-Wno-system-headers"), +DOC_URL ("-Wno-tautological-compare", "gcc/Warning-Options.html#index-Wno-tautological-compare"), +DOC_URL ("-Wno-templates", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-templates"), +DOC_URL ("-Wno-terminate", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-terminate"), +DOC_URL ("-Wno-traditional", "gcc/Warning-Options.html#index-Wno-traditional"), +DOC_URL ("-Wno-traditional-conversion", "gcc/Warning-Options.html#index-Wno-traditional-conversion"), +DOC_URL ("-Wno-trampolines", "gcc/Warning-Options.html#index-Wno-trampolines"), +DOC_URL ("-Wno-trivial-auto-var-init", "gcc/Warning-Options.html#index-Wno-trivial-auto-var-init"), +DOC_URL ("-Wno-tsan", "gcc/Warning-Options.html#index-Wno-tsan"), +DOC_URL ("-Wno-type-limits", "gcc/Warning-Options.html#index-Wno-type-limits"), +DOC_URL ("-Wno-undeclared-selector", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-undeclared-selector"), +DOC_URL ("-Wno-undef", "gcc/Warning-Options.html#index-Wno-undef"), +DOC_URL ("-Wno-unicode", "gcc/Warning-Options.html#index-Wno-unicode"), +DOC_URL ("-Wno-uninitialized", "gcc/Warning-Options.html#index-Wno-uninitialized"), +DOC_URL ("-Wno-unknown-pragmas", "gcc/Warning-Options.html#index-Wno-unknown-pragmas"), +DOC_URL ("-Wno-unsafe-loop-optimizations", "gcc/Warning-Options.html#index-Wno-unsafe-loop-optimizations"), +DOC_URL ("-Wno-unsuffixed-float-constants", "gcc/Warning-Options.html#index-Wno-unsuffixed-float-constants"), +DOC_URL ("-Wno-unused", "gcc/Warning-Options.html#index-Wno-unused"), +DOC_URL ("-Wno-unused-but-set-parameter", "gcc/Warning-Options.html#index-Wno-unused-but-set-parameter"), +DOC_URL ("-Wno-unused-but-set-variable", "gcc/Warning-Options.html#index-Wno-unused-but-set-variable"), +DOC_URL ("-Wno-unused-const-variable", "gcc/Warning-Options.html#index-Wno-unused-const-variable"), +DOC_URL ("-Wno-unused-function", "gcc/Warning-Options.html#index-Wno-unused-function"), +DOC_URL ("-Wno-unused-label", "gcc/Warning-Options.html#index-Wno-unused-label"), +DOC_URL ("-Wno-unused-local-typedefs", "gcc/Warning-Options.html#index-Wno-unused-local-typedefs"), +DOC_URL ("-Wno-unused-parameter", "gcc/Warning-Options.html#index-Wno-unused-parameter"), +DOC_URL ("-Wno-unused-result", "gcc/Warning-Options.html#index-Wno-unused-result"), +DOC_URL ("-Wno-unused-value", "gcc/Warning-Options.html#index-Wno-unused-value"), +DOC_URL ("-Wno-unused-variable", "gcc/Warning-Options.html#index-Wno-unused-variable"), +DOC_URL ("-Wno-use-after-free", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free"), +DOC_URL ("-Wno-useless-cast", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-useless-cast"), +DOC_URL ("-Wno-varargs", "gcc/Warning-Options.html#index-Wno-varargs"), +DOC_URL ("-Wno-variadic-macros", "gcc/Warning-Options.html#index-Wno-variadic-macros"), +DOC_URL ("-Wno-vector-operation-performance", "gcc/Warning-Options.html#index-Wno-vector-operation-performance"), +DOC_URL ("-Wno-vexing-parse", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-vexing-parse"), +DOC_URL ("-Wno-virtual-inheritance", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-inheritance"), +DOC_URL ("-Wno-virtual-move-assign", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-move-assign"), +DOC_URL ("-Wno-vla", "gcc/Warning-Options.html#index-Wno-vla"), +DOC_URL ("-Wno-vla-parameter", "gcc/Warning-Options.html#index-Wno-vla-parameter"), +DOC_URL ("-Wno-volatile", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-volatile"), +DOC_URL ("-Wno-volatile-register-var", "gcc/Warning-Options.html#index-Wno-volatile-register-var"), +DOC_URL ("-Wno-write-strings", "gcc/Warning-Options.html#index-Wno-write-strings"), +DOC_URL ("-Wno-xor-used-as-pow", "gcc/Warning-Options.html#index-Wno-xor-used-as-pow"), +DOC_URL ("-Wno-zero-as-null-pointer-constant", "gcc/C_002b_002b-Dialect-Options.html#index-Wno-zero-as-null-pointer-constant"), +DOC_URL ("-Wnormalized=", "gcc/Warning-Options.html#index-Wnormalized_003d"), +DOC_URL ("-Wobjc-root-class", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wobjc-root-class"), +DOC_URL ("-Wp", "gcc/Preprocessor-Options.html#index-Wp"), +DOC_URL ("-Wshadow=compatible-local", "gcc/Warning-Options.html#index-Wshadow_003dcompatible-local"), +DOC_URL ("-Wshadow=global", "gcc/Warning-Options.html#index-Wshadow_003dglobal"), +DOC_URL ("-Wshadow=local", "gcc/Warning-Options.html#index-Wshadow_003dlocal"), +DOC_URL ("-Wstrict-aliasing=n", "gcc/Warning-Options.html#index-Wstrict-aliasing_003dn"), +DOC_URL ("-Wtrigraphs", "gcc/Warning-Options.html#index-Wtrigraphs"), +DOC_URL ("-Wunused-macros", "gcc/Warning-Options.html#index-Wunused-macros"), +DOC_URL ("-Wvla-larger-than=", "gcc/Warning-Options.html#index-Wvla-larger-than_003d"), +DOC_URL ("-Wvla-parameter", "gcc/Warning-Options.html#index-Wno-vla-parameter"), +DOC_URL ("-Xassembler", "gcc/Assembler-Options.html#index-Xassembler"), +DOC_URL ("-Xbind-lazy", "gcc/VxWorks-Options.html#index-Xbind-lazy"), +DOC_URL ("-Xbind-now", "gcc/VxWorks-Options.html#index-Xbind-now"), +DOC_URL ("-Xlinker", "gcc/Link-Options.html#index-Xlinker"), +DOC_URL ("-Xpreprocessor", "gcc/Preprocessor-Options.html#index-Xpreprocessor"), +DOC_URL ("-YP", "gcc/System-V-Options.html#index-YP"), +DOC_URL ("-Ym", "gcc/System-V-Options.html#index-Ym"), +DOC_URL ("-all_load", "gcc/Darwin-Options.html#index-all_005fload"), +DOC_URL ("-allowable_client", "gcc/Darwin-Options.html#index-allowable_005fclient"), +DOC_URL ("-analyzer", "gcc/Static-Analyzer-Options.html#index-analyzer"), +DOC_URL ("-arch_errors_fatal", "gcc/Darwin-Options.html#index-arch_005ferrors_005ffatal"), +DOC_URL ("-aux-info", "gcc/C-Dialect-Options.html#index-aux-info"), +DOC_URL ("-bind_at_load", "gcc/Darwin-Options.html#index-bind_005fat_005fload"), +DOC_URL ("-block-ops-unaligned-vsx", "gcc/RS_002f6000-and-PowerPC-Options.html#index-block-ops-unaligned-vsx"), +DOC_URL ("-bundle", "gcc/Darwin-Options.html#index-bundle"), +DOC_URL ("-bundle_loader", "gcc/Darwin-Options.html#index-bundle_005floader"), +DOC_URL ("-client_name", "gcc/Darwin-Options.html#index-client_005fname"), +DOC_URL ("-compatibility_version", "gcc/Darwin-Options.html#index-compatibility_005fversion"), +DOC_URL ("-coverage", "gcc/Instrumentation-Options.html#index-coverage"), +DOC_URL ("-current_version", "gcc/Darwin-Options.html#index-current_005fversion"), +DOC_URL ("-dA", "gcc/Developer-Options.html#index-dA"), +DOC_URL ("-dH", "gcc/Developer-Options.html#index-dH"), +DOC_URL ("-dI", "gcc/Preprocessor-Options.html#index-dI"), +DOC_URL ("-dM", "gcc/Preprocessor-Options.html#index-dM"), +DOC_URL ("-dN", "gcc/Preprocessor-Options.html#index-dN"), +DOC_URL ("-dP", "gcc/Developer-Options.html#index-dP"), +DOC_URL ("-dU", "gcc/Preprocessor-Options.html#index-dU"), +DOC_URL ("-da", "gcc/Developer-Options.html#index-da"), +DOC_URL ("-dead_strip", "gcc/Darwin-Options.html#index-dead_005fstrip"), +DOC_URL ("-dependency-file", "gcc/Darwin-Options.html#index-dependency-file"), +DOC_URL ("-dp", "gcc/Developer-Options.html#index-dp"), +DOC_URL ("-dump-analyzer-exploded-nodes", "gcc/Static-Analyzer-Options.html#index-dump-analyzer-exploded-nodes"), +DOC_URL ("-dump-analyzer-exploded-nodes-2", "gcc/Static-Analyzer-Options.html#index-dump-analyzer-exploded-nodes-2"), +DOC_URL ("-dump-analyzer-exploded-nodes-3", "gcc/Static-Analyzer-Options.html#index-dump-analyzer-exploded-nodes-3"), +DOC_URL ("-dump-analyzer-feasibility", "gcc/Static-Analyzer-Options.html#index-dump-analyzer-feasibility"), +DOC_URL ("-dumpbase", "gcc/Overall-Options.html#index-dumpbase"), +DOC_URL ("-dumpbase-ext", "gcc/Overall-Options.html#index-dumpbase-ext"), +DOC_URL ("-dumpdir", "gcc/Overall-Options.html#index-dumpdir"), +DOC_URL ("-dumpfullversion", "gcc/Developer-Options.html#index-dumpfullversion"), +DOC_URL ("-dumpmachine", "gcc/Developer-Options.html#index-dumpmachine"), +DOC_URL ("-dumpspecs", "gcc/Developer-Options.html#index-dumpspecs"), +DOC_URL ("-dumpversion", "gcc/Developer-Options.html#index-dumpversion"), +DOC_URL ("-dx", "gcc/Developer-Options.html#index-dx"), +DOC_URL ("-dylib_file", "gcc/Darwin-Options.html#index-dylib_005ffile"), +DOC_URL ("-dylinker_install_name", "gcc/Darwin-Options.html#index-dylinker_005finstall_005fname"), +DOC_URL ("-dynamic", "gcc/Darwin-Options.html#index-dynamic"), +DOC_URL ("-dynamiclib", "gcc/Darwin-Options.html#index-dynamiclib"), +DOC_URL ("-e", "gcc/Link-Options.html#index-e"), +DOC_URL ("-entry", "gcc/Link-Options.html#index-entry"), +DOC_URL ("-exported_symbols_list", "gcc/Darwin-Options.html#index-exported_005fsymbols_005flist"), +DOC_URL ("-fPIC", "gcc/Code-Gen-Options.html#index-fPIC"), +DOC_URL ("-fPIE", "gcc/Code-Gen-Options.html#index-fPIE"), +DOC_URL ("-fabi-compat-version", "gcc/C_002b_002b-Dialect-Options.html#index-fabi-compat-version"), +DOC_URL ("-fabi-version", "gcc/C_002b_002b-Dialect-Options.html#index-fabi-version"), +DOC_URL ("-fada-spec-parent", "gcc/Overall-Options.html#index-fada-spec-parent"), +DOC_URL ("-faggressive-loop-optimizations", "gcc/Optimize-Options.html#index-faggressive-loop-optimizations"), +DOC_URL ("-falign-functions", "gcc/Optimize-Options.html#index-falign-functions"), +DOC_URL ("-falign-jumps", "gcc/Optimize-Options.html#index-falign-jumps"), +DOC_URL ("-falign-labels", "gcc/Optimize-Options.html#index-falign-labels"), +DOC_URL ("-falign-loops", "gcc/Optimize-Options.html#index-falign-loops"), +DOC_URL ("-faligned-new", "gcc/C_002b_002b-Dialect-Options.html#index-faligned-new"), +DOC_URL ("-fallocation-dce", "gcc/Optimize-Options.html#index-fno-allocation-dce"), +DOC_URL ("-fallow-store-data-races", "gcc/Optimize-Options.html#index-fallow-store-data-races"), +DOC_URL ("-fanalyzer-checker", "gcc/Static-Analyzer-Options.html#index-fanalyzer-checker"), +DOC_URL ("-fasan-shadow-offset", "gcc/Instrumentation-Options.html#index-fasan-shadow-offset"), +DOC_URL ("-fassociative-math", "gcc/Optimize-Options.html#index-fassociative-math"), +DOC_URL ("-fasynchronous-unwind-tables", "gcc/Code-Gen-Options.html#index-fasynchronous-unwind-tables"), +DOC_URL ("-fauto-inc-dec", "gcc/Optimize-Options.html#index-fauto-inc-dec"), +DOC_URL ("-fauto-profile", "gcc/Optimize-Options.html#index-fauto-profile"), +DOC_URL ("-fbranch-probabilities", "gcc/Optimize-Options.html#index-fbranch-probabilities"), +DOC_URL ("-fcall-saved", "gcc/Code-Gen-Options.html#index-fcall-saved"), +DOC_URL ("-fcall-used", "gcc/Code-Gen-Options.html#index-fcall-used"), +DOC_URL ("-fcaller-saves", "gcc/Optimize-Options.html#index-fcaller-saves"), +DOC_URL ("-fcallgraph-info", "gcc/Developer-Options.html#index-fcallgraph-info"), +DOC_URL ("-fcanon-prefix-map", "gcc/Overall-Options.html#index-fcanon-prefix-map"), +DOC_URL ("-fcanonical-system-headers", "gcc/Preprocessor-Options.html#index-fno-canonical-system-headers"), +DOC_URL ("-fcf-protection", "gcc/Instrumentation-Options.html#index-fcf-protection"), +DOC_URL ("-fcheck-new", "gcc/C_002b_002b-Dialect-Options.html#index-fcheck-new"), +DOC_URL ("-fcode-hoisting", "gcc/Optimize-Options.html#index-fcode-hoisting"), +DOC_URL ("-fcombine-stack-adjustments", "gcc/Optimize-Options.html#index-fcombine-stack-adjustments"), +DOC_URL ("-fcompare-debug-second", "gcc/Developer-Options.html#index-fcompare-debug-second"), +DOC_URL ("-fcompare-elim", "gcc/Optimize-Options.html#index-fcompare-elim"), +DOC_URL ("-fconcepts", "gcc/C_002b_002b-Dialect-Options.html#index-fconcepts"), +DOC_URL ("-fconcepts-ts", "gcc/C_002b_002b-Dialect-Options.html#index-fconcepts-ts"), +DOC_URL ("-fcond-mismatch", "gcc/C-Dialect-Options.html#index-fcond-mismatch"), +DOC_URL ("-fconserve-stack", "gcc/Optimize-Options.html#index-fconserve-stack"), +DOC_URL ("-fconstant-cfstrings", "gcc/Darwin-Options.html#index-fconstant-cfstrings"), +DOC_URL ("-fconstant-string-class", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fconstant-string-class"), +DOC_URL ("-fconstexpr-cache-depth", "gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-cache-depth"), +DOC_URL ("-fconstexpr-depth", "gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-depth"), +DOC_URL ("-fconstexpr-fp-except", "gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-fp-except"), +DOC_URL ("-fconstexpr-loop-limit", "gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-loop-limit"), +DOC_URL ("-fconstexpr-ops-limit", "gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-ops-limit"), +DOC_URL ("-fcontract-assumption-mode", "gcc/C_002b_002b-Dialect-Options.html#index-fcontract-assumption-mode"), +DOC_URL ("-fcontract-build-level", "gcc/C_002b_002b-Dialect-Options.html#index-fcontract-build-level"), +DOC_URL ("-fcontract-continuation-mode", "gcc/C_002b_002b-Dialect-Options.html#index-fcontract-continuation-mode"), +DOC_URL ("-fcontract-mode", "gcc/C_002b_002b-Dialect-Options.html#index-fcontract-mode"), +DOC_URL ("-fcontract-role", "gcc/C_002b_002b-Dialect-Options.html#index-fcontract-role"), +DOC_URL ("-fcontract-strict-declarations", "gcc/C_002b_002b-Dialect-Options.html#index-fcontract-strict-declarations"), +DOC_URL ("-fcontracts", "gcc/C_002b_002b-Dialect-Options.html#index-fcontracts"), +DOC_URL ("-fcoroutines", "gcc/C_002b_002b-Dialect-Options.html#index-fcoroutines"), +DOC_URL ("-fcprop-registers", "gcc/Optimize-Options.html#index-fcprop-registers"), +DOC_URL ("-fcrossjumping", "gcc/Optimize-Options.html#index-fcrossjumping"), +DOC_URL ("-fcse-follow-jumps", "gcc/Optimize-Options.html#index-fcse-follow-jumps"), +DOC_URL ("-fcse-skip-blocks", "gcc/Optimize-Options.html#index-fcse-skip-blocks"), +DOC_URL ("-fcx-fortran-rules", "gcc/Optimize-Options.html#index-fcx-fortran-rules"), +DOC_URL ("-fcx-limited-range", "gcc/Optimize-Options.html#index-fcx-limited-range"), +DOC_URL ("-fdata-sections", "gcc/Optimize-Options.html#index-fdata-sections"), +DOC_URL ("-fdbg-cnt", "gcc/Developer-Options.html#index-fdbg-cnt"), +DOC_URL ("-fdbg-cnt-list", "gcc/Developer-Options.html#index-fdbg-cnt-list"), +DOC_URL ("-fdce", "gcc/Optimize-Options.html#index-fdce"), +DOC_URL ("-fdebug-cpp", "gcc/Preprocessor-Options.html#index-fdebug-cpp"), +DOC_URL ("-fdebug-prefix-map", "gcc/Debugging-Options.html#index-fdebug-prefix-map"), +DOC_URL ("-fdeclone-ctor-dtor", "gcc/Optimize-Options.html#index-fdeclone-ctor-dtor"), +DOC_URL ("-fdefault-inline", "gcc/Inline.html#index-fno-default-inline"), +DOC_URL ("-fdelayed-branch", "gcc/Optimize-Options.html#index-fdelayed-branch"), +DOC_URL ("-fdelete-dead-exceptions", "gcc/Code-Gen-Options.html#index-fdelete-dead-exceptions"), +DOC_URL ("-fdelete-null-pointer-checks", "gcc/Optimize-Options.html#index-fdelete-null-pointer-checks"), +DOC_URL ("-fdeps-", "gcc/C-Dialect-Options.html#index-fdeps-"), +DOC_URL ("-fdeps-file", "gcc/C-Dialect-Options.html#index-fdeps-file"), +DOC_URL ("-fdeps-format", "gcc/C-Dialect-Options.html#index-fdeps-format"), +DOC_URL ("-fdeps-target", "gcc/C-Dialect-Options.html#index-fdeps-target"), +DOC_URL ("-fdevirtualize", "gcc/Optimize-Options.html#index-fdevirtualize"), +DOC_URL ("-fdevirtualize-at-ltrans", "gcc/Optimize-Options.html#index-fdevirtualize-at-ltrans"), +DOC_URL ("-fdevirtualize-speculatively", "gcc/Optimize-Options.html#index-fdevirtualize-speculatively"), +DOC_URL ("-fdiagnostics-color", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-color"), +DOC_URL ("-fdiagnostics-column-origin", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin"), +DOC_URL ("-fdiagnostics-column-unit", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit"), +DOC_URL ("-fdiagnostics-escape-format", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-escape-format"), +DOC_URL ("-fdiagnostics-format", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format"), +DOC_URL ("-fdiagnostics-generate-patch", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-generate-patch"), +DOC_URL ("-fdiagnostics-minimum-margin-width", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-minimum-margin-width"), +DOC_URL ("-fdiagnostics-parseable-fixits", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-parseable-fixits"), +DOC_URL ("-fdiagnostics-path-format", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format"), +DOC_URL ("-fdiagnostics-show-location", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-location"), +DOC_URL ("-fdiagnostics-show-path-depths", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-path-depths"), +DOC_URL ("-fdiagnostics-show-template-tree", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-template-tree"), +DOC_URL ("-fdiagnostics-text-art-charset", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-text-art-charset"), +DOC_URL ("-fdiagnostics-urls", "gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls"), +DOC_URL ("-fdirectives-only", "gcc/Preprocessor-Options.html#index-fdirectives-only"), +DOC_URL ("-fdisable-", "gcc/Developer-Options.html#index-fdisable-"), +DOC_URL ("-fdpic", "gcc/SH-Options.html#index-fdpic"), +DOC_URL ("-fdse", "gcc/Optimize-Options.html#index-fdse"), +DOC_URL ("-fdump-ada-spec", "gcc/Overall-Options.html#index-fdump-ada-spec"), +DOC_URL ("-fdump-analyzer", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer"), +DOC_URL ("-fdump-analyzer-callgraph", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-callgraph"), +DOC_URL ("-fdump-analyzer-exploded-graph", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-graph"), +DOC_URL ("-fdump-analyzer-exploded-paths", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-paths"), +DOC_URL ("-fdump-analyzer-json", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json"), +DOC_URL ("-fdump-analyzer-state-purge", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-state-purge"), +DOC_URL ("-fdump-analyzer-stderr", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-stderr"), +DOC_URL ("-fdump-analyzer-supergraph", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-supergraph"), +DOC_URL ("-fdump-analyzer-untracked", "gcc/Static-Analyzer-Options.html#index-fdump-analyzer-untracked"), +DOC_URL ("-fdump-debug", "gcc/Developer-Options.html#index-fdump-debug"), +DOC_URL ("-fdump-earlydebug", "gcc/Developer-Options.html#index-fdump-earlydebug"), +DOC_URL ("-fdump-final-insns", "gcc/Developer-Options.html#index-fdump-final-insns"), +DOC_URL ("-fdump-go-spec", "gcc/Overall-Options.html#index-fdump-go-spec"), +DOC_URL ("-fdump-ipa", "gcc/Developer-Options.html#index-fdump-ipa"), +DOC_URL ("-fdump-lang-all", "gcc/Developer-Options.html#index-fdump-lang-all"), +DOC_URL ("-fdump-noaddr", "gcc/Developer-Options.html#index-fdump-noaddr"), +DOC_URL ("-fdump-passes", "gcc/Developer-Options.html#index-fdump-passes"), +DOC_URL ("-fdump-rtl-pass", "gcc/Developer-Options.html#index-fdump-rtl-pass"), +DOC_URL ("-fdump-rtl-alignments", "gcc/Developer-Options.html#index-fdump-rtl-alignments"), +DOC_URL ("-fdump-rtl-all", "gcc/Developer-Options.html#index-fdump-rtl-all"), +DOC_URL ("-fdump-rtl-asmcons", "gcc/Developer-Options.html#index-fdump-rtl-asmcons"), +DOC_URL ("-fdump-rtl-auto_inc_dec", "gcc/Developer-Options.html#index-fdump-rtl-auto_005finc_005fdec"), +DOC_URL ("-fdump-rtl-barriers", "gcc/Developer-Options.html#index-fdump-rtl-barriers"), +DOC_URL ("-fdump-rtl-bbpart", "gcc/Developer-Options.html#index-fdump-rtl-bbpart"), +DOC_URL ("-fdump-rtl-bbro", "gcc/Developer-Options.html#index-fdump-rtl-bbro"), +DOC_URL ("-fdump-rtl-bypass", "gcc/Developer-Options.html#index-fdump-rtl-bypass"), +DOC_URL ("-fdump-rtl-ce1", "gcc/Developer-Options.html#index-fdump-rtl-ce1"), +DOC_URL ("-fdump-rtl-ce2", "gcc/Developer-Options.html#index-fdump-rtl-ce2"), +DOC_URL ("-fdump-rtl-ce3", "gcc/Developer-Options.html#index-fdump-rtl-ce3"), +DOC_URL ("-fdump-rtl-combine", "gcc/Developer-Options.html#index-fdump-rtl-combine"), +DOC_URL ("-fdump-rtl-compgotos", "gcc/Developer-Options.html#index-fdump-rtl-compgotos"), +DOC_URL ("-fdump-rtl-cprop_hardreg", "gcc/Developer-Options.html#index-fdump-rtl-cprop_005fhardreg"), +DOC_URL ("-fdump-rtl-csa", "gcc/Developer-Options.html#index-fdump-rtl-csa"), +DOC_URL ("-fdump-rtl-cse1", "gcc/Developer-Options.html#index-fdump-rtl-cse1"), +DOC_URL ("-fdump-rtl-cse2", "gcc/Developer-Options.html#index-fdump-rtl-cse2"), +DOC_URL ("-fdump-rtl-dbr", "gcc/Developer-Options.html#index-fdump-rtl-dbr"), +DOC_URL ("-fdump-rtl-dce", "gcc/Developer-Options.html#index-fdump-rtl-dce"), +DOC_URL ("-fdump-rtl-dce1", "gcc/Developer-Options.html#index-fdump-rtl-dce1"), +DOC_URL ("-fdump-rtl-dce2", "gcc/Developer-Options.html#index-fdump-rtl-dce2"), +DOC_URL ("-fdump-rtl-dfinish", "gcc/Developer-Options.html#index-fdump-rtl-dfinish"), +DOC_URL ("-fdump-rtl-dfinit", "gcc/Developer-Options.html#index-fdump-rtl-dfinit"), +DOC_URL ("-fdump-rtl-eh", "gcc/Developer-Options.html#index-fdump-rtl-eh"), +DOC_URL ("-fdump-rtl-eh_ranges", "gcc/Developer-Options.html#index-fdump-rtl-eh_005franges"), +DOC_URL ("-fdump-rtl-expand", "gcc/Developer-Options.html#index-fdump-rtl-expand"), +DOC_URL ("-fdump-rtl-fwprop1", "gcc/Developer-Options.html#index-fdump-rtl-fwprop1"), +DOC_URL ("-fdump-rtl-fwprop2", "gcc/Developer-Options.html#index-fdump-rtl-fwprop2"), +DOC_URL ("-fdump-rtl-gcse1", "gcc/Developer-Options.html#index-fdump-rtl-gcse1"), +DOC_URL ("-fdump-rtl-gcse2", "gcc/Developer-Options.html#index-fdump-rtl-gcse2"), +DOC_URL ("-fdump-rtl-init-regs", "gcc/Developer-Options.html#index-fdump-rtl-init-regs"), +DOC_URL ("-fdump-rtl-initvals", "gcc/Developer-Options.html#index-fdump-rtl-initvals"), +DOC_URL ("-fdump-rtl-into_cfglayout", "gcc/Developer-Options.html#index-fdump-rtl-into_005fcfglayout"), +DOC_URL ("-fdump-rtl-ira", "gcc/Developer-Options.html#index-fdump-rtl-ira"), +DOC_URL ("-fdump-rtl-jump", "gcc/Developer-Options.html#index-fdump-rtl-jump"), +DOC_URL ("-fdump-rtl-loop2", "gcc/Developer-Options.html#index-fdump-rtl-loop2"), +DOC_URL ("-fdump-rtl-mach", "gcc/Developer-Options.html#index-fdump-rtl-mach"), +DOC_URL ("-fdump-rtl-mode_sw", "gcc/Developer-Options.html#index-fdump-rtl-mode_005fsw"), +DOC_URL ("-fdump-rtl-outof_cfglayout", "gcc/Developer-Options.html#index-fdump-rtl-outof_005fcfglayout"), +DOC_URL ("-fdump-rtl-peephole2", "gcc/Developer-Options.html#index-fdump-rtl-peephole2"), +DOC_URL ("-fdump-rtl-postreload", "gcc/Developer-Options.html#index-fdump-rtl-postreload"), +DOC_URL ("-fdump-rtl-pro_and_epilogue", "gcc/Developer-Options.html#index-fdump-rtl-pro_005fand_005fepilogue"), +DOC_URL ("-fdump-rtl-ree", "gcc/Developer-Options.html#index-fdump-rtl-ree"), +DOC_URL ("-fdump-rtl-regclass", "gcc/Developer-Options.html#index-fdump-rtl-regclass"), +DOC_URL ("-fdump-rtl-rnreg", "gcc/Developer-Options.html#index-fdump-rtl-rnreg"), +DOC_URL ("-fdump-rtl-sched1", "gcc/Developer-Options.html#index-fdump-rtl-sched1"), +DOC_URL ("-fdump-rtl-sched2", "gcc/Developer-Options.html#index-fdump-rtl-sched2"), +DOC_URL ("-fdump-rtl-seqabstr", "gcc/Developer-Options.html#index-fdump-rtl-seqabstr"), +DOC_URL ("-fdump-rtl-shorten", "gcc/Developer-Options.html#index-fdump-rtl-shorten"), +DOC_URL ("-fdump-rtl-sibling", "gcc/Developer-Options.html#index-fdump-rtl-sibling"), +DOC_URL ("-fdump-rtl-sms", "gcc/Developer-Options.html#index-fdump-rtl-sms"), +DOC_URL ("-fdump-rtl-split1", "gcc/Developer-Options.html#index-fdump-rtl-split1"), +DOC_URL ("-fdump-rtl-split2", "gcc/Developer-Options.html#index-fdump-rtl-split2"), +DOC_URL ("-fdump-rtl-split3", "gcc/Developer-Options.html#index-fdump-rtl-split3"), +DOC_URL ("-fdump-rtl-split4", "gcc/Developer-Options.html#index-fdump-rtl-split4"), +DOC_URL ("-fdump-rtl-split5", "gcc/Developer-Options.html#index-fdump-rtl-split5"), +DOC_URL ("-fdump-rtl-stack", "gcc/Developer-Options.html#index-fdump-rtl-stack"), +DOC_URL ("-fdump-rtl-subreg1", "gcc/Developer-Options.html#index-fdump-rtl-subreg1"), +DOC_URL ("-fdump-rtl-subreg2", "gcc/Developer-Options.html#index-fdump-rtl-subreg2"), +DOC_URL ("-fdump-rtl-subregs_of_mode_finish", "gcc/Developer-Options.html#index-fdump-rtl-subregs_005fof_005fmode_005ffinish"), +DOC_URL ("-fdump-rtl-subregs_of_mode_init", "gcc/Developer-Options.html#index-fdump-rtl-subregs_005fof_005fmode_005finit"), +DOC_URL ("-fdump-rtl-unshare", "gcc/Developer-Options.html#index-fdump-rtl-unshare"), +DOC_URL ("-fdump-rtl-vartrack", "gcc/Developer-Options.html#index-fdump-rtl-vartrack"), +DOC_URL ("-fdump-rtl-vregs", "gcc/Developer-Options.html#index-fdump-rtl-vregs"), +DOC_URL ("-fdump-rtl-web", "gcc/Developer-Options.html#index-fdump-rtl-web"), +DOC_URL ("-fdump-statistics", "gcc/Developer-Options.html#index-fdump-statistics"), +DOC_URL ("-fdump-tree", "gcc/Developer-Options.html#index-fdump-tree"), +DOC_URL ("-fdump-tree-all", "gcc/Developer-Options.html#index-fdump-tree-all"), +DOC_URL ("-fdump-unnumbered", "gcc/Developer-Options.html#index-fdump-unnumbered"), +DOC_URL ("-fdump-unnumbered-links", "gcc/Developer-Options.html#index-fdump-unnumbered-links"), +DOC_URL ("-fearly-inlining", "gcc/Optimize-Options.html#index-fearly-inlining"), +DOC_URL ("-femit-class-debug-always", "gcc/Debugging-Options.html#index-femit-class-debug-always"), +DOC_URL ("-femit-struct-debug-baseonly", "gcc/Debugging-Options.html#index-femit-struct-debug-baseonly"), +DOC_URL ("-femit-struct-debug-detailed", "gcc/Debugging-Options.html#index-femit-struct-debug-detailed"), +DOC_URL ("-femit-struct-debug-reduced", "gcc/Debugging-Options.html#index-femit-struct-debug-reduced"), +DOC_URL ("-fenable-", "gcc/Developer-Options.html#index-fenable-"), +DOC_URL ("-fexceptions", "gcc/Code-Gen-Options.html#index-fexceptions"), +DOC_URL ("-fexcess-precision", "gcc/Optimize-Options.html#index-fexcess-precision"), +DOC_URL ("-fexec-charset", "gcc/Preprocessor-Options.html#index-fexec-charset"), +DOC_URL ("-fexpensive-optimizations", "gcc/Optimize-Options.html#index-fexpensive-optimizations"), +DOC_URL ("-fextended-identifiers", "gcc/Preprocessor-Options.html#index-fextended-identifiers"), +DOC_URL ("-ffast-math", "gcc/Optimize-Options.html#index-ffast-math"), +DOC_URL ("-ffat-lto-objects", "gcc/Optimize-Options.html#index-ffat-lto-objects"), +DOC_URL ("-ffile-prefix-map", "gcc/Overall-Options.html#index-ffile-prefix-map"), +DOC_URL ("-ffinite-math-only", "gcc/Optimize-Options.html#index-ffinite-math-only"), +DOC_URL ("-ffix-and-continue", "gcc/Darwin-Options.html#index-ffix-and-continue"), +DOC_URL ("-ffixed", "gcc/Code-Gen-Options.html#index-ffixed"), +DOC_URL ("-ffold-mem-offsets", "gcc/Optimize-Options.html#index-ffold-mem-offsets"), +DOC_URL ("-fforward-propagate", "gcc/Optimize-Options.html#index-fforward-propagate"), +DOC_URL ("-ffp-contract", "gcc/Optimize-Options.html#index-ffp-contract"), +DOC_URL ("-ffunction-sections", "gcc/Optimize-Options.html#index-ffunction-sections"), +DOC_URL ("-fgcse", "gcc/Optimize-Options.html#index-fgcse"), +DOC_URL ("-fgcse-after-reload", "gcc/Optimize-Options.html#index-fgcse-after-reload"), +DOC_URL ("-fgcse-las", "gcc/Optimize-Options.html#index-fgcse-las"), +DOC_URL ("-fgcse-lm", "gcc/Optimize-Options.html#index-fgcse-lm"), +DOC_URL ("-fgcse-sm", "gcc/Optimize-Options.html#index-fgcse-sm"), +DOC_URL ("-fgimple", "gcc/C-Dialect-Options.html#index-fgimple"), +DOC_URL ("-fgnu-runtime", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fgnu-runtime"), +DOC_URL ("-fgnu-tm", "gcc/C-Dialect-Options.html#index-fgnu-tm"), +DOC_URL ("-fgnu89-inline", "gcc/C-Dialect-Options.html#index-fgnu89-inline"), +DOC_URL ("-fgraphite-identity", "gcc/Optimize-Options.html#index-fgraphite-identity"), +DOC_URL ("-fhardcfr-check-noreturn-calls", "gcc/Instrumentation-Options.html#index-fhardcfr-check-noreturn-calls"), +DOC_URL ("-fhardcfr-skip-leaf", "gcc/Instrumentation-Options.html#index-fhardcfr-skip-leaf"), +DOC_URL ("-fharden-compares", "gcc/Instrumentation-Options.html#index-fharden-compares"), +DOC_URL ("-fharden-conditional-branches", "gcc/Instrumentation-Options.html#index-fharden-conditional-branches"), +DOC_URL ("-fharden-control-flow-redundancy", "gcc/Instrumentation-Options.html#index-fharden-control-flow-redundancy"), +DOC_URL ("-fhoist-adjacent-loads", "gcc/Optimize-Options.html#index-fhoist-adjacent-loads"), +DOC_URL ("-fhosted", "gcc/C-Dialect-Options.html#index-fhosted"), +DOC_URL ("-fif-conversion", "gcc/Optimize-Options.html#index-fif-conversion"), +DOC_URL ("-fif-conversion2", "gcc/Optimize-Options.html#index-fif-conversion2"), +DOC_URL ("-filelist", "gcc/Darwin-Options.html#index-filelist"), +DOC_URL ("-fimplicit-constexpr", "gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-constexpr"), +DOC_URL ("-findirect-data", "gcc/Darwin-Options.html#index-findirect-data"), +DOC_URL ("-findirect-inlining", "gcc/Optimize-Options.html#index-findirect-inlining"), +DOC_URL ("-finhibit-size-directive", "gcc/Code-Gen-Options.html#index-finhibit-size-directive"), +DOC_URL ("-finline-functions", "gcc/Optimize-Options.html#index-finline-functions"), +DOC_URL ("-finline-functions-called-once", "gcc/Optimize-Options.html#index-finline-functions-called-once"), +DOC_URL ("-finline-limit", "gcc/Optimize-Options.html#index-finline-limit"), +DOC_URL ("-finline-small-functions", "gcc/Optimize-Options.html#index-finline-small-functions"), +DOC_URL ("-finput-charset", "gcc/Preprocessor-Options.html#index-finput-charset"), +DOC_URL ("-finstrument-functions-exclude-file-list", "gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-file-list"), +DOC_URL ("-finstrument-functions-exclude-function-list", "gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-function-list"), +DOC_URL ("-finstrument-functions-once", "gcc/Instrumentation-Options.html#index-finstrument-functions-once"), +DOC_URL ("-fipa-bit-cp", "gcc/Optimize-Options.html#index-fipa-bit-cp"), +DOC_URL ("-fipa-cp", "gcc/Optimize-Options.html#index-fipa-cp"), +DOC_URL ("-fipa-cp-clone", "gcc/Optimize-Options.html#index-fipa-cp-clone"), +DOC_URL ("-fipa-icf", "gcc/Optimize-Options.html#index-fipa-icf"), +DOC_URL ("-fipa-modref", "gcc/Optimize-Options.html#index-fipa-modref"), +DOC_URL ("-fipa-profile", "gcc/Optimize-Options.html#index-fipa-profile"), +DOC_URL ("-fipa-pta", "gcc/Optimize-Options.html#index-fipa-pta"), +DOC_URL ("-fipa-pure-const", "gcc/Optimize-Options.html#index-fipa-pure-const"), +DOC_URL ("-fipa-ra", "gcc/Optimize-Options.html#index-fipa-ra"), +DOC_URL ("-fipa-reference", "gcc/Optimize-Options.html#index-fipa-reference"), +DOC_URL ("-fipa-reference-addressable", "gcc/Optimize-Options.html#index-fipa-reference-addressable"), +DOC_URL ("-fipa-sra", "gcc/Optimize-Options.html#index-fipa-sra"), +DOC_URL ("-fipa-stack-alignment", "gcc/Optimize-Options.html#index-fipa-stack-alignment"), +DOC_URL ("-fipa-strict-aliasing", "gcc/Optimize-Options.html#index-fipa-strict-aliasing"), +DOC_URL ("-fipa-vrp", "gcc/Optimize-Options.html#index-fipa-vrp"), +DOC_URL ("-fira-algorithm", "gcc/Optimize-Options.html#index-fira-algorithm"), +DOC_URL ("-fira-hoist-pressure", "gcc/Optimize-Options.html#index-fira-hoist-pressure"), +DOC_URL ("-fira-loop-pressure", "gcc/Optimize-Options.html#index-fira-loop-pressure"), +DOC_URL ("-fira-region", "gcc/Optimize-Options.html#index-fira-region"), +DOC_URL ("-fira-verbose", "gcc/Developer-Options.html#index-fira-verbose"), +DOC_URL ("-fisolate-erroneous-paths-attribute", "gcc/Optimize-Options.html#index-fisolate-erroneous-paths-attribute"), +DOC_URL ("-fisolate-erroneous-paths-dereference", "gcc/Optimize-Options.html#index-fisolate-erroneous-paths-dereference"), +DOC_URL ("-fivar-visibility", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fivar-visibility"), +DOC_URL ("-fivopts", "gcc/Optimize-Options.html#index-fivopts"), +DOC_URL ("-fkeep-static-consts", "gcc/Optimize-Options.html#index-fkeep-static-consts"), +DOC_URL ("-fkeep-static-functions", "gcc/Optimize-Options.html#index-fkeep-static-functions"), +DOC_URL ("-flang-info-include-translate", "gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate"), +DOC_URL ("-flang-info-include-translate-not", "gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate-not"), +DOC_URL ("-flang-info-module-cmi", "gcc/C_002b_002b-Dialect-Options.html#index-flang-info-module-cmi"), +DOC_URL ("-flarge-source-files", "gcc/Preprocessor-Options.html#index-flarge-source-files"), +DOC_URL ("-flat_namespace", "gcc/Darwin-Options.html#index-flat_005fnamespace"), +DOC_URL ("-flax-vector-conversions", "gcc/C-Dialect-Options.html#index-flax-vector-conversions"), +DOC_URL ("-fleading-underscore", "gcc/Code-Gen-Options.html#index-fleading-underscore"), +DOC_URL ("-flinker-output", "gcc/Link-Options.html#index-flinker-output"), +DOC_URL ("-flive-patching", "gcc/Optimize-Options.html#index-flive-patching"), +DOC_URL ("-flive-range-shrinkage", "gcc/Optimize-Options.html#index-flive-range-shrinkage"), +DOC_URL ("-floop-block", "gcc/Optimize-Options.html#index-floop-block"), +DOC_URL ("-floop-interchange", "gcc/Optimize-Options.html#index-floop-interchange"), +DOC_URL ("-floop-nest-optimize", "gcc/Optimize-Options.html#index-floop-nest-optimize"), +DOC_URL ("-floop-parallelize-all", "gcc/Optimize-Options.html#index-floop-parallelize-all"), +DOC_URL ("-floop-strip-mine", "gcc/Optimize-Options.html#index-floop-strip-mine"), +DOC_URL ("-floop-unroll-and-jam", "gcc/Optimize-Options.html#index-floop-unroll-and-jam"), +DOC_URL ("-flra-remat", "gcc/Optimize-Options.html#index-flra-remat"), +DOC_URL ("-flto", "gcc/Optimize-Options.html#index-flto"), +DOC_URL ("-flto-compression-level", "gcc/Optimize-Options.html#index-flto-compression-level"), +DOC_URL ("-flto-partition", "gcc/Optimize-Options.html#index-flto-partition"), +DOC_URL ("-flto-report", "gcc/Developer-Options.html#index-flto-report"), +DOC_URL ("-flto-report-wpa", "gcc/Developer-Options.html#index-flto-report-wpa"), +DOC_URL ("-fmacro-prefix-map", "gcc/Preprocessor-Options.html#index-fmacro-prefix-map"), +DOC_URL ("-fmax-errors", "gcc/Warning-Options.html#index-fmax-errors"), +DOC_URL ("-fmax-include-depth", "gcc/Preprocessor-Options.html#index-fmax-include-depth"), +DOC_URL ("-fmem-report", "gcc/Developer-Options.html#index-fmem-report"), +DOC_URL ("-fmem-report-wpa", "gcc/Developer-Options.html#index-fmem-report-wpa"), +DOC_URL ("-fmerge-all-constants", "gcc/Optimize-Options.html#index-fmerge-all-constants"), +DOC_URL ("-fmerge-constants", "gcc/Optimize-Options.html#index-fmerge-constants"), +DOC_URL ("-fmessage-length", "gcc/Diagnostic-Message-Formatting-Options.html#index-fmessage-length"), +DOC_URL ("-fmodule-header", "gcc/C_002b_002b-Dialect-Options.html#index-fmodule-header"), +DOC_URL ("-fmodule-implicit-inline", "gcc/C_002b_002b-Dialect-Options.html#index-fmodule-implicit-inline"), +DOC_URL ("-fmodule-mapper", "gcc/C_002b_002b-Dialect-Options.html#index-fmodule-mapper"), +DOC_URL ("-fmodule-only", "gcc/C_002b_002b-Dialect-Options.html#index-fmodule-only"), +DOC_URL ("-fmodulo-sched", "gcc/Optimize-Options.html#index-fmodulo-sched"), +DOC_URL ("-fmodulo-sched-allow-regmoves", "gcc/Optimize-Options.html#index-fmodulo-sched-allow-regmoves"), +DOC_URL ("-fmove-loop-invariants", "gcc/Optimize-Options.html#index-fmove-loop-invariants"), +DOC_URL ("-fmove-loop-stores", "gcc/Optimize-Options.html#index-fmove-loop-stores"), +DOC_URL ("-fmultiflags", "gcc/Developer-Options.html#index-fmultiflags"), +DOC_URL ("-fnew-inheriting-ctors", "gcc/C_002b_002b-Dialect-Options.html#index-fnew-inheriting-ctors"), +DOC_URL ("-fnew-ttp-matching", "gcc/C_002b_002b-Dialect-Options.html#index-fnew-ttp-matching"), +DOC_URL ("-fnext-runtime", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fnext-runtime"), +DOC_URL ("-fno-access-control", "gcc/C_002b_002b-Dialect-Options.html#index-fno-access-control"), +DOC_URL ("-fno-allocation-dce", "gcc/Optimize-Options.html#index-fno-allocation-dce"), +DOC_URL ("-fno-analyzer", "gcc/Static-Analyzer-Options.html#index-fno-analyzer"), +DOC_URL ("-fno-analyzer-call-summaries", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-call-summaries"), +DOC_URL ("-fno-analyzer-debug-text-art", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-debug-text-art"), +DOC_URL ("-fno-analyzer-feasibility", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility"), +DOC_URL ("-fno-analyzer-fine-grained", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-fine-grained"), +DOC_URL ("-fno-analyzer-show-duplicate-count", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-show-duplicate-count"), +DOC_URL ("-fno-analyzer-show-events-in-system-headers", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-show-events-in-system-headers"), +DOC_URL ("-fno-analyzer-state-merge", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-state-merge"), +DOC_URL ("-fno-analyzer-state-purge", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-state-purge"), +DOC_URL ("-fno-analyzer-suppress-followups", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-suppress-followups"), +DOC_URL ("-fno-analyzer-transitivity", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-transitivity"), +DOC_URL ("-fno-analyzer-undo-inlining", "gcc/Static-Analyzer-Options.html#index-fno-analyzer-undo-inlining"), +DOC_URL ("-fno-asm", "gcc/C-Dialect-Options.html#index-fno-asm"), +DOC_URL ("-fno-bit-tests", "gcc/Code-Gen-Options.html#index-fno-bit-tests"), +DOC_URL ("-fno-branch-count-reg", "gcc/Optimize-Options.html#index-fno-branch-count-reg"), +DOC_URL ("-fno-canonical-system-headers", "gcc/Preprocessor-Options.html#index-fno-canonical-system-headers"), +DOC_URL ("-fno-char8_t", "gcc/C_002b_002b-Dialect-Options.html#index-fno-char8_005ft"), +DOC_URL ("-fno-checking", "gcc/Developer-Options.html#index-fno-checking"), +DOC_URL ("-fno-compare-debug", "gcc/Developer-Options.html#index-fno-compare-debug"), +DOC_URL ("-fno-debug-types-section", "gcc/Debugging-Options.html#index-fno-debug-types-section"), +DOC_URL ("-fno-default-inline", "gcc/Inline.html#index-fno-default-inline"), +DOC_URL ("-fno-defer-pop", "gcc/Optimize-Options.html#index-fno-defer-pop"), +DOC_URL ("-fno-diagnostics-show-caret", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-caret"), +DOC_URL ("-fno-diagnostics-show-cwe", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-cwe"), +DOC_URL ("-fno-diagnostics-show-labels", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels"), +DOC_URL ("-fno-diagnostics-show-line-numbers", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers"), +DOC_URL ("-fno-diagnostics-show-option", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-option"), +DOC_URL ("-fno-diagnostics-show-rules", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-rules"), +DOC_URL ("-fno-dwarf2-cfi-asm", "gcc/Debugging-Options.html#index-fno-dwarf2-cfi-asm"), +DOC_URL ("-fno-elide-constructors", "gcc/C_002b_002b-Dialect-Options.html#index-fno-elide-constructors"), +DOC_URL ("-fno-elide-type", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-elide-type"), +DOC_URL ("-fno-eliminate-unused-debug-symbols", "gcc/Debugging-Options.html#index-fno-eliminate-unused-debug-symbols"), +DOC_URL ("-fno-eliminate-unused-debug-types", "gcc/Debugging-Options.html#index-fno-eliminate-unused-debug-types"), +DOC_URL ("-fno-enforce-eh-specs", "gcc/C_002b_002b-Dialect-Options.html#index-fno-enforce-eh-specs"), +DOC_URL ("-fno-ext-numeric-literals", "gcc/C_002b_002b-Dialect-Options.html#index-fno-ext-numeric-literals"), +DOC_URL ("-fno-extern-tls-init", "gcc/C_002b_002b-Dialect-Options.html#index-fno-extern-tls-init"), +DOC_URL ("-fno-finite-loops", "gcc/Optimize-Options.html#index-fno-finite-loops"), +DOC_URL ("-fno-fold-simple-inlines", "gcc/C_002b_002b-Dialect-Options.html#index-fno-fold-simple-inlines"), +DOC_URL ("-fno-fp-int-builtin-inexact", "gcc/Optimize-Options.html#index-fno-fp-int-builtin-inexact"), +DOC_URL ("-fno-function-cse", "gcc/Optimize-Options.html#index-fno-function-cse"), +DOC_URL ("-fno-gnu-keywords", "gcc/C_002b_002b-Dialect-Options.html#index-fno-gnu-keywords"), +DOC_URL ("-fno-gnu-unique", "gcc/Code-Gen-Options.html#index-fno-gnu-unique"), +DOC_URL ("-fno-guess-branch-probability", "gcc/Optimize-Options.html#index-fno-guess-branch-probability"), +DOC_URL ("-fno-hardcfr-check-exceptions", "gcc/Instrumentation-Options.html#index-fno-hardcfr-check-exceptions"), +DOC_URL ("-fno-hardcfr-check-returning-calls", "gcc/Instrumentation-Options.html#index-fno-hardcfr-check-returning-calls"), +DOC_URL ("-fno-ident", "gcc/Code-Gen-Options.html#index-fno-ident"), +DOC_URL ("-fno-implicit-inline-templates", "gcc/C_002b_002b-Dialect-Options.html#index-fno-implicit-inline-templates"), +DOC_URL ("-fno-inline", "gcc/Optimize-Options.html#index-fno-inline"), +DOC_URL ("-fno-ira-share-save-slots", "gcc/Optimize-Options.html#index-fno-ira-share-save-slots"), +DOC_URL ("-fno-ira-share-spill-slots", "gcc/Optimize-Options.html#index-fno-ira-share-spill-slots"), +DOC_URL ("-fno-jump-tables", "gcc/Code-Gen-Options.html#index-fno-jump-tables"), +DOC_URL ("-fno-keep-inline-dllexport", "gcc/Optimize-Options.html#index-fno-keep-inline-dllexport"), +DOC_URL ("-fno-lifetime-dse", "gcc/Optimize-Options.html#index-fno-lifetime-dse"), +DOC_URL ("-fno-local-ivars", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fno-local-ivars"), +DOC_URL ("-fno-math-errno", "gcc/Optimize-Options.html#index-fno-math-errno"), +DOC_URL ("-fno-merge-debug-strings", "gcc/Debugging-Options.html#index-fno-merge-debug-strings"), +DOC_URL ("-fno-module-lazy", "gcc/C_002b_002b-Dialect-Options.html#index-fno-module-lazy"), +DOC_URL ("-fno-modules-ts", "gcc/C_002b_002b-Dialect-Options.html#index-fno-modules-ts"), +DOC_URL ("-fno-nil-receivers", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fno-nil-receivers"), +DOC_URL ("-fno-nonansi-builtins", "gcc/C_002b_002b-Dialect-Options.html#index-fno-nonansi-builtins"), +DOC_URL ("-fno-operator-names", "gcc/C_002b_002b-Dialect-Options.html#index-fno-operator-names"), +DOC_URL ("-fno-optional-diags", "gcc/C_002b_002b-Dialect-Options.html#index-fno-optional-diags"), +DOC_URL ("-fno-peephole", "gcc/Optimize-Options.html#index-fno-peephole"), +DOC_URL ("-fno-peephole2", "gcc/Optimize-Options.html#index-fno-peephole2"), +DOC_URL ("-fno-plt", "gcc/Code-Gen-Options.html#index-fno-plt"), +DOC_URL ("-fno-pretty-templates", "gcc/C_002b_002b-Dialect-Options.html#index-fno-pretty-templates"), +DOC_URL ("-fno-printf-return-value", "gcc/Optimize-Options.html#index-fno-printf-return-value"), +DOC_URL ("-fno-rtti", "gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti"), +DOC_URL ("-fno-sanitize-recover", "gcc/Instrumentation-Options.html#index-fno-sanitize-recover"), +DOC_URL ("-fno-sanitize-trap", "gcc/Instrumentation-Options.html#index-fno-sanitize-trap"), +DOC_URL ("-fno-sanitize=all", "gcc/Instrumentation-Options.html#index-fno-sanitize_003dall"), +DOC_URL ("-fno-sched-interblock", "gcc/Optimize-Options.html#index-fno-sched-interblock"), +DOC_URL ("-fno-sched-spec", "gcc/Optimize-Options.html#index-fno-sched-spec"), +DOC_URL ("-fno-set-stack-executable", "gcc/x86-Windows-Options.html#index-fno-set-stack-executable"), +DOC_URL ("-fno-show-column", "gcc/Diagnostic-Message-Formatting-Options.html#index-fno-show-column"), +DOC_URL ("-fno-signed-bitfields", "gcc/C-Dialect-Options.html#index-fno-signed-bitfields"), +DOC_URL ("-fno-signed-zeros", "gcc/Optimize-Options.html#index-fno-signed-zeros"), +DOC_URL ("-fno-stack-limit", "gcc/Instrumentation-Options.html#index-fno-stack-limit"), +DOC_URL ("-fno-strict-flex-arrays", "gcc/C-Dialect-Options.html#index-fno-strict-flex-arrays"), +DOC_URL ("-fno-threadsafe-statics", "gcc/C_002b_002b-Dialect-Options.html#index-fno-threadsafe-statics"), +DOC_URL ("-fno-toplevel-reorder", "gcc/Optimize-Options.html#index-fno-toplevel-reorder"), +DOC_URL ("-fno-trapping-math", "gcc/Optimize-Options.html#index-fno-trapping-math"), +DOC_URL ("-fno-unsigned-bitfields", "gcc/C-Dialect-Options.html#index-fno-unsigned-bitfields"), +DOC_URL ("-fno-use-cxa-get-exception-ptr", "gcc/C_002b_002b-Dialect-Options.html#index-fno-use-cxa-get-exception-ptr"), +DOC_URL ("-fno-var-tracking-assignments", "gcc/Debugging-Options.html#index-fno-var-tracking-assignments"), +DOC_URL ("-fno-var-tracking-assignments-toggle", "gcc/Developer-Options.html#index-fno-var-tracking-assignments-toggle"), +DOC_URL ("-fno-weak", "gcc/C_002b_002b-Dialect-Options.html#index-fno-weak"), +DOC_URL ("-fno-working-directory", "gcc/Preprocessor-Options.html#index-fno-working-directory"), +DOC_URL ("-fno-writable-relocated-rdata", "gcc/x86-Windows-Options.html#index-fno-writable-relocated-rdata"), +DOC_URL ("-fno-zero-initialized-in-bss", "gcc/Optimize-Options.html#index-fno-zero-initialized-in-bss"), +DOC_URL ("-fnon-call-exceptions", "gcc/Code-Gen-Options.html#index-fnon-call-exceptions"), +DOC_URL ("-fnothrow-opt", "gcc/C_002b_002b-Dialect-Options.html#index-fnothrow-opt"), +DOC_URL ("-fobjc-abi-version", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-abi-version"), +DOC_URL ("-fobjc-call-cxx-cdtors", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-call-cxx-cdtors"), +DOC_URL ("-fobjc-direct-dispatch", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-direct-dispatch"), +DOC_URL ("-fobjc-exceptions", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-exceptions"), +DOC_URL ("-fobjc-gc", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-gc"), +DOC_URL ("-fobjc-nilcheck", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-nilcheck"), +DOC_URL ("-fobjc-std", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-std"), +DOC_URL ("-foffload", "gcc/C-Dialect-Options.html#index-foffload"), +DOC_URL ("-foffload-options", "gcc/C-Dialect-Options.html#index-foffload-options"), +DOC_URL ("-fomit-frame-pointer", "gcc/Optimize-Options.html#index-fomit-frame-pointer"), +DOC_URL ("-fopenacc", "gcc/C-Dialect-Options.html#index-fopenacc"), +DOC_URL ("-fopenacc-dim", "gcc/C-Dialect-Options.html#index-fopenacc-dim"), +DOC_URL ("-fopenmp", "gcc/C-Dialect-Options.html#index-fopenmp"), +DOC_URL ("-fopenmp-simd", "gcc/C-Dialect-Options.html#index-fopenmp-simd"), +DOC_URL ("-fopenmp-target-simd-clone", "gcc/C-Dialect-Options.html#index-fopenmp-target-simd-clone"), +DOC_URL ("-fopt-info", "gcc/Developer-Options.html#index-fopt-info"), +DOC_URL ("-foptimize-sibling-calls", "gcc/Optimize-Options.html#index-foptimize-sibling-calls"), +DOC_URL ("-foptimize-strlen", "gcc/Optimize-Options.html#index-foptimize-strlen"), +DOC_URL ("-force_cpusubtype_ALL", "gcc/Darwin-Options.html#index-force_005fcpusubtype_005fALL"), +DOC_URL ("-force_flat_namespace", "gcc/Darwin-Options.html#index-force_005fflat_005fnamespace"), DOC_URL ("-fpack-struct", "gcc/Code-Gen-Options.html#index-fpack-struct"), +DOC_URL ("-fpartial-inlining", "gcc/Optimize-Options.html#index-fpartial-inlining"), +DOC_URL ("-fpatchable-function-entry", "gcc/Instrumentation-Options.html#index-fpatchable-function-entry"), +DOC_URL ("-fpch-deps", "gcc/Preprocessor-Options.html#index-fpch-deps"), +DOC_URL ("-fpch-preprocess", "gcc/Preprocessor-Options.html#index-fpch-preprocess"), +DOC_URL ("-fpeel-loops", "gcc/Optimize-Options.html#index-fpeel-loops"), +DOC_URL ("-fpermissive", "gcc/Warning-Options.html#index-fpermissive"), +DOC_URL ("-fpermitted-flt-eval-methods", "gcc/C-Dialect-Options.html#index-fpermitted-flt-eval-methods"), +DOC_URL ("-fpermitted-flt-eval-methods=c11", "gcc/C-Dialect-Options.html#index-fpermitted-flt-eval-methods_003dc11"), +DOC_URL ("-fpermitted-flt-eval-methods=ts-18661-3", "gcc/C-Dialect-Options.html#index-fpermitted-flt-eval-methods_003dts-18661-3"), +DOC_URL ("-fpic", "gcc/Code-Gen-Options.html#index-fpic"), +DOC_URL ("-fpie", "gcc/Code-Gen-Options.html#index-fpie"), +DOC_URL ("-fplugin", "gcc/Overall-Options.html#index-fplugin"), +DOC_URL ("-fplugin-arg", "gcc/Overall-Options.html#index-fplugin-arg"), +DOC_URL ("-fpost-ipa-mem-report", "gcc/Developer-Options.html#index-fpost-ipa-mem-report"), +DOC_URL ("-fpre-ipa-mem-report", "gcc/Developer-Options.html#index-fpre-ipa-mem-report"), +DOC_URL ("-fpredictive-commoning", "gcc/Optimize-Options.html#index-fpredictive-commoning"), +DOC_URL ("-fprefetch-loop-arrays", "gcc/Optimize-Options.html#index-fprefetch-loop-arrays"), +DOC_URL ("-fpreprocessed", "gcc/Preprocessor-Options.html#index-fpreprocessed"), +DOC_URL ("-fprofile-abs-path", "gcc/Instrumentation-Options.html#index-fprofile-abs-path"), +DOC_URL ("-fprofile-correction", "gcc/Optimize-Options.html#index-fprofile-correction"), +DOC_URL ("-fprofile-dir", "gcc/Instrumentation-Options.html#index-fprofile-dir"), +DOC_URL ("-fprofile-exclude-files", "gcc/Instrumentation-Options.html#index-fprofile-exclude-files"), +DOC_URL ("-fprofile-filter-files", "gcc/Instrumentation-Options.html#index-fprofile-filter-files"), +DOC_URL ("-fprofile-generate", "gcc/Instrumentation-Options.html#index-fprofile-generate"), +DOC_URL ("-fprofile-info-section", "gcc/Instrumentation-Options.html#index-fprofile-info-section"), +DOC_URL ("-fprofile-note", "gcc/Instrumentation-Options.html#index-fprofile-note"), +DOC_URL ("-fprofile-partial-training", "gcc/Optimize-Options.html#index-fprofile-partial-training"), +DOC_URL ("-fprofile-prefix-map", "gcc/Instrumentation-Options.html#index-fprofile-prefix-map"), +DOC_URL ("-fprofile-prefix-path", "gcc/Instrumentation-Options.html#index-fprofile-prefix-path"), +DOC_URL ("-fprofile-reorder-functions", "gcc/Optimize-Options.html#index-fprofile-reorder-functions"), +DOC_URL ("-fprofile-report", "gcc/Developer-Options.html#index-fprofile-report"), +DOC_URL ("-fprofile-reproducible", "gcc/Instrumentation-Options.html#index-fprofile-reproducible"), +DOC_URL ("-fprofile-update", "gcc/Instrumentation-Options.html#index-fprofile-update"), +DOC_URL ("-fprofile-use", "gcc/Optimize-Options.html#index-fprofile-use"), +DOC_URL ("-fprofile-values", "gcc/Optimize-Options.html#index-fprofile-values"), +DOC_URL ("-fpu", "gcc/RX-Options.html#index-fpu"), +DOC_URL ("-frandom-seed", "gcc/Developer-Options.html#index-frandom-seed"), +DOC_URL ("-freciprocal-math", "gcc/Optimize-Options.html#index-freciprocal-math"), +DOC_URL ("-frecord-gcc-switches", "gcc/Code-Gen-Options.html#index-frecord-gcc-switches"), +DOC_URL ("-free", "gcc/Optimize-Options.html#index-free-1"), +DOC_URL ("-freg-struct-return", "gcc/Code-Gen-Options.html#index-freg-struct-return"), +DOC_URL ("-frename-registers", "gcc/Optimize-Options.html#index-frename-registers"), +DOC_URL ("-freorder-blocks", "gcc/Optimize-Options.html#index-freorder-blocks"), +DOC_URL ("-freorder-blocks-algorithm", "gcc/Optimize-Options.html#index-freorder-blocks-algorithm"), +DOC_URL ("-freorder-blocks-and-partition", "gcc/Optimize-Options.html#index-freorder-blocks-and-partition"), +DOC_URL ("-freorder-functions", "gcc/Optimize-Options.html#index-freorder-functions"), +DOC_URL ("-freplace-objc-classes", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-freplace-objc-classes"), +DOC_URL ("-freport-bug", "gcc/Developer-Options.html#index-freport-bug"), +DOC_URL ("-frerun-cse-after-loop", "gcc/Optimize-Options.html#index-frerun-cse-after-loop"), +DOC_URL ("-freschedule-modulo-scheduled-loops", "gcc/Optimize-Options.html#index-freschedule-modulo-scheduled-loops"), +DOC_URL ("-frounding-math", "gcc/Optimize-Options.html#index-frounding-math"), +DOC_URL ("-fsanitize-address-use-after-scope", "gcc/Instrumentation-Options.html#index-fsanitize-address-use-after-scope"), +DOC_URL ("-fsanitize-coverage=trace-cmp", "gcc/Instrumentation-Options.html#index-fsanitize-coverage_003dtrace-cmp"), +DOC_URL ("-fsanitize-coverage=trace-pc", "gcc/Instrumentation-Options.html#index-fsanitize-coverage_003dtrace-pc"), +DOC_URL ("-fsanitize-sections", "gcc/Instrumentation-Options.html#index-fsanitize-sections"), +DOC_URL ("-fsanitize-undefined-trap-on-error", "gcc/Instrumentation-Options.html#index-fsanitize-undefined-trap-on-error"), +DOC_URL ("-fsanitize=address", "gcc/Instrumentation-Options.html#index-fsanitize_003daddress"), +DOC_URL ("-fsanitize=alignment", "gcc/Instrumentation-Options.html#index-fsanitize_003dalignment"), +DOC_URL ("-fsanitize=all", "gcc/Instrumentation-Options.html#index-fno-sanitize_003dall"), +DOC_URL ("-fsanitize=bool", "gcc/Instrumentation-Options.html#index-fsanitize_003dbool"), +DOC_URL ("-fsanitize=bounds", "gcc/Instrumentation-Options.html#index-fsanitize_003dbounds"), +DOC_URL ("-fsanitize=bounds-strict", "gcc/Instrumentation-Options.html#index-fsanitize_003dbounds-strict"), +DOC_URL ("-fsanitize=builtin", "gcc/Instrumentation-Options.html#index-fsanitize_003dbuiltin"), +DOC_URL ("-fsanitize=enum", "gcc/Instrumentation-Options.html#index-fsanitize_003denum"), +DOC_URL ("-fsanitize=float-cast-overflow", "gcc/Instrumentation-Options.html#index-fsanitize_003dfloat-cast-overflow"), +DOC_URL ("-fsanitize=float-divide-by-zero", "gcc/Instrumentation-Options.html#index-fsanitize_003dfloat-divide-by-zero"), +DOC_URL ("-fsanitize=hwaddress", "gcc/Instrumentation-Options.html#index-fsanitize_003dhwaddress"), +DOC_URL ("-fsanitize=integer-divide-by-zero", "gcc/Instrumentation-Options.html#index-fsanitize_003dinteger-divide-by-zero"), +DOC_URL ("-fsanitize=kernel-address", "gcc/Instrumentation-Options.html#index-fsanitize_003dkernel-address"), +DOC_URL ("-fsanitize=kernel-hwaddress", "gcc/Instrumentation-Options.html#index-fsanitize_003dkernel-hwaddress"), +DOC_URL ("-fsanitize=leak", "gcc/Instrumentation-Options.html#index-fsanitize_003dleak"), +DOC_URL ("-fsanitize=nonnull-attribute", "gcc/Instrumentation-Options.html#index-fsanitize_003dnonnull-attribute"), +DOC_URL ("-fsanitize=null", "gcc/Instrumentation-Options.html#index-fsanitize_003dnull"), +DOC_URL ("-fsanitize=object-size", "gcc/Instrumentation-Options.html#index-fsanitize_003dobject-size"), +DOC_URL ("-fsanitize=pointer-compare", "gcc/Instrumentation-Options.html#index-fsanitize_003dpointer-compare"), +DOC_URL ("-fsanitize=pointer-overflow", "gcc/Instrumentation-Options.html#index-fsanitize_003dpointer-overflow"), +DOC_URL ("-fsanitize=pointer-subtract", "gcc/Instrumentation-Options.html#index-fsanitize_003dpointer-subtract"), +DOC_URL ("-fsanitize=return", "gcc/Instrumentation-Options.html#index-fsanitize_003dreturn"), +DOC_URL ("-fsanitize=returns-nonnull-attribute", "gcc/Instrumentation-Options.html#index-fsanitize_003dreturns-nonnull-attribute"), +DOC_URL ("-fsanitize=shadow-call-stack", "gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack"), +DOC_URL ("-fsanitize=shift", "gcc/Instrumentation-Options.html#index-fsanitize_003dshift"), +DOC_URL ("-fsanitize=shift-base", "gcc/Instrumentation-Options.html#index-fsanitize_003dshift-base"), +DOC_URL ("-fsanitize=shift-exponent", "gcc/Instrumentation-Options.html#index-fsanitize_003dshift-exponent"), +DOC_URL ("-fsanitize=signed-integer-overflow", "gcc/Instrumentation-Options.html#index-fsanitize_003dsigned-integer-overflow"), +DOC_URL ("-fsanitize=thread", "gcc/Instrumentation-Options.html#index-fsanitize_003dthread"), +DOC_URL ("-fsanitize=undefined", "gcc/Instrumentation-Options.html#index-fsanitize_003dundefined"), +DOC_URL ("-fsanitize=unreachable", "gcc/Instrumentation-Options.html#index-fsanitize_003dunreachable"), +DOC_URL ("-fsanitize=vla-bound", "gcc/Instrumentation-Options.html#index-fsanitize_003dvla-bound"), +DOC_URL ("-fsanitize=vptr", "gcc/Instrumentation-Options.html#index-fsanitize_003dvptr"), +DOC_URL ("-fsave-optimization-record", "gcc/Developer-Options.html#index-fsave-optimization-record"), +DOC_URL ("-fsched-critical-path-heuristic", "gcc/Optimize-Options.html#index-fsched-critical-path-heuristic"), +DOC_URL ("-fsched-dep-count-heuristic", "gcc/Optimize-Options.html#index-fsched-dep-count-heuristic"), +DOC_URL ("-fsched-group-heuristic", "gcc/Optimize-Options.html#index-fsched-group-heuristic"), +DOC_URL ("-fsched-last-insn-heuristic", "gcc/Optimize-Options.html#index-fsched-last-insn-heuristic"), +DOC_URL ("-fsched-pressure", "gcc/Optimize-Options.html#index-fsched-pressure"), +DOC_URL ("-fsched-rank-heuristic", "gcc/Optimize-Options.html#index-fsched-rank-heuristic"), +DOC_URL ("-fsched-spec-insn-heuristic", "gcc/Optimize-Options.html#index-fsched-spec-insn-heuristic"), +DOC_URL ("-fsched-spec-load", "gcc/Optimize-Options.html#index-fsched-spec-load"), +DOC_URL ("-fsched-spec-load-dangerous", "gcc/Optimize-Options.html#index-fsched-spec-load-dangerous"), +DOC_URL ("-fsched-stalled-insns", "gcc/Optimize-Options.html#index-fsched-stalled-insns"), +DOC_URL ("-fsched-stalled-insns-dep", "gcc/Optimize-Options.html#index-fsched-stalled-insns-dep"), +DOC_URL ("-fsched-verbose", "gcc/Developer-Options.html#index-fsched-verbose"), +DOC_URL ("-fsched2-use-superblocks", "gcc/Optimize-Options.html#index-fsched2-use-superblocks"), +DOC_URL ("-fschedule-fusion", "gcc/Optimize-Options.html#index-fschedule-fusion"), +DOC_URL ("-fschedule-insns", "gcc/Optimize-Options.html#index-fschedule-insns"), +DOC_URL ("-fschedule-insns2", "gcc/Optimize-Options.html#index-fschedule-insns2"), +DOC_URL ("-fsection-anchors", "gcc/Optimize-Options.html#index-fsection-anchors"), +DOC_URL ("-fsel-sched-pipelining", "gcc/Optimize-Options.html#index-fsel-sched-pipelining"), +DOC_URL ("-fsel-sched-pipelining-outer-loops", "gcc/Optimize-Options.html#index-fsel-sched-pipelining-outer-loops"), +DOC_URL ("-fselective-scheduling", "gcc/Optimize-Options.html#index-fselective-scheduling"), +DOC_URL ("-fselective-scheduling2", "gcc/Optimize-Options.html#index-fselective-scheduling2"), +DOC_URL ("-fsemantic-interposition", "gcc/Optimize-Options.html#index-fsemantic-interposition"), +DOC_URL ("-fshort-wchar", "gcc/Code-Gen-Options.html#index-fshort-wchar"), +DOC_URL ("-fshrink-wrap", "gcc/Optimize-Options.html#index-fshrink-wrap"), +DOC_URL ("-fshrink-wrap-separate", "gcc/Optimize-Options.html#index-fshrink-wrap-separate"), +DOC_URL ("-fsignaling-nans", "gcc/Optimize-Options.html#index-fsignaling-nans"), +DOC_URL ("-fsimd-cost-model", "gcc/Optimize-Options.html#index-fsimd-cost-model"), +DOC_URL ("-fsingle-precision-constant", "gcc/Optimize-Options.html#index-fsingle-precision-constant"), +DOC_URL ("-fsized-deallocation", "gcc/C_002b_002b-Dialect-Options.html#index-fsized-deallocation"), +DOC_URL ("-fsplit-ivs-in-unroller", "gcc/Optimize-Options.html#index-fsplit-ivs-in-unroller"), +DOC_URL ("-fsplit-loops", "gcc/Optimize-Options.html#index-fsplit-loops"), +DOC_URL ("-fsplit-paths", "gcc/Optimize-Options.html#index-fsplit-paths"), +DOC_URL ("-fsplit-wide-types", "gcc/Optimize-Options.html#index-fsplit-wide-types"), +DOC_URL ("-fsplit-wide-types-early", "gcc/Optimize-Options.html#index-fsplit-wide-types-early"), +DOC_URL ("-fssa-backprop", "gcc/Optimize-Options.html#index-fssa-backprop"), +DOC_URL ("-fssa-phiopt", "gcc/Optimize-Options.html#index-fssa-phiopt"), +DOC_URL ("-fsso-struct", "gcc/C-Dialect-Options.html#index-fsso-struct"), +DOC_URL ("-fstack-check", "gcc/Instrumentation-Options.html#index-fstack-check"), +DOC_URL ("-fstack-clash-protection", "gcc/Instrumentation-Options.html#index-fstack-clash-protection"), +DOC_URL ("-fstack-limit", "gcc/Instrumentation-Options.html#index-fno-stack-limit"), +DOC_URL ("-fstack-limit-register", "gcc/Instrumentation-Options.html#index-fstack-limit-register"), +DOC_URL ("-fstack-limit-symbol", "gcc/Instrumentation-Options.html#index-fstack-limit-symbol"), +DOC_URL ("-fstack-protector", "gcc/Instrumentation-Options.html#index-fstack-protector"), +DOC_URL ("-fstack-protector-all", "gcc/Instrumentation-Options.html#index-fstack-protector-all"), +DOC_URL ("-fstack-protector-explicit", "gcc/Instrumentation-Options.html#index-fstack-protector-explicit"), +DOC_URL ("-fstack-protector-strong", "gcc/Instrumentation-Options.html#index-fstack-protector-strong"), +DOC_URL ("-fstack-usage", "gcc/Developer-Options.html#index-fstack-usage"), +DOC_URL ("-fstack_reuse", "gcc/Code-Gen-Options.html#index-fstack_005freuse"), +DOC_URL ("-fstats", "gcc/Developer-Options.html#index-fstats"), +DOC_URL ("-fstdarg-opt", "gcc/Optimize-Options.html#index-fstdarg-opt"), +DOC_URL ("-fstore-merging", "gcc/Optimize-Options.html#index-fstore-merging"), +DOC_URL ("-fstrict-aliasing", "gcc/Optimize-Options.html#index-fstrict-aliasing"), +DOC_URL ("-fstrict-enums", "gcc/C_002b_002b-Dialect-Options.html#index-fstrict-enums"), +DOC_URL ("-fstrict-flex-arrays=level", "gcc/C-Dialect-Options.html#index-fstrict-flex-arrays_003dlevel"), +DOC_URL ("-fstrict-overflow", "gcc/Code-Gen-Options.html#index-fstrict-overflow"), +DOC_URL ("-fstrict-volatile-bitfields", "gcc/Code-Gen-Options.html#index-fstrict-volatile-bitfields"), +DOC_URL ("-fstrong-eval-order", "gcc/C_002b_002b-Dialect-Options.html#index-fstrong-eval-order"), +DOC_URL ("-fsync-libcalls", "gcc/Code-Gen-Options.html#index-fsync-libcalls"), +DOC_URL ("-fsyntax-only", "gcc/Warning-Options.html#index-fsyntax-only"), +DOC_URL ("-ftabstop", "gcc/Preprocessor-Options.html#index-ftabstop"), +DOC_URL ("-ftemplate-backtrace-limit", "gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-backtrace-limit"), +DOC_URL ("-ftemplate-depth", "gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-depth"), +DOC_URL ("-ftest-coverage", "gcc/Instrumentation-Options.html#index-ftest-coverage"), +DOC_URL ("-fthread-jumps", "gcc/Optimize-Options.html#index-fthread-jumps"), +DOC_URL ("-ftime-report", "gcc/Developer-Options.html#index-ftime-report"), +DOC_URL ("-ftime-report-details", "gcc/Developer-Options.html#index-ftime-report-details"), +DOC_URL ("-ftls-model", "gcc/Code-Gen-Options.html#index-ftls-model"), +DOC_URL ("-ftracer", "gcc/Optimize-Options.html#index-ftracer"), +DOC_URL ("-ftrack-macro-expansion", "gcc/Preprocessor-Options.html#index-ftrack-macro-expansion"), +DOC_URL ("-ftrampoline-impl", "gcc/Code-Gen-Options.html#index-ftrampoline-impl"), +DOC_URL ("-ftrampolines", "gcc/Code-Gen-Options.html#index-ftrampolines"), +DOC_URL ("-ftrapv", "gcc/Code-Gen-Options.html#index-ftrapv"), +DOC_URL ("-ftree-bit-ccp", "gcc/Optimize-Options.html#index-ftree-bit-ccp"), +DOC_URL ("-ftree-builtin-call-dce", "gcc/Optimize-Options.html#index-ftree-builtin-call-dce"), +DOC_URL ("-ftree-ccp", "gcc/Optimize-Options.html#index-ftree-ccp"), +DOC_URL ("-ftree-ch", "gcc/Optimize-Options.html#index-ftree-ch"), +DOC_URL ("-ftree-coalesce-vars", "gcc/Optimize-Options.html#index-ftree-coalesce-vars"), +DOC_URL ("-ftree-copy-prop", "gcc/Optimize-Options.html#index-ftree-copy-prop"), +DOC_URL ("-ftree-dce", "gcc/Optimize-Options.html#index-ftree-dce"), +DOC_URL ("-ftree-dominator-opts", "gcc/Optimize-Options.html#index-ftree-dominator-opts"), +DOC_URL ("-ftree-dse", "gcc/Optimize-Options.html#index-ftree-dse"), +DOC_URL ("-ftree-forwprop", "gcc/Optimize-Options.html#index-ftree-forwprop"), +DOC_URL ("-ftree-fre", "gcc/Optimize-Options.html#index-ftree-fre"), +DOC_URL ("-ftree-loop-distribute-patterns", "gcc/Optimize-Options.html#index-ftree-loop-distribute-patterns"), +DOC_URL ("-ftree-loop-distribution", "gcc/Optimize-Options.html#index-ftree-loop-distribution"), +DOC_URL ("-ftree-loop-if-convert", "gcc/Optimize-Options.html#index-ftree-loop-if-convert"), +DOC_URL ("-ftree-loop-im", "gcc/Optimize-Options.html#index-ftree-loop-im"), +DOC_URL ("-ftree-loop-ivcanon", "gcc/Optimize-Options.html#index-ftree-loop-ivcanon"), +DOC_URL ("-ftree-loop-linear", "gcc/Optimize-Options.html#index-ftree-loop-linear"), +DOC_URL ("-ftree-loop-optimize", "gcc/Optimize-Options.html#index-ftree-loop-optimize"), +DOC_URL ("-ftree-loop-vectorize", "gcc/Optimize-Options.html#index-ftree-loop-vectorize"), +DOC_URL ("-ftree-parallelize-loops", "gcc/Optimize-Options.html#index-ftree-parallelize-loops"), +DOC_URL ("-ftree-partial-pre", "gcc/Optimize-Options.html#index-ftree-partial-pre"), +DOC_URL ("-ftree-phiprop", "gcc/Optimize-Options.html#index-ftree-phiprop"), +DOC_URL ("-ftree-pre", "gcc/Optimize-Options.html#index-ftree-pre"), +DOC_URL ("-ftree-pta", "gcc/Optimize-Options.html#index-ftree-pta"), +DOC_URL ("-ftree-reassoc", "gcc/Optimize-Options.html#index-ftree-reassoc"), +DOC_URL ("-ftree-scev-cprop", "gcc/Optimize-Options.html#index-ftree-scev-cprop"), +DOC_URL ("-ftree-sink", "gcc/Optimize-Options.html#index-ftree-sink"), +DOC_URL ("-ftree-slp-vectorize", "gcc/Optimize-Options.html#index-ftree-slp-vectorize"), +DOC_URL ("-ftree-slsr", "gcc/Optimize-Options.html#index-ftree-slsr"), +DOC_URL ("-ftree-sra", "gcc/Optimize-Options.html#index-ftree-sra"), +DOC_URL ("-ftree-switch-conversion", "gcc/Optimize-Options.html#index-ftree-switch-conversion"), +DOC_URL ("-ftree-tail-merge", "gcc/Optimize-Options.html#index-ftree-tail-merge"), +DOC_URL ("-ftree-ter", "gcc/Optimize-Options.html#index-ftree-ter"), +DOC_URL ("-ftree-vectorize", "gcc/Optimize-Options.html#index-ftree-vectorize"), +DOC_URL ("-ftree-vrp", "gcc/Optimize-Options.html#index-ftree-vrp"), +DOC_URL ("-ftrivial-auto-var-init", "gcc/Optimize-Options.html#index-ftrivial-auto-var-init"), +DOC_URL ("-funconstrained-commons", "gcc/Optimize-Options.html#index-funconstrained-commons"), +DOC_URL ("-funit-at-a-time", "gcc/Optimize-Options.html#index-funit-at-a-time"), +DOC_URL ("-funreachable-traps", "gcc/Optimize-Options.html#index-funreachable-traps"), +DOC_URL ("-funroll-all-loops", "gcc/Optimize-Options.html#index-funroll-all-loops"), +DOC_URL ("-funroll-loops", "gcc/Optimize-Options.html#index-funroll-loops"), +DOC_URL ("-funsafe-math-optimizations", "gcc/Optimize-Options.html#index-funsafe-math-optimizations"), +DOC_URL ("-funswitch-loops", "gcc/Optimize-Options.html#index-funswitch-loops"), +DOC_URL ("-funwind-tables", "gcc/Code-Gen-Options.html#index-funwind-tables"), +DOC_URL ("-fuse-cxa-atexit", "gcc/C_002b_002b-Dialect-Options.html#index-fuse-cxa-atexit"), +DOC_URL ("-fuse-ld=bfd", "gcc/Link-Options.html#index-fuse-ld_003dbfd"), +DOC_URL ("-fuse-ld=gold", "gcc/Link-Options.html#index-fuse-ld_003dgold"), +DOC_URL ("-fuse-ld=lld", "gcc/Link-Options.html#index-fuse-ld_003dlld"), +DOC_URL ("-fuse-ld=mold", "gcc/Link-Options.html#index-fuse-ld_003dmold"), +DOC_URL ("-fuse-linker-plugin", "gcc/Optimize-Options.html#index-fuse-linker-plugin"), +DOC_URL ("-fvar-tracking", "gcc/Debugging-Options.html#index-fvar-tracking"), +DOC_URL ("-fvariable-expansion-in-unroller", "gcc/Optimize-Options.html#index-fvariable-expansion-in-unroller"), +DOC_URL ("-fvect-cost-model", "gcc/Optimize-Options.html#index-fvect-cost-model"), +DOC_URL ("-fverbose-asm", "gcc/Code-Gen-Options.html#index-fverbose-asm"), +DOC_URL ("-fversion-loops-for-strides", "gcc/Optimize-Options.html#index-fversion-loops-for-strides"), +DOC_URL ("-fvisibility", "gcc/Code-Gen-Options.html#index-fvisibility"), +DOC_URL ("-fvisibility-inlines-hidden", "gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-inlines-hidden"), +DOC_URL ("-fvisibility-ms-compat", "gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-ms-compat"), +DOC_URL ("-fvpt", "gcc/Optimize-Options.html#index-fvpt"), +DOC_URL ("-fvtable-verify", "gcc/Instrumentation-Options.html#index-fvtable-verify"), +DOC_URL ("-fvtv-counts", "gcc/Instrumentation-Options.html#index-fvtv-counts"), +DOC_URL ("-fvtv-debug", "gcc/Instrumentation-Options.html#index-fvtv-debug"), +DOC_URL ("-fweb", "gcc/Optimize-Options.html#index-fweb"), +DOC_URL ("-fwhole-program", "gcc/Optimize-Options.html#index-fwhole-program"), +DOC_URL ("-fwide-exec-charset", "gcc/Preprocessor-Options.html#index-fwide-exec-charset"), +DOC_URL ("-fwrapv", "gcc/Code-Gen-Options.html#index-fwrapv"), +DOC_URL ("-fwrapv-pointer", "gcc/Code-Gen-Options.html#index-fwrapv-pointer"), +DOC_URL ("-fzero-call-used-regs", "gcc/Optimize-Options.html#index-fzero-call-used-regs"), +DOC_URL ("-fzero-link", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fzero-link"), +DOC_URL ("-g", "gcc/Debugging-Options.html#index-g"), +DOC_URL ("-gas-loc-support", "gcc/Debugging-Options.html#index-gas-loc-support"), +DOC_URL ("-gas-locview-support", "gcc/Debugging-Options.html#index-gas-locview-support"), +DOC_URL ("-gbtf", "gcc/Debugging-Options.html#index-gbtf"), +DOC_URL ("-gcodeview", "gcc/Debugging-Options.html#index-gcodeview"), +DOC_URL ("-gcolumn-info", "gcc/Debugging-Options.html#index-gcolumn-info"), +DOC_URL ("-gctf", "gcc/Debugging-Options.html#index-gctf"), +DOC_URL ("-gdescribe-dies", "gcc/Debugging-Options.html#index-gdescribe-dies"), +DOC_URL ("-gdwarf", "gcc/Debugging-Options.html#index-gdwarf"), +DOC_URL ("-gdwarf32", "gcc/Debugging-Options.html#index-gdwarf32"), +DOC_URL ("-gdwarf64", "gcc/Debugging-Options.html#index-gdwarf64"), +DOC_URL ("-gen-decls", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-gen-decls"), +DOC_URL ("-gfull", "gcc/Darwin-Options.html#index-gfull"), +DOC_URL ("-ggdb", "gcc/Debugging-Options.html#index-ggdb"), +DOC_URL ("-ggnu-pubnames", "gcc/Debugging-Options.html#index-ggnu-pubnames"), +DOC_URL ("-ginline-points", "gcc/Debugging-Options.html#index-ginline-points"), +DOC_URL ("-ginternal-reset-location-views", "gcc/Debugging-Options.html#index-ginternal-reset-location-views"), +DOC_URL ("-gno-as-loc-support", "gcc/Debugging-Options.html#index-gno-as-loc-support"), +DOC_URL ("-gno-column-info", "gcc/Debugging-Options.html#index-gno-column-info"), +DOC_URL ("-gno-inline-points", "gcc/Debugging-Options.html#index-gno-inline-points"), +DOC_URL ("-gno-internal-reset-location-views", "gcc/Debugging-Options.html#index-gno-internal-reset-location-views"), +DOC_URL ("-gno-record-gcc-switches", "gcc/Debugging-Options.html#index-gno-record-gcc-switches"), +DOC_URL ("-gno-statement-frontiers", "gcc/Debugging-Options.html#index-gno-statement-frontiers"), +DOC_URL ("-gno-strict-dwarf", "gcc/Debugging-Options.html#index-gno-strict-dwarf"), +DOC_URL ("-gno-variable-location-views", "gcc/Debugging-Options.html#index-gno-variable-location-views"), +DOC_URL ("-gpubnames", "gcc/Debugging-Options.html#index-gpubnames"), +DOC_URL ("-grecord-gcc-switches", "gcc/Debugging-Options.html#index-grecord-gcc-switches"), +DOC_URL ("-gsplit-dwarf", "gcc/Debugging-Options.html#index-gsplit-dwarf"), +DOC_URL ("-gstatement-frontiers", "gcc/Debugging-Options.html#index-gstatement-frontiers"), +DOC_URL ("-gstrict-dwarf", "gcc/Debugging-Options.html#index-gstrict-dwarf"), +DOC_URL ("-gtoggle", "gcc/Developer-Options.html#index-gtoggle"), +DOC_URL ("-gused", "gcc/Darwin-Options.html#index-gused"), +DOC_URL ("-gvariable-location-views", "gcc/Debugging-Options.html#index-gvariable-location-views"), +DOC_URL ("-gvariable-location-views=incompat5", "gcc/Debugging-Options.html#index-gvariable-location-views_003dincompat5"), +DOC_URL ("-gvms", "gcc/Debugging-Options.html#index-gvms"), +DOC_URL ("-gz", "gcc/Debugging-Options.html#index-gz"), +DOC_URL ("-headerpad_max_install_names", "gcc/Darwin-Options.html#index-headerpad_005fmax_005finstall_005fnames"), +DOC_URL ("-help", "gcc/Overall-Options.html#index-help"), +DOC_URL ("-idirafter", "gcc/Directory-Options.html#index-idirafter"), +DOC_URL ("-iframework", "gcc/Darwin-Options.html#index-iframework"), +DOC_URL ("-imacros", "gcc/Preprocessor-Options.html#index-imacros"), +DOC_URL ("-image_base", "gcc/Darwin-Options.html#index-image_005fbase"), +DOC_URL ("-imultilib", "gcc/Directory-Options.html#index-imultilib"), +DOC_URL ("-include", "gcc/Preprocessor-Options.html#index-include"), +DOC_URL ("-init", "gcc/Darwin-Options.html#index-init"), +DOC_URL ("-install_name", "gcc/Darwin-Options.html#index-install_005fname"), +DOC_URL ("-iplugindir=", "gcc/Directory-Options.html#index-iplugindir_003d"), +DOC_URL ("-iprefix", "gcc/Directory-Options.html#index-iprefix"), +DOC_URL ("-iquote", "gcc/Directory-Options.html#index-iquote"), +DOC_URL ("-isysroot", "gcc/Directory-Options.html#index-isysroot"), +DOC_URL ("-isystem", "gcc/Directory-Options.html#index-isystem"), +DOC_URL ("-iwithprefix", "gcc/Directory-Options.html#index-iwithprefix"), +DOC_URL ("-iwithprefixbefore", "gcc/Directory-Options.html#index-iwithprefixbefore"), +DOC_URL ("-keep_private_externs", "gcc/Darwin-Options.html#index-keep_005fprivate_005fexterns"), +DOC_URL ("-l", "gcc/Link-Options.html#index-l"), +DOC_URL ("-lobjc", "gcc/Link-Options.html#index-lobjc"), +DOC_URL ("-m1", "gcc/SH-Options.html#index-m1"), +DOC_URL ("-m10", "gcc/PDP-11-Options.html#index-m10"), +DOC_URL ("-m128bit-long-double", "gcc/x86-Options.html#index-m128bit-long-double"), +DOC_URL ("-m16", "gcc/x86-Options.html#index-m16"), +DOC_URL ("-m1reg-", "gcc/Adapteva-Epiphany-Options.html#index-m1reg-"), +DOC_URL ("-m2", "gcc/SH-Options.html#index-m2"), +DOC_URL ("-m210", "gcc/MCore-Options.html#index-m210"), +DOC_URL ("-m2a", "gcc/SH-Options.html#index-m2a"), +DOC_URL ("-m2a-nofpu", "gcc/SH-Options.html#index-m2a-nofpu"), +DOC_URL ("-m2a-single", "gcc/SH-Options.html#index-m2a-single"), +DOC_URL ("-m2a-single-only", "gcc/SH-Options.html#index-m2a-single-only"), +DOC_URL ("-m3", "gcc/SH-Options.html#index-m3"), +DOC_URL ("-m31", "gcc/S_002f390-and-zSeries-Options.html#index-m31"), +DOC_URL ("-m32-bit", "gcc/CRIS-Options.html#index-m32-bit"), +DOC_URL ("-m32r", "gcc/M32R_002fD-Options.html#index-m32r"), +DOC_URL ("-m32r2", "gcc/M32R_002fD-Options.html#index-m32r2"), +DOC_URL ("-m32rx", "gcc/M32R_002fD-Options.html#index-m32rx"), +DOC_URL ("-m340", "gcc/MCore-Options.html#index-m340"), +DOC_URL ("-m3dnow", "gcc/x86-Options.html#index-m3dnow"), +DOC_URL ("-m3dnowa", "gcc/x86-Options.html#index-m3dnowa"), +DOC_URL ("-m3e", "gcc/SH-Options.html#index-m3e"), +DOC_URL ("-m4", "gcc/SH-Options.html#index-m4"), +DOC_URL ("-m4-100", "gcc/SH-Options.html#index-m4-100"), +DOC_URL ("-m4-100-nofpu", "gcc/SH-Options.html#index-m4-100-nofpu"), +DOC_URL ("-m4-100-single", "gcc/SH-Options.html#index-m4-100-single"), +DOC_URL ("-m4-100-single-only", "gcc/SH-Options.html#index-m4-100-single-only"), +DOC_URL ("-m4-200", "gcc/SH-Options.html#index-m4-200"), +DOC_URL ("-m4-200-nofpu", "gcc/SH-Options.html#index-m4-200-nofpu"), +DOC_URL ("-m4-200-single", "gcc/SH-Options.html#index-m4-200-single"), +DOC_URL ("-m4-200-single-only", "gcc/SH-Options.html#index-m4-200-single-only"), +DOC_URL ("-m4-300", "gcc/SH-Options.html#index-m4-300"), +DOC_URL ("-m4-300-nofpu", "gcc/SH-Options.html#index-m4-300-nofpu"), +DOC_URL ("-m4-300-single", "gcc/SH-Options.html#index-m4-300-single"), +DOC_URL ("-m4-300-single-only", "gcc/SH-Options.html#index-m4-300-single-only"), +DOC_URL ("-m4-340", "gcc/SH-Options.html#index-m4-340"), +DOC_URL ("-m4-500", "gcc/SH-Options.html#index-m4-500"), +DOC_URL ("-m4-nofpu", "gcc/SH-Options.html#index-m4-nofpu"), +DOC_URL ("-m4-single", "gcc/SH-Options.html#index-m4-single"), +DOC_URL ("-m4-single-only", "gcc/SH-Options.html#index-m4-single-only"), +DOC_URL ("-m40", "gcc/PDP-11-Options.html#index-m40"), +DOC_URL ("-m45", "gcc/PDP-11-Options.html#index-m45"), +DOC_URL ("-m4a", "gcc/SH-Options.html#index-m4a"), +DOC_URL ("-m4a-nofpu", "gcc/SH-Options.html#index-m4a-nofpu"), +DOC_URL ("-m4a-single", "gcc/SH-Options.html#index-m4a-single"), +DOC_URL ("-m4a-single-only", "gcc/SH-Options.html#index-m4a-single-only"), +DOC_URL ("-m4al", "gcc/SH-Options.html#index-m4al"), +DOC_URL ("-m4byte-functions", "gcc/MCore-Options.html#index-m4byte-functions"), +DOC_URL ("-m5200", "gcc/M680x0-Options.html#index-m5200"), +DOC_URL ("-m5206e", "gcc/M680x0-Options.html#index-m5206e"), +DOC_URL ("-m528x", "gcc/M680x0-Options.html#index-m528x"), +DOC_URL ("-m5307", "gcc/M680x0-Options.html#index-m5307"), +DOC_URL ("-m5407", "gcc/M680x0-Options.html#index-m5407"), +DOC_URL ("-m68000", "gcc/M680x0-Options.html#index-m68000"), +DOC_URL ("-m68010", "gcc/M680x0-Options.html#index-m68010"), +DOC_URL ("-m68020", "gcc/M680x0-Options.html#index-m68020"), +DOC_URL ("-m68020-40", "gcc/M680x0-Options.html#index-m68020-40"), +DOC_URL ("-m68020-60", "gcc/M680x0-Options.html#index-m68020-60"), +DOC_URL ("-m68030", "gcc/M680x0-Options.html#index-m68030"), +DOC_URL ("-m68040", "gcc/M680x0-Options.html#index-m68040"), +DOC_URL ("-m68060", "gcc/M680x0-Options.html#index-m68060"), +DOC_URL ("-m68881", "gcc/M680x0-Options.html#index-m68881"), +DOC_URL ("-m8-bit", "gcc/CRIS-Options.html#index-m8-bit"), +DOC_URL ("-m80387", "gcc/x86-Options.html#index-m80387"), +DOC_URL ("-m8bit-idiv", "gcc/x86-Options.html#index-m8bit-idiv"), +DOC_URL ("-m8byte-align", "gcc/V850-Options.html#index-m8byte-align"), +DOC_URL ("-m96bit-long-double", "gcc/x86-Options.html#index-m96bit-long-double"), +DOC_URL ("-mA6", "gcc/ARC-Options.html#index-mA6"), +DOC_URL ("-mA7", "gcc/ARC-Options.html#index-mA7"), +DOC_URL ("-mARC600", "gcc/ARC-Options.html#index-mARC600"), +DOC_URL ("-mARC601", "gcc/ARC-Options.html#index-mARC601"), +DOC_URL ("-mARC700", "gcc/ARC-Options.html#index-mARC700"), +DOC_URL ("-mEA", "gcc/ARC-Options.html#index-mEA"), +DOC_URL ("-mRcq", "gcc/ARC-Options.html#index-mRcq"), +DOC_URL ("-mRcw", "gcc/ARC-Options.html#index-mRcw"), +DOC_URL ("-mTLS", "gcc/FRV-Options.html#index-mTLS"), +DOC_URL ("-mabi=32", "gcc/MIPS-Options.html#index-mabi_003d32"), +DOC_URL ("-mabi=64", "gcc/MIPS-Options.html#index-mabi_003d64"), +DOC_URL ("-mabi=call0", "gcc/Xtensa-Options.html#index-mabi_003dcall0"), +DOC_URL ("-mabi=eabi", "gcc/MIPS-Options.html#index-mabi_003deabi"), +DOC_URL ("-mabi=elfv1", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv1"), +DOC_URL ("-mabi=elfv2", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv2"), +DOC_URL ("-mabi=gnu", "gcc/MMIX-Options.html#index-mabi_003dgnu"), +DOC_URL ("-mabi=ibmlongdouble", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dibmlongdouble"), +DOC_URL ("-mabi=ieeelongdouble", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dieeelongdouble"), +DOC_URL ("-mabi=mmixware", "gcc/MMIX-Options.html#index-mabi_003dmmixware"), +DOC_URL ("-mabi=n32", "gcc/MIPS-Options.html#index-mabi_003dn32"), +DOC_URL ("-mabi=o64", "gcc/MIPS-Options.html#index-mabi_003do64"), +DOC_URL ("-mabi=windowed", "gcc/Xtensa-Options.html#index-mabi_003dwindowed"), +DOC_URL ("-mabicalls", "gcc/MIPS-Options.html#index-mabicalls"), +DOC_URL ("-mabm", "gcc/x86-Options.html#index-mabm"), +DOC_URL ("-mabort-on-noreturn", "gcc/ARM-Options.html#index-mabort-on-noreturn"), +DOC_URL ("-mabs=2008", "gcc/MIPS-Options.html#index-mabs_003d2008"), +DOC_URL ("-mabs=legacy", "gcc/MIPS-Options.html#index-mabs_003dlegacy"), +DOC_URL ("-mabsdata", "gcc/AVR-Options.html#index-mabsdata"), +DOC_URL ("-mac0", "gcc/PDP-11-Options.html#index-mac0"), +DOC_URL ("-macc-4", "gcc/FRV-Options.html#index-macc-4"), +DOC_URL ("-macc-8", "gcc/FRV-Options.html#index-macc-8"), +DOC_URL ("-maccumulate-args", "gcc/AVR-Options.html#index-maccumulate-args"), +DOC_URL ("-maddress-mode=long", "gcc/x86-Options.html#index-maddress-mode_003dlong"), +DOC_URL ("-maddress-mode=short", "gcc/x86-Options.html#index-maddress-mode_003dshort"), +DOC_URL ("-mads", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mads"), +DOC_URL ("-madx", "gcc/x86-Options.html#index-madx"), +DOC_URL ("-maes", "gcc/x86-Options.html#index-maes"), +DOC_URL ("-maix-struct-return", "gcc/RS_002f6000-and-PowerPC-Options.html#index-maix-struct-return"), +DOC_URL ("-maix32", "gcc/RS_002f6000-and-PowerPC-Options.html#index-maix32"), +DOC_URL ("-maix64", "gcc/RS_002f6000-and-PowerPC-Options.html#index-maix64"), +DOC_URL ("-malign-300", "gcc/H8_002f300-Options.html#index-malign-300"), +DOC_URL ("-malign-call", "gcc/ARC-Options.html#index-malign-call"), +DOC_URL ("-malign-double", "gcc/x86-Options.html#index-malign-double"), +DOC_URL ("-malign-int", "gcc/M680x0-Options.html#index-malign-int"), +DOC_URL ("-malign-labels", "gcc/FRV-Options.html#index-malign-labels"), +DOC_URL ("-malign-loops", "gcc/M32R_002fD-Options.html#index-malign-loops"), +DOC_URL ("-malign-natural", "gcc/RS_002f6000-and-PowerPC-Options.html#index-malign-natural"), +DOC_URL ("-malign-power", "gcc/RS_002f6000-and-PowerPC-Options.html#index-malign-power"), +DOC_URL ("-malign-stringops", "gcc/x86-Options.html#index-malign-stringops"), +DOC_URL ("-malloc-cc", "gcc/FRV-Options.html#index-malloc-cc"), +DOC_URL ("-mallow-string-insns", "gcc/RX-Options.html#index-mallow-string-insns"), +DOC_URL ("-mallregs", "gcc/RL78-Options.html#index-mallregs"), +DOC_URL ("-maltivec", "gcc/RS_002f6000-and-PowerPC-Options.html#index-maltivec"), +DOC_URL ("-malu32", "gcc/eBPF-Options.html#index-malu32"), +DOC_URL ("-mam33", "gcc/MN10300-Options.html#index-mam33"), +DOC_URL ("-mam33-2", "gcc/MN10300-Options.html#index-mam33-2"), +DOC_URL ("-mam34", "gcc/MN10300-Options.html#index-mam34"), +DOC_URL ("-mamx-bf16", "gcc/x86-Options.html#index-mamx-bf16"), +DOC_URL ("-mamx-complex", "gcc/x86-Options.html#index-mamx-complex"), +DOC_URL ("-mamx-fp16", "gcc/x86-Options.html#index-mamx-fp16"), +DOC_URL ("-mamx-int8", "gcc/x86-Options.html#index-mamx-int8"), +DOC_URL ("-mamx-tile", "gcc/x86-Options.html#index-mamx-tile"), +DOC_URL ("-manchor", "gcc/C-SKY-Options.html#index-manchor"), +DOC_URL ("-mandroid", "gcc/GNU_002fLinux-Options.html#index-mandroid"), +DOC_URL ("-mannotate-align", "gcc/ARC-Options.html#index-mannotate-align"), +DOC_URL ("-mapcs", "gcc/ARM-Options.html#index-mapcs"), +DOC_URL ("-mapcs-frame", "gcc/ARM-Options.html#index-mapcs-frame"), +DOC_URL ("-mapxf", "gcc/x86-Options.html#index-mapxf"), +DOC_URL ("-march=", "gcc/C-SKY-Options.html#index-march_003d"), +DOC_URL ("-marclinux", "gcc/ARC-Options.html#index-marclinux"), +DOC_URL ("-marclinux_prof", "gcc/ARC-Options.html#index-marclinux_005fprof"), +DOC_URL ("-margonaut", "gcc/ARC-Options.html#index-margonaut"), +DOC_URL ("-marm", "gcc/ARM-Options.html#index-marm"), +DOC_URL ("-mas100-syntax", "gcc/RX-Options.html#index-mas100-syntax"), +DOC_URL ("-masm-hex", "gcc/MSP430-Options.html#index-masm-hex"), +DOC_URL ("-masm-syntax-unified", "gcc/ARM-Options.html#index-masm-syntax-unified"), +DOC_URL ("-matomic", "gcc/ARC-Options.html#index-matomic"), +DOC_URL ("-matomic-libcalls", "gcc/HPPA-Options.html#index-matomic-libcalls"), +DOC_URL ("-matomic-model=model", "gcc/SH-Options.html#index-matomic-model_003dmodel"), +DOC_URL ("-mauto-litpools", "gcc/Xtensa-Options.html#index-mauto-litpools"), +DOC_URL ("-mauto-modify-reg", "gcc/ARC-Options.html#index-mauto-modify-reg"), +DOC_URL ("-mauto-pic", "gcc/IA-64-Options.html#index-mauto-pic"), +DOC_URL ("-mavoid-indexed-addresses", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mavoid-indexed-addresses"), +DOC_URL ("-mavx", "gcc/x86-Options.html#index-mavx"), +DOC_URL ("-mavx2", "gcc/x86-Options.html#index-mavx2"), +DOC_URL ("-mavx256-split-unaligned-load", "gcc/x86-Options.html#index-mavx256-split-unaligned-load"), +DOC_URL ("-mavx256-split-unaligned-store", "gcc/x86-Options.html#index-mavx256-split-unaligned-store"), +DOC_URL ("-mavx5124fmaps", "gcc/x86-Options.html#index-mavx5124fmaps"), +DOC_URL ("-mavx5124vnniw", "gcc/x86-Options.html#index-mavx5124vnniw"), +DOC_URL ("-mavx512bf16", "gcc/x86-Options.html#index-mavx512bf16"), +DOC_URL ("-mavx512bitalg", "gcc/x86-Options.html#index-mavx512bitalg"), +DOC_URL ("-mavx512bw", "gcc/x86-Options.html#index-mavx512bw"), +DOC_URL ("-mavx512cd", "gcc/x86-Options.html#index-mavx512cd"), +DOC_URL ("-mavx512dq", "gcc/x86-Options.html#index-mavx512dq"), +DOC_URL ("-mavx512er", "gcc/x86-Options.html#index-mavx512er"), +DOC_URL ("-mavx512f", "gcc/x86-Options.html#index-mavx512f"), +DOC_URL ("-mavx512fp16", "gcc/x86-Options.html#index-mavx512fp16"), +DOC_URL ("-mavx512ifma", "gcc/x86-Options.html#index-mavx512ifma"), +DOC_URL ("-mavx512pf", "gcc/x86-Options.html#index-mavx512pf"), +DOC_URL ("-mavx512vbmi", "gcc/x86-Options.html#index-mavx512vbmi"), +DOC_URL ("-mavx512vbmi2", "gcc/x86-Options.html#index-mavx512vbmi2"), +DOC_URL ("-mavx512vl", "gcc/x86-Options.html#index-mavx512vl"), +DOC_URL ("-mavx512vnni", "gcc/x86-Options.html#index-mavx512vnni"), +DOC_URL ("-mavx512vp2intersect", "gcc/x86-Options.html#index-mavx512vp2intersect"), +DOC_URL ("-mavx512vpopcntdq", "gcc/x86-Options.html#index-mavx512vpopcntdq"), +DOC_URL ("-mavxifma", "gcc/x86-Options.html#index-mavxifma"), +DOC_URL ("-mavxneconvert", "gcc/x86-Options.html#index-mavxneconvert"), +DOC_URL ("-mavxvnni", "gcc/x86-Options.html#index-mavxvnni"), +DOC_URL ("-mavxvnniint16", "gcc/x86-Options.html#index-mavxvnniint16"), +DOC_URL ("-mavxvnniint8", "gcc/x86-Options.html#index-mavxvnniint8"), +DOC_URL ("-max-vect-align", "gcc/Adapteva-Epiphany-Options.html#index-max-vect-align"), +DOC_URL ("-mb", "gcc/SH-Options.html#index-mb"), +DOC_URL ("-mbackchain", "gcc/S_002f390-and-zSeries-Options.html#index-mbackchain"), +DOC_URL ("-mbarrel-shift-enabled", "gcc/LM32-Options.html#index-mbarrel-shift-enabled"), +DOC_URL ("-mbarrel-shifter", "gcc/ARC-Options.html#index-mbarrel-shifter"), +DOC_URL ("-mbarrel_shifter", "gcc/ARC-Options.html#index-mbarrel_005fshifter"), +DOC_URL ("-mbase-addresses", "gcc/MMIX-Options.html#index-mbase-addresses"), +DOC_URL ("-mbbit-peephole", "gcc/ARC-Options.html#index-mbbit-peephole"), +DOC_URL ("-mbe8", "gcc/ARM-Options.html#index-mbe8"), +DOC_URL ("-mbig", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig"), +DOC_URL ("-mbig-endian-data", "gcc/RX-Options.html#index-mbig-endian-data"), +DOC_URL ("-mbigtable", "gcc/SH-Options.html#index-mbigtable"), +DOC_URL ("-mbionic", "gcc/GNU_002fLinux-Options.html#index-mbionic"), +DOC_URL ("-mbit-align", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mbit-align"), +DOC_URL ("-mbitfield", "gcc/M680x0-Options.html#index-mbitfield"), +DOC_URL ("-mbitops", "gcc/SH-Options.html#index-mbitops"), +DOC_URL ("-mblock-compare-inline-limit", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-limit"), +DOC_URL ("-mblock-compare-inline-loop-limit", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-loop-limit"), +DOC_URL ("-mblock-move-inline-limit", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-move-inline-limit"), +DOC_URL ("-mbmi", "gcc/x86-Options.html#index-mbmi"), +DOC_URL ("-mbmi2", "gcc/x86-Options.html#index-mbmi2"), +DOC_URL ("-mboard", "gcc/OpenRISC-Options.html#index-mboard"), +DOC_URL ("-mbranch-cost=", "gcc/C-SKY-Options.html#index-mbranch-cost_003d"), +DOC_URL ("-mbranch-cost=num", "gcc/SH-Options.html#index-mbranch-cost_003dnum"), +DOC_URL ("-mbranch-cost=number", "gcc/M32R_002fD-Options.html#index-mbranch-cost_003dnumber"), +DOC_URL ("-mbranch-index", "gcc/ARC-Options.html#index-mbranch-index"), +DOC_URL ("-mbranch-likely", "gcc/MIPS-Options.html#index-mbranch-likely"), +DOC_URL ("-mbranch-predict", "gcc/MMIX-Options.html#index-mbranch-predict"), +DOC_URL ("-mbss-plt", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mbss-plt"), +DOC_URL ("-mbswap", "gcc/eBPF-Options.html#index-mbswap"), +DOC_URL ("-mbuild-constants", "gcc/DEC-Alpha-Options.html#index-mbuild-constants"), +DOC_URL ("-mbwx", "gcc/DEC-Alpha-Options.html#index-mbwx"), +DOC_URL ("-mbypass-cache", "gcc/Nios-II-Options.html#index-mbypass-cache"), +DOC_URL ("-mc68000", "gcc/M680x0-Options.html#index-mc68000"), +DOC_URL ("-mc68020", "gcc/M680x0-Options.html#index-mc68020"), +DOC_URL ("-mcache", "gcc/C-SKY-Options.html#index-mcache"), +DOC_URL ("-mcache-block-size", "gcc/NDS32-Options.html#index-mcache-block-size"), +DOC_URL ("-mcache-volatile", "gcc/Nios-II-Options.html#index-mcache-volatile"), +DOC_URL ("-mcall-aixdesc", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-aixdesc"), +DOC_URL ("-mcall-eabi", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-eabi"), +DOC_URL ("-mcall-freebsd", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-freebsd"), +DOC_URL ("-mcall-linux", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-linux"), +DOC_URL ("-mcall-ms2sysv-xlogues", "gcc/x86-Options.html#index-mcall-ms2sysv-xlogues"), +DOC_URL ("-mcall-netbsd", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-netbsd"), +DOC_URL ("-mcall-openbsd", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-openbsd"), +DOC_URL ("-mcall-prologues", "gcc/AVR-Options.html#index-mcall-prologues"), +DOC_URL ("-mcall-sysv", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-sysv"), +DOC_URL ("-mcall-sysv-eabi", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-sysv-eabi"), +DOC_URL ("-mcall-sysv-noeabi", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcall-sysv-noeabi"), +DOC_URL ("-mcallee-super-interworking", "gcc/ARM-Options.html#index-mcallee-super-interworking"), +DOC_URL ("-mcaller-copies", "gcc/HPPA-Options.html#index-mcaller-copies"), +DOC_URL ("-mcaller-super-interworking", "gcc/ARM-Options.html#index-mcaller-super-interworking"), +DOC_URL ("-mcallgraph-data", "gcc/MCore-Options.html#index-mcallgraph-data"), +DOC_URL ("-mcase-vector-pcrel", "gcc/ARC-Options.html#index-mcase-vector-pcrel"), +DOC_URL ("-mcbcond", "gcc/SPARC-Options.html#index-mcbcond"), +DOC_URL ("-mcbranch-force-delay-slot", "gcc/SH-Options.html#index-mcbranch-force-delay-slot"), +DOC_URL ("-mcc-init", "gcc/CRIS-Options.html#index-mcc-init"), +DOC_URL ("-mccrt", "gcc/C-SKY-Options.html#index-mccrt"), +DOC_URL ("-mcet-switch", "gcc/x86-Options.html#index-mcet-switch"), +DOC_URL ("-mcfv4e", "gcc/M680x0-Options.html#index-mcfv4e"), +DOC_URL ("-mcix", "gcc/DEC-Alpha-Options.html#index-mcix"), +DOC_URL ("-mcld", "gcc/x86-Options.html#index-mcld"), +DOC_URL ("-mcldemote", "gcc/x86-Options.html#index-mcldemote"), +DOC_URL ("-mclear-hwcap", "gcc/Solaris-2-Options.html#index-mclear-hwcap"), +DOC_URL ("-mclflushopt", "gcc/x86-Options.html#index-mclflushopt"), +DOC_URL ("-mclwb", "gcc/x86-Options.html#index-mclwb"), +DOC_URL ("-mclzero", "gcc/x86-Options.html#index-mclzero"), +DOC_URL ("-mcmodel=kernel", "gcc/x86-Options.html#index-mcmodel_003dkernel"), +DOC_URL ("-mcmodel=medany", "gcc/RISC-V-Options.html#index-mcmodel_003dmedany"), +DOC_URL ("-mcmodel=medlow", "gcc/RISC-V-Options.html#index-mcmodel_003dmedlow"), +DOC_URL ("-mcmodel=tiny", "gcc/AArch64-Options.html#index-mcmodel_003dtiny"), +DOC_URL ("-mcmove", "gcc/Adapteva-Epiphany-Options.html#index-mcmove"), +DOC_URL ("-mcmpb", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcmpb"), +DOC_URL ("-mcmpccxadd", "gcc/x86-Options.html#index-mcmpccxadd"), +DOC_URL ("-mcmse", "gcc/ARM-Options.html#index-mcmse"), +DOC_URL ("-mco-re", "gcc/eBPF-Options.html#index-mco-re"), +DOC_URL ("-mcode-density", "gcc/ARC-Options.html#index-mcode-density"), +DOC_URL ("-mcode-density-frame", "gcc/ARC-Options.html#index-mcode-density-frame"), +DOC_URL ("-mcode-readable", "gcc/MIPS-Options.html#index-mcode-readable"), +DOC_URL ("-mcode-region", "gcc/MSP430-Options.html#index-mcode-region"), +DOC_URL ("-mcoherent-ldcw", "gcc/HPPA-Options.html#index-mcoherent-ldcw"), +DOC_URL ("-mcompact-branches=always", "gcc/MIPS-Options.html#index-mcompact-branches_003dalways"), +DOC_URL ("-mcompact-branches=never", "gcc/MIPS-Options.html#index-mcompact-branches_003dnever"), +DOC_URL ("-mcompact-branches=optimal", "gcc/MIPS-Options.html#index-mcompact-branches_003doptimal"), +DOC_URL ("-mcompact-casesi", "gcc/ARC-Options.html#index-mcompact-casesi"), +DOC_URL ("-mcompat-align-parm", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcompat-align-parm"), +DOC_URL ("-mcompress", "gcc/FT32-Options.html#index-mcompress"), +DOC_URL ("-mcond-exec", "gcc/FRV-Options.html#index-mcond-exec"), +DOC_URL ("-mcond-move", "gcc/FRV-Options.html#index-mcond-move"), +DOC_URL ("-mcond-move-float", "gcc/LoongArch-Options.html#index-mcond-move-float"), +DOC_URL ("-mcond-move-int", "gcc/LoongArch-Options.html#index-mcond-move-int"), +DOC_URL ("-mconsole", "gcc/x86-Windows-Options.html#index-mconsole"), +DOC_URL ("-mconst-align", "gcc/CRIS-Options.html#index-mconst-align"), +DOC_URL ("-mconst16", "gcc/Xtensa-Options.html#index-mconst16"), +DOC_URL ("-mconstant-cfstrings", "gcc/Darwin-Options.html#index-mconstant-cfstrings"), +DOC_URL ("-mconstant-gp", "gcc/IA-64-Options.html#index-mconstant-gp"), +DOC_URL ("-mconstpool", "gcc/C-SKY-Options.html#index-mconstpool"), +DOC_URL ("-mcorea", "gcc/Blackfin-Options.html#index-mcorea"), +DOC_URL ("-mcoreb", "gcc/Blackfin-Options.html#index-mcoreb"), +DOC_URL ("-mcp", "gcc/C-SKY-Options.html#index-mcp"), +DOC_URL ("-mcpu32", "gcc/M680x0-Options.html#index-mcpu32"), +DOC_URL ("-mcrc", "gcc/MIPS-Options.html#index-mcrc"), +DOC_URL ("-mcrc32", "gcc/x86-Options.html#index-mcrc32"), +DOC_URL ("-mcrtdll", "gcc/x86-Windows-Options.html#index-mcrtdll"), +DOC_URL ("-mcrypto", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mcrypto"), +DOC_URL ("-mcsr-check", "gcc/RISC-V-Options.html#index-mcsr-check"), +DOC_URL ("-mctor-dtor", "gcc/NDS32-Options.html#index-mctor-dtor"), +DOC_URL ("-mcustom-insn", "gcc/Nios-II-Options.html#index-mcustom-insn"), +DOC_URL ("-mcustom-fpu-cfg", "gcc/Nios-II-Options.html#index-mcustom-fpu-cfg"), +DOC_URL ("-mcx16", "gcc/x86-Options.html#index-mcx16"), +DOC_URL ("-mdalign", "gcc/SH-Options.html#index-mdalign"), +DOC_URL ("-mdata-align", "gcc/CRIS-Options.html#index-mdata-align"), +DOC_URL ("-mdata-region", "gcc/MSP430-Options.html#index-mdata-region"), +DOC_URL ("-mdaz-ftz", "gcc/x86-Options.html#index-mdaz-ftz"), +DOC_URL ("-mdebug-main=prefix", "gcc/VMS-Options.html#index-mdebug-main_003dprefix"), +DOC_URL ("-mdec-asm", "gcc/PDP-11-Options.html#index-mdec-asm"), +DOC_URL ("-mdisable-callt", "gcc/V850-Options.html#index-mdisable-callt"), +DOC_URL ("-mdisable-fpregs", "gcc/HPPA-Options.html#index-mdisable-fpregs"), +DOC_URL ("-mdisable-indexing", "gcc/HPPA-Options.html#index-mdisable-indexing"), +DOC_URL ("-mdiv-rem", "gcc/ARC-Options.html#index-mdiv-rem"), +DOC_URL ("-mdiv=strategy", "gcc/SH-Options.html#index-mdiv_003dstrategy"), +DOC_URL ("-mdivide-breaks", "gcc/MIPS-Options.html#index-mdivide-breaks"), +DOC_URL ("-mdivide-enabled", "gcc/LM32-Options.html#index-mdivide-enabled"), +DOC_URL ("-mdivide-traps", "gcc/MIPS-Options.html#index-mdivide-traps"), +DOC_URL ("-mdivsi3_libfunc=name", "gcc/SH-Options.html#index-mdivsi3_005flibfunc_003dname"), +DOC_URL ("-mdll", "gcc/x86-Windows-Options.html#index-mdll"), +DOC_URL ("-mdlmzb", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mdlmzb"), +DOC_URL ("-mdmx", "gcc/MIPS-Options.html#index-mdmx"), +DOC_URL ("-mdpfp", "gcc/ARC-Options.html#index-mdpfp"), +DOC_URL ("-mdpfp-compact", "gcc/ARC-Options.html#index-mdpfp-compact"), +DOC_URL ("-mdpfp-fast", "gcc/ARC-Options.html#index-mdpfp-fast"), +DOC_URL ("-mdpfp_compact", "gcc/ARC-Options.html#index-mdpfp_005fcompact"), +DOC_URL ("-mdpfp_fast", "gcc/ARC-Options.html#index-mdpfp_005ffast"), +DOC_URL ("-mdsp-packa", "gcc/ARC-Options.html#index-mdsp-packa"), +DOC_URL ("-mdsp_packa", "gcc/ARC-Options.html#index-mdsp_005fpacka"), +DOC_URL ("-mdspr2", "gcc/MIPS-Options.html#index-mdspr2"), +DOC_URL ("-mdump-tune-features", "gcc/x86-Options.html#index-mdump-tune-features"), +DOC_URL ("-mdvbf", "gcc/ARC-Options.html#index-mdvbf"), +DOC_URL ("-mdwarf2-asm", "gcc/IA-64-Options.html#index-mdwarf2-asm"), +DOC_URL ("-mdynamic-no-pic", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mdynamic-no-pic"), +DOC_URL ("-mea", "gcc/ARC-Options.html#index-mea"), +DOC_URL ("-meabi", "gcc/RS_002f6000-and-PowerPC-Options.html#index-meabi"), +DOC_URL ("-mearly-cbranchsi", "gcc/ARC-Options.html#index-mearly-cbranchsi"), +DOC_URL ("-mearly-stop-bits", "gcc/IA-64-Options.html#index-mearly-stop-bits"), +DOC_URL ("-medsp", "gcc/C-SKY-Options.html#index-medsp"), +DOC_URL ("-melrw", "gcc/C-SKY-Options.html#index-melrw"), +DOC_URL ("-memb", "gcc/RS_002f6000-and-PowerPC-Options.html#index-memb"), +DOC_URL ("-membedded-data", "gcc/MIPS-Options.html#index-membedded-data"), +DOC_URL ("-memregs=", "gcc/M32C-Options.html#index-memregs_003d"), +DOC_URL ("-menqcmd", "gcc/x86-Options.html#index-menqcmd"), +DOC_URL ("-mep", "gcc/V850-Options.html#index-mep"), +DOC_URL ("-mepsilon", "gcc/MMIX-Options.html#index-mepsilon"), +DOC_URL ("-mesa", "gcc/S_002f390-and-zSeries-Options.html#index-mesa"), +DOC_URL ("-metrax100", "gcc/CRIS-Options.html#index-metrax100"), +DOC_URL ("-metrax4", "gcc/CRIS-Options.html#index-metrax4"), +DOC_URL ("-meva", "gcc/MIPS-Options.html#index-meva"), +DOC_URL ("-mexpand-adddi", "gcc/ARC-Options.html#index-mexpand-adddi"), +DOC_URL ("-mext-perf", "gcc/NDS32-Options.html#index-mext-perf"), +DOC_URL ("-mext-perf2", "gcc/NDS32-Options.html#index-mext-perf2"), +DOC_URL ("-mext-string", "gcc/NDS32-Options.html#index-mext-string"), +DOC_URL ("-mextern-sdata", "gcc/MIPS-Options.html#index-mextern-sdata"), +DOC_URL ("-mextra-l32r-costs", "gcc/Xtensa-Options.html#index-mextra-l32r-costs"), +DOC_URL ("-mf16c", "gcc/x86-Options.html#index-mf16c"), +DOC_URL ("-mfancy-math-387", "gcc/x86-Options.html#index-mfancy-math-387"), +DOC_URL ("-mfast-fp", "gcc/Blackfin-Options.html#index-mfast-fp"), +DOC_URL ("-mfast-indirect-calls", "gcc/HPPA-Options.html#index-mfast-indirect-calls"), +DOC_URL ("-mfast-sw-div", "gcc/Nios-II-Options.html#index-mfast-sw-div"), +DOC_URL ("-mfaster-structs", "gcc/SPARC-Options.html#index-mfaster-structs"), +DOC_URL ("-mfdiv", "gcc/RISC-V-Options.html#index-mfdiv"), +DOC_URL ("-mfdivdu", "gcc/C-SKY-Options.html#index-mfdivdu"), +DOC_URL ("-mfentry", "gcc/x86-Options.html#index-mfentry"), +DOC_URL ("-mfentry-name", "gcc/x86-Options.html#index-mfentry-name"), +DOC_URL ("-mfentry-section", "gcc/x86-Options.html#index-mfentry-section"), +DOC_URL ("-mfix", "gcc/DEC-Alpha-Options.html#index-mfix"), +DOC_URL ("-mfix-24k", "gcc/MIPS-Options.html#index-mfix-24k"), +DOC_URL ("-mfix-and-continue", "gcc/Darwin-Options.html#index-mfix-and-continue"), +DOC_URL ("-mfix-at697f", "gcc/SPARC-Options.html#index-mfix-at697f"), +DOC_URL ("-mfix-cmse-cve-2021-35465", "gcc/ARM-Options.html#index-mfix-cmse-cve-2021-35465"), +DOC_URL ("-mfix-cortex-a53-835769", "gcc/AArch64-Options.html#index-mfix-cortex-a53-835769"), +DOC_URL ("-mfix-cortex-a53-843419", "gcc/AArch64-Options.html#index-mfix-cortex-a53-843419"), +DOC_URL ("-mfix-cortex-m3-ldrd", "gcc/ARM-Options.html#index-mfix-cortex-m3-ldrd"), +DOC_URL ("-mfix-gr712rc", "gcc/SPARC-Options.html#index-mfix-gr712rc"), +DOC_URL ("-mfix-r10000", "gcc/MIPS-Options.html#index-mfix-r10000"), +DOC_URL ("-mfix-r4000", "gcc/MIPS-Options.html#index-mfix-r4000"), +DOC_URL ("-mfix-r4400", "gcc/MIPS-Options.html#index-mfix-r4400"), +DOC_URL ("-mfix-r5900", "gcc/MIPS-Options.html#index-mfix-r5900"), +DOC_URL ("-mfix-rm7000", "gcc/MIPS-Options.html#index-mfix-rm7000"), +DOC_URL ("-mfix-sb1", "gcc/MIPS-Options.html#index-mfix-sb1"), +DOC_URL ("-mfix-ut699", "gcc/SPARC-Options.html#index-mfix-ut699"), +DOC_URL ("-mfix-ut700", "gcc/SPARC-Options.html#index-mfix-ut700"), +DOC_URL ("-mfix-vr4120", "gcc/MIPS-Options.html#index-mfix-vr4120"), +DOC_URL ("-mfix-vr4130", "gcc/MIPS-Options.html#index-mfix-vr4130"), +DOC_URL ("-mfixed-cc", "gcc/FRV-Options.html#index-mfixed-cc"), +DOC_URL ("-mflat", "gcc/SPARC-Options.html#index-mflat"), +DOC_URL ("-mflip-mips16", "gcc/MIPS-Options.html#index-mflip-mips16"), +DOC_URL ("-mflip-thumb", "gcc/ARM-Options.html#index-mflip-thumb"), +DOC_URL ("-mfloat-ieee", "gcc/DEC-Alpha-Options.html#index-mfloat-ieee"), +DOC_URL ("-mfloat-vax", "gcc/DEC-Alpha-Options.html#index-mfloat-vax"), +DOC_URL ("-mfloat128", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128"), +DOC_URL ("-mfloat128-hardware", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128-hardware"), +DOC_URL ("-mflush-func", "gcc/MIPS-Options.html#index-mflush-func"), +DOC_URL ("-mflush-func=name", "gcc/M32R_002fD-Options.html#index-mflush-func_003dname"), +DOC_URL ("-mflush-trap=number", "gcc/M32R_002fD-Options.html#index-mflush-trap_003dnumber"), +DOC_URL ("-mfma", "gcc/x86-Options.html#index-mfma"), +DOC_URL ("-mfma4", "gcc/x86-Options.html#index-mfma4"), +DOC_URL ("-mfmaf", "gcc/SPARC-Options.html#index-mfmaf"), +DOC_URL ("-mfmovd", "gcc/SH-Options.html#index-mfmovd"), +DOC_URL ("-mforce-indirect-call", "gcc/x86-Options.html#index-mforce-indirect-call"), +DOC_URL ("-mforce-no-pic", "gcc/Xtensa-Options.html#index-mforce-no-pic"), +DOC_URL ("-mfp-exceptions", "gcc/MIPS-Options.html#index-mfp-exceptions"), +DOC_URL ("-mfp-mode", "gcc/Adapteva-Epiphany-Options.html#index-mfp-mode"), +DOC_URL ("-mfp-reg", "gcc/DEC-Alpha-Options.html#index-mfp-reg"), +DOC_URL ("-mfp-ret-in-387", "gcc/x86-Options.html#index-mfp-ret-in-387"), +DOC_URL ("-mfp-rounding-mode", "gcc/DEC-Alpha-Options.html#index-mfp-rounding-mode"), +DOC_URL ("-mfp-trap-mode", "gcc/DEC-Alpha-Options.html#index-mfp-trap-mode"), +DOC_URL ("-mfp16-format", "gcc/ARM-Options.html#index-mfp16-format"), +DOC_URL ("-mfp32", "gcc/MIPS-Options.html#index-mfp32"), +DOC_URL ("-mfp64", "gcc/MIPS-Options.html#index-mfp64"), +DOC_URL ("-mfpr-32", "gcc/FRV-Options.html#index-mfpr-32"), +DOC_URL ("-mfpr-64", "gcc/FRV-Options.html#index-mfpr-64"), +DOC_URL ("-mfprnd", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mfprnd"), +DOC_URL ("-mfpu=", "gcc/C-SKY-Options.html#index-mfpu_003d"), +DOC_URL ("-mfpxx", "gcc/MIPS-Options.html#index-mfpxx"), +DOC_URL ("-mfract-convert-truncate", "gcc/AVR-Options.html#index-mfract-convert-truncate"), +DOC_URL ("-mframe-header-opt", "gcc/MIPS-Options.html#index-mframe-header-opt"), +DOC_URL ("-mfriz", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mfriz"), +DOC_URL ("-mfsca", "gcc/SH-Options.html#index-mfsca"), +DOC_URL ("-mfsgsbase", "gcc/x86-Options.html#index-mfsgsbase"), +DOC_URL ("-mfsmuld", "gcc/SPARC-Options.html#index-mfsmuld"), +DOC_URL ("-mfsrra", "gcc/SH-Options.html#index-mfsrra"), +DOC_URL ("-mft32b", "gcc/FT32-Options.html#index-mft32b"), +DOC_URL ("-mfull-regs", "gcc/NDS32-Options.html#index-mfull-regs"), +DOC_URL ("-mfull-toc", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mfull-toc"), +DOC_URL ("-mfunction-return", "gcc/x86-Options.html#index-mfunction-return"), +DOC_URL ("-mfxsr", "gcc/x86-Options.html#index-mfxsr"), +DOC_URL ("-mg", "gcc/VAX-Options.html#index-mg"), +DOC_URL ("-mg10", "gcc/RL78-Options.html#index-mg10"), +DOC_URL ("-mg13", "gcc/RL78-Options.html#index-mg13"), +DOC_URL ("-mg14", "gcc/RL78-Options.html#index-mg14"), +DOC_URL ("-mgas", "gcc/HPPA-Options.html#index-mgas"), +DOC_URL ("-mgas-isr-prologues", "gcc/AVR-Options.html#index-mgas-isr-prologues"), +DOC_URL ("-mgcc-abi", "gcc/V850-Options.html#index-mgcc-abi"), +DOC_URL ("-mgfni", "gcc/x86-Options.html#index-mgfni"), +DOC_URL ("-mghs", "gcc/V850-Options.html#index-mghs"), +DOC_URL ("-mginv", "gcc/MIPS-Options.html#index-mginv"), +DOC_URL ("-mglibc", "gcc/GNU_002fLinux-Options.html#index-mglibc"), +DOC_URL ("-mgnu", "gcc/VAX-Options.html#index-mgnu"), +DOC_URL ("-mgnu-as", "gcc/IA-64-Options.html#index-mgnu-as"), +DOC_URL ("-mgnu-asm", "gcc/PDP-11-Options.html#index-mgnu-asm"), +DOC_URL ("-mgnu-attribute", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mgnu-attribute"), +DOC_URL ("-mgomp", "gcc/Nvidia-PTX-Options.html#index-mgomp"), +DOC_URL ("-mgp32", "gcc/MIPS-Options.html#index-mgp32"), +DOC_URL ("-mgp64", "gcc/MIPS-Options.html#index-mgp64"), +DOC_URL ("-mgpr-32", "gcc/FRV-Options.html#index-mgpr-32"), +DOC_URL ("-mgpr-64", "gcc/FRV-Options.html#index-mgpr-64"), +DOC_URL ("-mgprel-ro", "gcc/FRV-Options.html#index-mgprel-ro"), +DOC_URL ("-mgprel-sec", "gcc/Nios-II-Options.html#index-mgprel-sec"), +DOC_URL ("-mh", "gcc/H8_002f300-Options.html#index-mh"), +DOC_URL ("-mhal", "gcc/Nios-II-Options.html#index-mhal"), +DOC_URL ("-mhalf-reg-file", "gcc/Adapteva-Epiphany-Options.html#index-mhalf-reg-file"), +DOC_URL ("-mhard-div", "gcc/OpenRISC-Options.html#index-mhard-div"), +DOC_URL ("-mhard-mul", "gcc/OpenRISC-Options.html#index-mhard-mul"), +DOC_URL ("-mhard-quad-float", "gcc/SPARC-Options.html#index-mhard-quad-float"), +DOC_URL ("-mhardlit", "gcc/MCore-Options.html#index-mhardlit"), +DOC_URL ("-mhigh-registers", "gcc/C-SKY-Options.html#index-mhigh-registers"), +DOC_URL ("-mhle", "gcc/x86-Options.html#index-mhle"), +DOC_URL ("-mhotpatch", "gcc/S_002f390-and-zSeries-Options.html#index-mhotpatch"), +DOC_URL ("-mhp-ld", "gcc/HPPA-Options.html#index-mhp-ld"), +DOC_URL ("-mhreset", "gcc/x86-Options.html#index-mhreset"), +DOC_URL ("-mhw-div", "gcc/Nios-II-Options.html#index-mhw-div"), +DOC_URL ("-mhw-mul", "gcc/Nios-II-Options.html#index-mhw-mul"), +DOC_URL ("-mhw-mulx", "gcc/Nios-II-Options.html#index-mhw-mulx"), +DOC_URL ("-mhwmult=", "gcc/MSP430-Options.html#index-mhwmult_003d"), +DOC_URL ("-miamcu", "gcc/x86-Options.html#index-miamcu"), +DOC_URL ("-micplb", "gcc/Blackfin-Options.html#index-micplb"), +DOC_URL ("-mieee-conformant", "gcc/DEC-Alpha-Options.html#index-mieee-conformant"), +DOC_URL ("-mieee-fp", "gcc/x86-Options.html#index-mieee-fp"), +DOC_URL ("-mieee-with-inexact", "gcc/DEC-Alpha-Options.html#index-mieee-with-inexact"), +DOC_URL ("-milp32", "gcc/IA-64-Options.html#index-milp32"), +DOC_URL ("-mimadd", "gcc/MIPS-Options.html#index-mimadd"), +DOC_URL ("-mimpure-text", "gcc/Solaris-2-Options.html#index-mimpure-text"), +DOC_URL ("-mincoming-stack-boundary", "gcc/x86-Options.html#index-mincoming-stack-boundary"), +DOC_URL ("-mindexed-loads", "gcc/ARC-Options.html#index-mindexed-loads"), +DOC_URL ("-mindirect-branch", "gcc/x86-Options.html#index-mindirect-branch"), +DOC_URL ("-mindirect-branch-cs-prefix", "gcc/x86-Options.html#index-mindirect-branch-cs-prefix"), +DOC_URL ("-mindirect-branch-register", "gcc/x86-Options.html#index-mindirect-branch-register"), +DOC_URL ("-minline-all-stringops", "gcc/x86-Options.html#index-minline-all-stringops"), +DOC_URL ("-minline-atomics", "gcc/RISC-V-Options.html#index-minline-atomics"), +DOC_URL ("-minline-float-divide-max-throughput", "gcc/IA-64-Options.html#index-minline-float-divide-max-throughput"), +DOC_URL ("-minline-float-divide-min-latency", "gcc/IA-64-Options.html#index-minline-float-divide-min-latency"), +DOC_URL ("-minline-ic_invalidate", "gcc/SH-Options.html#index-minline-ic_005finvalidate"), +DOC_URL ("-minline-int-divide", "gcc/IA-64-Options.html#index-minline-int-divide"), +DOC_URL ("-minline-int-divide-max-throughput", "gcc/IA-64-Options.html#index-minline-int-divide-max-throughput"), +DOC_URL ("-minline-int-divide-min-latency", "gcc/IA-64-Options.html#index-minline-int-divide-min-latency"), +DOC_URL ("-minline-sqrt-max-throughput", "gcc/IA-64-Options.html#index-minline-sqrt-max-throughput"), +DOC_URL ("-minline-sqrt-min-latency", "gcc/IA-64-Options.html#index-minline-sqrt-min-latency"), +DOC_URL ("-minline-strcmp", "gcc/RISC-V-Options.html#index-minline-strcmp"), +DOC_URL ("-minline-stringops-dynamically", "gcc/x86-Options.html#index-minline-stringops-dynamically"), +DOC_URL ("-minline-strlen", "gcc/RISC-V-Options.html#index-minline-strlen"), +DOC_URL ("-minline-strncmp", "gcc/RISC-V-Options.html#index-minline-strncmp"), +DOC_URL ("-minsert-sched-nops", "gcc/RS_002f6000-and-PowerPC-Options.html#index-minsert-sched-nops"), +DOC_URL ("-minstrument-return", "gcc/x86-Options.html#index-minstrument-return"), +DOC_URL ("-mint-register", "gcc/RX-Options.html#index-mint-register"), +DOC_URL ("-mint16", "gcc/PDP-11-Options.html#index-mint16"), +DOC_URL ("-mint8", "gcc/AVR-Options.html#index-mint8"), +DOC_URL ("-minterlink-compressed", "gcc/MIPS-Options.html#index-minterlink-compressed"), +DOC_URL ("-minterlink-mips16", "gcc/MIPS-Options.html#index-minterlink-mips16"), +DOC_URL ("-mips1", "gcc/MIPS-Options.html#index-mips1"), +DOC_URL ("-mips16", "gcc/MIPS-Options.html#index-mips16"), +DOC_URL ("-mips2", "gcc/MIPS-Options.html#index-mips2"), +DOC_URL ("-mips3", "gcc/MIPS-Options.html#index-mips3"), +DOC_URL ("-mips32", "gcc/MIPS-Options.html#index-mips32"), +DOC_URL ("-mips32r3", "gcc/MIPS-Options.html#index-mips32r3"), +DOC_URL ("-mips32r5", "gcc/MIPS-Options.html#index-mips32r5"), +DOC_URL ("-mips32r6", "gcc/MIPS-Options.html#index-mips32r6"), +DOC_URL ("-mips3d", "gcc/MIPS-Options.html#index-mips3d"), +DOC_URL ("-mips4", "gcc/MIPS-Options.html#index-mips4"), +DOC_URL ("-mips64", "gcc/MIPS-Options.html#index-mips64"), +DOC_URL ("-mips64r2", "gcc/MIPS-Options.html#index-mips64r2"), +DOC_URL ("-mips64r3", "gcc/MIPS-Options.html#index-mips64r3"), +DOC_URL ("-mips64r5", "gcc/MIPS-Options.html#index-mips64r5"), +DOC_URL ("-mips64r6", "gcc/MIPS-Options.html#index-mips64r6"), +DOC_URL ("-mirq-ctrl-saved", "gcc/ARC-Options.html#index-mirq-ctrl-saved"), +DOC_URL ("-misa", "gcc/Nvidia-PTX-Options.html#index-misa"), +DOC_URL ("-misa-spec", "gcc/RISC-V-Options.html#index-misa-spec"), +DOC_URL ("-misel", "gcc/RS_002f6000-and-PowerPC-Options.html#index-misel"), +DOC_URL ("-misr-vector-size", "gcc/NDS32-Options.html#index-misr-vector-size"), +DOC_URL ("-missue-rate=number", "gcc/M32R_002fD-Options.html#index-missue-rate_003dnumber"), +DOC_URL ("-mistack", "gcc/C-SKY-Options.html#index-mistack"), +DOC_URL ("-mjli-always", "gcc/ARC-Options.html#index-mjli-always"), +DOC_URL ("-mjmp32", "gcc/eBPF-Options.html#index-mjmp32"), +DOC_URL ("-mjmpext", "gcc/eBPF-Options.html#index-mjmpext"), +DOC_URL ("-mjsr", "gcc/RX-Options.html#index-mjsr"), +DOC_URL ("-mjump-in-delay", "gcc/HPPA-Options.html#index-mjump-in-delay"), +DOC_URL ("-mkernel", "gcc/Darwin-Options.html#index-mkernel"), +DOC_URL ("-mkl", "gcc/x86-Options.html#index-mkl"), +DOC_URL ("-mknuthdiv", "gcc/MMIX-Options.html#index-mknuthdiv"), +DOC_URL ("-ml", "gcc/SH-Options.html#index-ml"), +DOC_URL ("-ml[a]sx", "gcc/LoongArch-Options.html#index-ml_005ba_005dsx"), +DOC_URL ("-mlam", "gcc/x86-Options.html#index-mlam"), +DOC_URL ("-mlarge", "gcc/MSP430-Options.html#index-mlarge"), +DOC_URL ("-mlarge-data", "gcc/DEC-Alpha-Options.html#index-mlarge-data"), +DOC_URL ("-mlarge-data-threshold", "gcc/x86-Options.html#index-mlarge-data-threshold"), +DOC_URL ("-mlarge-text", "gcc/DEC-Alpha-Options.html#index-mlarge-text"), +DOC_URL ("-mlibfuncs", "gcc/MMIX-Options.html#index-mlibfuncs"), +DOC_URL ("-mlibrary-pic", "gcc/FRV-Options.html#index-mlibrary-pic"), +DOC_URL ("-mlinked-fp", "gcc/FRV-Options.html#index-mlinked-fp"), +DOC_URL ("-mlinker-opt", "gcc/HPPA-Options.html#index-mlinker-opt"), +DOC_URL ("-mlittle", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle"), +DOC_URL ("-mlittle-endian-data", "gcc/RX-Options.html#index-mlittle-endian-data"), +DOC_URL ("-mliw", "gcc/MN10300-Options.html#index-mliw"), +DOC_URL ("-mll64", "gcc/ARC-Options.html#index-mll64"), +DOC_URL ("-mllsc", "gcc/MIPS-Options.html#index-mllsc"), +DOC_URL ("-mload-store-pairs", "gcc/MIPS-Options.html#index-mload-store-pairs"), +DOC_URL ("-mlocal-sdata", "gcc/MIPS-Options.html#index-mlocal-sdata"), +DOC_URL ("-mlock", "gcc/ARC-Options.html#index-mlock"), +DOC_URL ("-mlong-double", "gcc/AVR-Options.html#index-mlong-double"), +DOC_URL ("-mlong-double-80", "gcc/x86-Options.html#index-mlong-double-80"), +DOC_URL ("-mlong-jump-table-offsets", "gcc/M680x0-Options.html#index-mlong-jump-table-offsets"), +DOC_URL ("-mlong-jumps", "gcc/V850-Options.html#index-mlong-jumps"), +DOC_URL ("-mlong-load-store", "gcc/HPPA-Options.html#index-mlong-load-store"), +DOC_URL ("-mlong32", "gcc/MIPS-Options.html#index-mlong32"), +DOC_URL ("-mlong64", "gcc/MIPS-Options.html#index-mlong64"), +DOC_URL ("-mlongcall", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mlongcall"), +DOC_URL ("-mlongcalls", "gcc/Xtensa-Options.html#index-mlongcalls"), +DOC_URL ("-mloongson-ext", "gcc/MIPS-Options.html#index-mloongson-ext"), +DOC_URL ("-mloongson-ext2", "gcc/MIPS-Options.html#index-mloongson-ext2"), +DOC_URL ("-mloongson-mmi", "gcc/MIPS-Options.html#index-mloongson-mmi"), +DOC_URL ("-mlow-precision-div", "gcc/AArch64-Options.html#index-mlow-precision-div"), +DOC_URL ("-mlow-precision-recip-sqrt", "gcc/AArch64-Options.html#index-mlow-precision-recip-sqrt"), +DOC_URL ("-mlow-precision-sqrt", "gcc/AArch64-Options.html#index-mlow-precision-sqrt"), +DOC_URL ("-mlow64k", "gcc/Blackfin-Options.html#index-mlow64k"), +DOC_URL ("-mlp64", "gcc/IA-64-Options.html#index-mlp64"), +DOC_URL ("-mlpc-width", "gcc/ARC-Options.html#index-mlpc-width"), +DOC_URL ("-mlra-priority-compact", "gcc/ARC-Options.html#index-mlra-priority-compact"), +DOC_URL ("-mlra-priority-noncompact", "gcc/ARC-Options.html#index-mlra-priority-noncompact"), +DOC_URL ("-mlra-priority-none", "gcc/ARC-Options.html#index-mlra-priority-none"), +DOC_URL ("-mlwp", "gcc/x86-Options.html#index-mlwp"), +DOC_URL ("-mlxc1-sxc1", "gcc/MIPS-Options.html#index-mlxc1-sxc1"), +DOC_URL ("-mlzcnt", "gcc/x86-Options.html#index-mlzcnt"), +DOC_URL ("-mmac-24", "gcc/ARC-Options.html#index-mmac-24"), +DOC_URL ("-mmac-d16", "gcc/ARC-Options.html#index-mmac-d16"), +DOC_URL ("-mmac_24", "gcc/ARC-Options.html#index-mmac_005f24"), +DOC_URL ("-mmac_d16", "gcc/ARC-Options.html#index-mmac_005fd16"), +DOC_URL ("-mmacosx-version-min", "gcc/Darwin-Options.html#index-mmacosx-version-min"), +DOC_URL ("-mmad", "gcc/MIPS-Options.html#index-mmad"), +DOC_URL ("-mmadd4", "gcc/MIPS-Options.html#index-mmadd4"), +DOC_URL ("-mmain-is-OS_task", "gcc/AVR-Options.html#index-mmain-is-OS_005ftask"), +DOC_URL ("-mmainkernel", "gcc/Nvidia-PTX-Options.html#index-mmainkernel"), +DOC_URL ("-mmalloc64", "gcc/VMS-Options.html#index-mmalloc64"), +DOC_URL ("-mmanual-endbr", "gcc/x86-Options.html#index-mmanual-endbr"), +DOC_URL ("-mmax", "gcc/DEC-Alpha-Options.html#index-mmax"), +DOC_URL ("-mmax-constant-size", "gcc/RX-Options.html#index-mmax-constant-size"), +DOC_URL ("-mmax-inline-memcpy-size", "gcc/LoongArch-Options.html#index-mmax-inline-memcpy-size"), +DOC_URL ("-mmax-inline-shift=", "gcc/MSP430-Options.html#index-mmax-inline-shift_003d"), +DOC_URL ("-mmax-stack-frame", "gcc/CRIS-Options.html#index-mmax-stack-frame"), +DOC_URL ("-mmcount-ra-address", "gcc/MIPS-Options.html#index-mmcount-ra-address"), +DOC_URL ("-mmcu=", "gcc/MSP430-Options.html#index-mmcu_003d"), +DOC_URL ("-mmedia", "gcc/FRV-Options.html#index-mmedia"), +DOC_URL ("-mmedium-calls", "gcc/ARC-Options.html#index-mmedium-calls"), +DOC_URL ("-mmemcpy-strategy=strategy", "gcc/x86-Options.html#index-mmemcpy-strategy_003dstrategy"), +DOC_URL ("-mmemory-latency", "gcc/DEC-Alpha-Options.html#index-mmemory-latency"), +DOC_URL ("-mmemory-model", "gcc/SPARC-Options.html#index-mmemory-model"), +DOC_URL ("-mmemset-strategy=strategy", "gcc/x86-Options.html#index-mmemset-strategy_003dstrategy"), +DOC_URL ("-mmfcrf", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mmfcrf"), +DOC_URL ("-mmicromips", "gcc/MIPS-Options.html#index-mmicromips"), +DOC_URL ("-mmillicode", "gcc/ARC-Options.html#index-mmillicode"), +DOC_URL ("-mminimal-toc", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mminimal-toc"), +DOC_URL ("-mmips16e2", "gcc/MIPS-Options.html#index-mmips16e2"), +DOC_URL ("-mmixed-code", "gcc/ARC-Options.html#index-mmixed-code"), +DOC_URL ("-mmma", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mmma"), +DOC_URL ("-mmmx", "gcc/x86-Options.html#index-mmmx"), +DOC_URL ("-mmodel=large", "gcc/M32R_002fD-Options.html#index-mmodel_003dlarge"), +DOC_URL ("-mmodel=medium", "gcc/M32R_002fD-Options.html#index-mmodel_003dmedium"), +DOC_URL ("-mmodel=small", "gcc/M32R_002fD-Options.html#index-mmodel_003dsmall"), +DOC_URL ("-mmovbe", "gcc/x86-Options.html#index-mmovbe"), +DOC_URL ("-mmovdir64b", "gcc/x86-Options.html#index-mmovdir64b"), +DOC_URL ("-mmovdiri", "gcc/x86-Options.html#index-mmovdiri"), +DOC_URL ("-mmove-max", "gcc/x86-Options.html#index-mmove-max"), +DOC_URL ("-mmp", "gcc/C-SKY-Options.html#index-mmp"), +DOC_URL ("-mmpy", "gcc/ARC-Options.html#index-mmpy"), +DOC_URL ("-mmpy-option", "gcc/ARC-Options.html#index-mmpy-option"), +DOC_URL ("-mms-bitfields", "gcc/x86-Options.html#index-mms-bitfields"), +DOC_URL ("-mmt", "gcc/MIPS-Options.html#index-mmt"), +DOC_URL ("-mmul", "gcc/RL78-Options.html#index-mmul"), +DOC_URL ("-mmul-bug-workaround", "gcc/CRIS-Options.html#index-mmul-bug-workaround"), +DOC_URL ("-mmul.x", "gcc/Moxie-Options.html#index-mmul_002ex"), +DOC_URL ("-mmul32x16", "gcc/ARC-Options.html#index-mmul32x16"), +DOC_URL ("-mmul64", "gcc/ARC-Options.html#index-mmul64"), +DOC_URL ("-mmuladd", "gcc/FRV-Options.html#index-mmuladd"), +DOC_URL ("-mmulhw", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mmulhw"), +DOC_URL ("-mmult-bug", "gcc/MN10300-Options.html#index-mmult-bug"), +DOC_URL ("-mmultcost", "gcc/ARC-Options.html#index-mmultcost"), +DOC_URL ("-mmulti-cond-exec", "gcc/FRV-Options.html#index-mmulti-cond-exec"), +DOC_URL ("-mmulticore", "gcc/Blackfin-Options.html#index-mmulticore"), +DOC_URL ("-mmultiple", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mmultiple"), +DOC_URL ("-mmultiple-stld", "gcc/C-SKY-Options.html#index-mmultiple-stld"), +DOC_URL ("-mmusl", "gcc/GNU_002fLinux-Options.html#index-mmusl"), +DOC_URL ("-mmvcle", "gcc/S_002f390-and-zSeries-Options.html#index-mmvcle"), +DOC_URL ("-mmvme", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mmvme"), +DOC_URL ("-mmwait", "gcc/x86-Options.html#index-mmwait"), +DOC_URL ("-mmwaitx", "gcc/x86-Options.html#index-mmwaitx"), +DOC_URL ("-mn", "gcc/H8_002f300-Options.html#index-mn"), +DOC_URL ("-mn-flash", "gcc/AVR-Options.html#index-mn-flash"), +DOC_URL ("-mnan=2008", "gcc/MIPS-Options.html#index-mnan_003d2008"), +DOC_URL ("-mnan=legacy", "gcc/MIPS-Options.html#index-mnan_003dlegacy"), +DOC_URL ("-mneeded", "gcc/x86-Options.html#index-mneeded"), +DOC_URL ("-mneon-for-64bits", "gcc/ARM-Options.html#index-mneon-for-64bits"), +DOC_URL ("-mnested-cond-exec", "gcc/FRV-Options.html#index-mnested-cond-exec"), +DOC_URL ("-mnewlib", "gcc/OpenRISC-Options.html#index-mnewlib"), +DOC_URL ("-mno-16-bit", "gcc/NDS32-Options.html#index-mno-16-bit"), +DOC_URL ("-mno-4byte-functions", "gcc/MCore-Options.html#index-mno-4byte-functions"), +DOC_URL ("-mno-8byte-align", "gcc/V850-Options.html#index-mno-8byte-align"), +DOC_URL ("-mno-abicalls", "gcc/MIPS-Options.html#index-mno-abicalls"), +DOC_URL ("-mno-ac0", "gcc/PDP-11-Options.html#index-mno-ac0"), +DOC_URL ("-mno-align-double", "gcc/x86-Options.html#index-mno-align-double"), +DOC_URL ("-mno-align-int", "gcc/M680x0-Options.html#index-mno-align-int"), +DOC_URL ("-mno-align-loops", "gcc/M32R_002fD-Options.html#index-mno-align-loops"), +DOC_URL ("-mno-align-stringops", "gcc/x86-Options.html#index-mno-align-stringops"), +DOC_URL ("-mno-allow-string-insns", "gcc/RX-Options.html#index-mno-allow-string-insns"), +DOC_URL ("-mno-altivec", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-altivec"), +DOC_URL ("-mno-am33", "gcc/MN10300-Options.html#index-mno-am33"), +DOC_URL ("-mno-as100-syntax", "gcc/RX-Options.html#index-mno-as100-syntax"), +DOC_URL ("-mno-atomic-libcalls", "gcc/HPPA-Options.html#index-mno-atomic-libcalls"), +DOC_URL ("-mno-auto-litpools", "gcc/Xtensa-Options.html#index-mno-auto-litpools"), +DOC_URL ("-mno-avoid-indexed-addresses", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-avoid-indexed-addresses"), +DOC_URL ("-mno-backchain", "gcc/S_002f390-and-zSeries-Options.html#index-mno-backchain"), +DOC_URL ("-mno-base-addresses", "gcc/MMIX-Options.html#index-mno-base-addresses"), +DOC_URL ("-mno-bit-align", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-bit-align"), +DOC_URL ("-mno-bitfield", "gcc/M680x0-Options.html#index-mno-bitfield"), +DOC_URL ("-mno-branch-likely", "gcc/MIPS-Options.html#index-mno-branch-likely"), +DOC_URL ("-mno-branch-predict", "gcc/MMIX-Options.html#index-mno-branch-predict"), +DOC_URL ("-mno-brcc", "gcc/ARC-Options.html#index-mno-brcc"), +DOC_URL ("-mno-bwx", "gcc/DEC-Alpha-Options.html#index-mno-bwx"), +DOC_URL ("-mno-bypass-cache", "gcc/Nios-II-Options.html#index-mno-bypass-cache"), +DOC_URL ("-mno-cache-volatile", "gcc/Nios-II-Options.html#index-mno-cache-volatile"), +DOC_URL ("-mno-call-ms2sysv-xlogues", "gcc/x86-Options.html#index-mno-call-ms2sysv-xlogues"), +DOC_URL ("-mno-callgraph-data", "gcc/MCore-Options.html#index-mno-callgraph-data"), +DOC_URL ("-mno-cbcond", "gcc/SPARC-Options.html#index-mno-cbcond"), +DOC_URL ("-mno-check-zero-division", "gcc/MIPS-Options.html#index-mno-check-zero-division"), +DOC_URL ("-mno-cix", "gcc/DEC-Alpha-Options.html#index-mno-cix"), +DOC_URL ("-mno-clearbss", "gcc/MicroBlaze-Options.html#index-mno-clearbss"), +DOC_URL ("-mno-cmov", "gcc/NDS32-Options.html#index-mno-cmov"), +DOC_URL ("-mno-cmpb", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-cmpb"), +DOC_URL ("-mno-co-re", "gcc/eBPF-Options.html#index-mno-co-re"), +DOC_URL ("-mno-cond-move", "gcc/FRV-Options.html#index-mno-cond-move"), +DOC_URL ("-mno-const-align", "gcc/CRIS-Options.html#index-mno-const-align"), +DOC_URL ("-mno-const16", "gcc/Xtensa-Options.html#index-mno-const16"), +DOC_URL ("-mno-crc", "gcc/MIPS-Options.html#index-mno-crc"), +DOC_URL ("-mno-crypto", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-crypto"), +DOC_URL ("-mno-csync-anomaly", "gcc/Blackfin-Options.html#index-mno-csync-anomaly"), +DOC_URL ("-mno-custom-insn", "gcc/Nios-II-Options.html#index-mno-custom-insn"), +DOC_URL ("-mno-data-align", "gcc/CRIS-Options.html#index-mno-data-align"), +DOC_URL ("-mno-debug", "gcc/S_002f390-and-zSeries-Options.html#index-mno-debug"), +DOC_URL ("-mno-default", "gcc/x86-Options.html#index-mno-default"), +DOC_URL ("-mno-disable-callt", "gcc/V850-Options.html#index-mno-disable-callt"), +DOC_URL ("-mno-dlmzb", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-dlmzb"), +DOC_URL ("-mno-double", "gcc/FRV-Options.html#index-mno-double"), +DOC_URL ("-mno-dpfp-lrsr", "gcc/ARC-Options.html#index-mno-dpfp-lrsr"), +DOC_URL ("-mno-dsp", "gcc/MIPS-Options.html#index-mno-dsp"), +DOC_URL ("-mno-dspr2", "gcc/MIPS-Options.html#index-mno-dspr2"), +DOC_URL ("-mno-dwarf2-asm", "gcc/IA-64-Options.html#index-mno-dwarf2-asm"), +DOC_URL ("-mno-dword", "gcc/FRV-Options.html#index-mno-dword"), +DOC_URL ("-mno-eabi", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-eabi"), +DOC_URL ("-mno-early-stop-bits", "gcc/IA-64-Options.html#index-mno-early-stop-bits"), +DOC_URL ("-mno-eflags", "gcc/FRV-Options.html#index-mno-eflags"), +DOC_URL ("-mno-embedded-data", "gcc/MIPS-Options.html#index-mno-embedded-data"), +DOC_URL ("-mno-ep", "gcc/V850-Options.html#index-mno-ep"), +DOC_URL ("-mno-epsilon", "gcc/MMIX-Options.html#index-mno-epsilon"), +DOC_URL ("-mno-eva", "gcc/MIPS-Options.html#index-mno-eva"), +DOC_URL ("-mno-exr", "gcc/H8_002f300-Options.html#index-mno-exr"), +DOC_URL ("-mno-ext-perf", "gcc/NDS32-Options.html#index-mno-ext-perf"), +DOC_URL ("-mno-ext-perf2", "gcc/NDS32-Options.html#index-mno-ext-perf2"), +DOC_URL ("-mno-ext-string", "gcc/NDS32-Options.html#index-mno-ext-string"), +DOC_URL ("-mno-extern-sdata", "gcc/MIPS-Options.html#index-mno-extern-sdata"), +DOC_URL ("-mno-fancy-math-387", "gcc/x86-Options.html#index-mno-fancy-math-387"), +DOC_URL ("-mno-fast-sw-div", "gcc/Nios-II-Options.html#index-mno-fast-sw-div"), +DOC_URL ("-mno-faster-structs", "gcc/SPARC-Options.html#index-mno-faster-structs"), +DOC_URL ("-mno-fdpic", "gcc/ARM-Options.html#index-mno-fdpic"), +DOC_URL ("-mno-fix", "gcc/DEC-Alpha-Options.html#index-mno-fix"), +DOC_URL ("-mno-fix-24k", "gcc/MIPS-Options.html#index-mno-fix-24k"), +DOC_URL ("-mno-fix-cortex-a53-835769", "gcc/AArch64-Options.html#index-mno-fix-cortex-a53-835769"), +DOC_URL ("-mno-fix-cortex-a53-843419", "gcc/AArch64-Options.html#index-mno-fix-cortex-a53-843419"), +DOC_URL ("-mno-fix-r10000", "gcc/MIPS-Options.html#index-mno-fix-r10000"), +DOC_URL ("-mno-fix-r4000", "gcc/MIPS-Options.html#index-mno-fix-r4000"), +DOC_URL ("-mno-fix-r4400", "gcc/MIPS-Options.html#index-mno-fix-r4400"), +DOC_URL ("-mno-flat", "gcc/SPARC-Options.html#index-mno-flat"), +DOC_URL ("-mno-float", "gcc/MIPS-Options.html#index-mno-float"), +DOC_URL ("-mno-float128", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-float128"), +DOC_URL ("-mno-float128-hardware", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-float128-hardware"), +DOC_URL ("-mno-flush-func", "gcc/M32R_002fD-Options.html#index-mno-flush-func"), +DOC_URL ("-mno-flush-trap", "gcc/M32R_002fD-Options.html#index-mno-flush-trap"), +DOC_URL ("-mno-fmaf", "gcc/SPARC-Options.html#index-mno-fmaf"), +DOC_URL ("-mno-fp-in-toc", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-fp-in-toc"), +DOC_URL ("-mno-fp-regs", "gcc/DEC-Alpha-Options.html#index-mno-fp-regs"), +DOC_URL ("-mno-fp-ret-in-387", "gcc/x86-Options.html#index-mno-fp-ret-in-387"), +DOC_URL ("-mno-fprnd", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-fprnd"), +DOC_URL ("-mno-fsca", "gcc/SH-Options.html#index-mno-fsca"), +DOC_URL ("-mno-fsmuld", "gcc/SPARC-Options.html#index-mno-fsmuld"), +DOC_URL ("-mno-fsrra", "gcc/SH-Options.html#index-mno-fsrra"), +DOC_URL ("-mno-ginv", "gcc/MIPS-Options.html#index-mno-ginv"), +DOC_URL ("-mno-gnu-as", "gcc/IA-64-Options.html#index-mno-gnu-as"), +DOC_URL ("-mno-gnu-attribute", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-gnu-attribute"), +DOC_URL ("-mno-gnu-ld", "gcc/IA-64-Options.html#index-mno-gnu-ld"), +DOC_URL ("-mno-hardlit", "gcc/MCore-Options.html#index-mno-hardlit"), +DOC_URL ("-mno-hw-div", "gcc/Nios-II-Options.html#index-mno-hw-div"), +DOC_URL ("-mno-hw-mul", "gcc/Nios-II-Options.html#index-mno-hw-mul"), +DOC_URL ("-mno-hw-mulx", "gcc/Nios-II-Options.html#index-mno-hw-mulx"), +DOC_URL ("-mno-id-shared-library", "gcc/Blackfin-Options.html#index-mno-id-shared-library"), +DOC_URL ("-mno-ieee", "gcc/SH-Options.html#index-mno-ieee"), +DOC_URL ("-mno-ieee-fp", "gcc/x86-Options.html#index-mno-ieee-fp"), +DOC_URL ("-mno-imadd", "gcc/MIPS-Options.html#index-mno-imadd"), +DOC_URL ("-mno-inline-float-divide", "gcc/IA-64-Options.html#index-mno-inline-float-divide"), +DOC_URL ("-mno-inline-int-divide", "gcc/IA-64-Options.html#index-mno-inline-int-divide"), +DOC_URL ("-mno-inline-sqrt", "gcc/IA-64-Options.html#index-mno-inline-sqrt"), +DOC_URL ("-mno-int16", "gcc/PDP-11-Options.html#index-mno-int16"), +DOC_URL ("-mno-int32", "gcc/PDP-11-Options.html#index-mno-int32"), +DOC_URL ("-mno-interlink-compressed", "gcc/MIPS-Options.html#index-mno-interlink-compressed"), +DOC_URL ("-mno-interlink-mips16", "gcc/MIPS-Options.html#index-mno-interlink-mips16"), +DOC_URL ("-mno-interrupts", "gcc/AVR-Options.html#index-mno-interrupts"), +DOC_URL ("-mno-isel", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-isel"), +DOC_URL ("-mno-jsr", "gcc/RX-Options.html#index-mno-jsr"), +DOC_URL ("-mno-knuthdiv", "gcc/MMIX-Options.html#index-mno-knuthdiv"), +DOC_URL ("-mno-leaf-id-shared-library", "gcc/Blackfin-Options.html#index-mno-leaf-id-shared-library"), +DOC_URL ("-mno-libfuncs", "gcc/MMIX-Options.html#index-mno-libfuncs"), +DOC_URL ("-mno-liw", "gcc/MN10300-Options.html#index-mno-liw"), +DOC_URL ("-mno-llsc", "gcc/MIPS-Options.html#index-mno-llsc"), +DOC_URL ("-mno-load-store-pairs", "gcc/MIPS-Options.html#index-mno-load-store-pairs"), +DOC_URL ("-mno-local-sdata", "gcc/MIPS-Options.html#index-mno-local-sdata"), +DOC_URL ("-mno-long-jumps", "gcc/V850-Options.html#index-mno-long-jumps"), +DOC_URL ("-mno-longcall", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-longcall"), +DOC_URL ("-mno-longcalls", "gcc/Xtensa-Options.html#index-mno-longcalls"), +DOC_URL ("-mno-loongson-ext", "gcc/MIPS-Options.html#index-mno-loongson-ext"), +DOC_URL ("-mno-loongson-ext2", "gcc/MIPS-Options.html#index-mno-loongson-ext2"), +DOC_URL ("-mno-loongson-mmi", "gcc/MIPS-Options.html#index-mno-loongson-mmi"), +DOC_URL ("-mno-low-precision-div", "gcc/AArch64-Options.html#index-mno-low-precision-div"), +DOC_URL ("-mno-low-precision-recip-sqrt", "gcc/AArch64-Options.html#index-mno-low-precision-recip-sqrt"), +DOC_URL ("-mno-low-precision-sqrt", "gcc/AArch64-Options.html#index-mno-low-precision-sqrt"), +DOC_URL ("-mno-low64k", "gcc/Blackfin-Options.html#index-mno-low64k"), +DOC_URL ("-mno-mad", "gcc/MIPS-Options.html#index-mno-mad"), +DOC_URL ("-mno-max", "gcc/DEC-Alpha-Options.html#index-mno-max"), +DOC_URL ("-mno-mcount-ra-address", "gcc/MIPS-Options.html#index-mno-mcount-ra-address"), +DOC_URL ("-mno-mcu", "gcc/MIPS-Options.html#index-mno-mcu"), +DOC_URL ("-mno-mdmx", "gcc/MIPS-Options.html#index-mno-mdmx"), +DOC_URL ("-mno-media", "gcc/FRV-Options.html#index-mno-media"), +DOC_URL ("-mno-memcpy", "gcc/MIPS-Options.html#index-mno-memcpy"), +DOC_URL ("-mno-mfcrf", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-mfcrf"), +DOC_URL ("-mno-mips16", "gcc/MIPS-Options.html#index-mno-mips16"), +DOC_URL ("-mno-mips16e2", "gcc/MIPS-Options.html#index-mno-mips16e2"), +DOC_URL ("-mno-mips3d", "gcc/MIPS-Options.html#index-mno-mips3d"), +DOC_URL ("-mno-mma", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-mma"), +DOC_URL ("-mno-mmicromips", "gcc/MIPS-Options.html#index-mno-mmicromips"), +DOC_URL ("-mno-mpy", "gcc/ARC-Options.html#index-mno-mpy"), +DOC_URL ("-mno-ms-bitfields", "gcc/x86-Options.html#index-mno-ms-bitfields"), +DOC_URL ("-mno-mt", "gcc/MIPS-Options.html#index-mno-mt"), +DOC_URL ("-mno-mul-bug-workaround", "gcc/CRIS-Options.html#index-mno-mul-bug-workaround"), +DOC_URL ("-mno-muladd", "gcc/FRV-Options.html#index-mno-muladd"), +DOC_URL ("-mno-mulhw", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-mulhw"), +DOC_URL ("-mno-mult-bug", "gcc/MN10300-Options.html#index-mno-mult-bug"), +DOC_URL ("-mno-multi-cond-exec", "gcc/FRV-Options.html#index-mno-multi-cond-exec"), +DOC_URL ("-mno-multiple", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-multiple"), +DOC_URL ("-mno-mvcle", "gcc/S_002f390-and-zSeries-Options.html#index-mno-mvcle"), +DOC_URL ("-mno-nested-cond-exec", "gcc/FRV-Options.html#index-mno-nested-cond-exec"), +DOC_URL ("-mno-odd-spreg", "gcc/MIPS-Options.html#index-mno-odd-spreg"), +DOC_URL ("-mno-omit-leaf-frame-pointer", "gcc/AArch64-Options.html#index-mno-omit-leaf-frame-pointer"), +DOC_URL ("-mno-optimize-membar", "gcc/FRV-Options.html#index-mno-optimize-membar"), +DOC_URL ("-mno-pack", "gcc/FRV-Options.html#index-mno-pack"), +DOC_URL ("-mno-packed-stack", "gcc/S_002f390-and-zSeries-Options.html#index-mno-packed-stack"), +DOC_URL ("-mno-paired-single", "gcc/MIPS-Options.html#index-mno-paired-single"), +DOC_URL ("-mno-pc-relative-literal-loads", "gcc/AArch64-Options.html#index-mno-pc-relative-literal-loads"), +DOC_URL ("-mno-pcrel", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-pcrel"), +DOC_URL ("-mno-pic", "gcc/IA-64-Options.html#index-mno-pic"), +DOC_URL ("-mno-pid", "gcc/RX-Options.html#index-mno-pid"), +DOC_URL ("-mno-plt", "gcc/MIPS-Options.html#index-mno-plt"), +DOC_URL ("-mno-pltseq", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-pltseq"), +DOC_URL ("-mno-popc", "gcc/SPARC-Options.html#index-mno-popc"), +DOC_URL ("-mno-popcntb", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-popcntb"), +DOC_URL ("-mno-popcntd", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-popcntd"), +DOC_URL ("-mno-postinc", "gcc/Adapteva-Epiphany-Options.html#index-mno-postinc"), +DOC_URL ("-mno-postmodify", "gcc/Adapteva-Epiphany-Options.html#index-mno-postmodify"), +DOC_URL ("-mno-power8-fusion", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-power8-fusion"), +DOC_URL ("-mno-power8-vector", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-power8-vector"), +DOC_URL ("-mno-powerpc-gfxopt", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-powerpc-gfxopt"), +DOC_URL ("-mno-powerpc-gpopt", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-powerpc-gpopt"), +DOC_URL ("-mno-powerpc64", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-powerpc64"), +DOC_URL ("-mno-prefixed", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-prefixed"), +DOC_URL ("-mno-privileged", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-privileged"), +DOC_URL ("-mno-prolog-function", "gcc/V850-Options.html#index-mno-prolog-function"), +DOC_URL ("-mno-prologue-epilogue", "gcc/CRIS-Options.html#index-mno-prologue-epilogue"), +DOC_URL ("-mno-prototype", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-prototype"), +DOC_URL ("-mno-push-args", "gcc/x86-Options.html#index-mno-push-args"), +DOC_URL ("-mno-quad-memory", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-quad-memory"), +DOC_URL ("-mno-quad-memory-atomic", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-quad-memory-atomic"), +DOC_URL ("-mno-readonly-in-sdata", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-readonly-in-sdata"), +DOC_URL ("-mno-red-zone", "gcc/x86-Options.html#index-mno-red-zone"), +DOC_URL ("-mno-register-names", "gcc/IA-64-Options.html#index-mno-register-names"), +DOC_URL ("-mno-regnames", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-regnames"), +DOC_URL ("-mno-relax-immediate", "gcc/MCore-Options.html#index-mno-relax-immediate"), +DOC_URL ("-mno-relocatable", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-relocatable"), +DOC_URL ("-mno-relocatable-lib", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-relocatable-lib"), +DOC_URL ("-mno-renesas", "gcc/SH-Options.html#index-mno-renesas"), +DOC_URL ("-mno-rop-protect", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-rop-protect"), +DOC_URL ("-mno-round-nearest", "gcc/Adapteva-Epiphany-Options.html#index-mno-round-nearest"), +DOC_URL ("-mno-save-mduc-in-interrupts", "gcc/RL78-Options.html#index-mno-save-mduc-in-interrupts"), +DOC_URL ("-mno-scc", "gcc/FRV-Options.html#index-mno-scc"), +DOC_URL ("-mno-sched-ar-data-spec", "gcc/IA-64-Options.html#index-mno-sched-ar-data-spec"), +DOC_URL ("-mno-sched-ar-in-data-spec", "gcc/IA-64-Options.html#index-mno-sched-ar-in-data-spec"), +DOC_URL ("-mno-sched-br-data-spec", "gcc/IA-64-Options.html#index-mno-sched-br-data-spec"), +DOC_URL ("-mno-sched-br-in-data-spec", "gcc/IA-64-Options.html#index-mno-sched-br-in-data-spec"), +DOC_URL ("-mno-sched-control-spec", "gcc/IA-64-Options.html#index-mno-sched-control-spec"), +DOC_URL ("-mno-sched-count-spec-in-critical-path", "gcc/IA-64-Options.html#index-mno-sched-count-spec-in-critical-path"), +DOC_URL ("-mno-sched-in-control-spec", "gcc/IA-64-Options.html#index-mno-sched-in-control-spec"), +DOC_URL ("-mno-sched-prefer-non-control-spec-insns", "gcc/IA-64-Options.html#index-mno-sched-prefer-non-control-spec-insns"), +DOC_URL ("-mno-sched-prefer-non-data-spec-insns", "gcc/IA-64-Options.html#index-mno-sched-prefer-non-data-spec-insns"), +DOC_URL ("-mno-sched-prolog", "gcc/ARM-Options.html#index-mno-sched-prolog"), +DOC_URL ("-mno-sep-data", "gcc/Blackfin-Options.html#index-mno-sep-data"), +DOC_URL ("-mno-serialize-volatile", "gcc/Xtensa-Options.html#index-mno-serialize-volatile"), +DOC_URL ("-mno-setlb", "gcc/MN10300-Options.html#index-mno-setlb"), +DOC_URL ("-mno-short", "gcc/M680x0-Options.html#index-mno-short"), +DOC_URL ("-mno-side-effects", "gcc/CRIS-Options.html#index-mno-side-effects"), +DOC_URL ("-mno-sim", "gcc/RX-Options.html#index-mno-sim"), +DOC_URL ("-mno-single-exit", "gcc/MMIX-Options.html#index-mno-single-exit"), +DOC_URL ("-mno-slow-bytes", "gcc/MCore-Options.html#index-mno-slow-bytes"), +DOC_URL ("-mno-small-exec", "gcc/S_002f390-and-zSeries-Options.html#index-mno-small-exec"), +DOC_URL ("-mno-smartmips", "gcc/MIPS-Options.html#index-mno-smartmips"), +DOC_URL ("-mno-soft-cmpsf", "gcc/Adapteva-Epiphany-Options.html#index-mno-soft-cmpsf"), +DOC_URL ("-mno-soft-float", "gcc/DEC-Alpha-Options.html#index-mno-soft-float"), +DOC_URL ("-mno-space-regs", "gcc/HPPA-Options.html#index-mno-space-regs"), +DOC_URL ("-mno-specld-anomaly", "gcc/Blackfin-Options.html#index-mno-specld-anomaly"), +DOC_URL ("-mno-split-addresses", "gcc/MIPS-Options.html#index-mno-split-addresses"), +DOC_URL ("-mno-split-lohi", "gcc/Adapteva-Epiphany-Options.html#index-mno-split-lohi"), +DOC_URL ("-mno-stack-align", "gcc/CRIS-Options.html#index-mno-stack-align"), +DOC_URL ("-mno-stack-bias", "gcc/SPARC-Options.html#index-mno-stack-bias"), +DOC_URL ("-mno-std-struct-return", "gcc/SPARC-Options.html#index-mno-std-struct-return"), +DOC_URL ("-mno-subxc", "gcc/SPARC-Options.html#index-mno-subxc"), +DOC_URL ("-mno-sum-in-toc", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-sum-in-toc"), +DOC_URL ("-mno-sym32", "gcc/MIPS-Options.html#index-mno-sym32"), +DOC_URL ("-mno-target-align", "gcc/Xtensa-Options.html#index-mno-target-align"), +DOC_URL ("-mno-text-section-literals", "gcc/Xtensa-Options.html#index-mno-text-section-literals"), +DOC_URL ("-mno-tls-markers", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-tls-markers"), +DOC_URL ("-mno-toc", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-toc"), +DOC_URL ("-mno-toplevel-symbols", "gcc/MMIX-Options.html#index-mno-toplevel-symbols"), +DOC_URL ("-mno-tpf-trace", "gcc/S_002f390-and-zSeries-Options.html#index-mno-tpf-trace"), +DOC_URL ("-mno-tpf-trace-skip", "gcc/S_002f390-and-zSeries-Options.html#index-mno-tpf-trace-skip"), +DOC_URL ("-mno-unaligned-doubles", "gcc/SPARC-Options.html#index-mno-unaligned-doubles"), +DOC_URL ("-mno-uninit-const-in-rodata", "gcc/MIPS-Options.html#index-mno-uninit-const-in-rodata"), +DOC_URL ("-mno-unroll-only-small-loops", "gcc/x86-Options.html#index-mno-unroll-only-small-loops"), +DOC_URL ("-mno-update", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-update"), +DOC_URL ("-mno-user-mode", "gcc/SPARC-Options.html#index-mno-user-mode"), +DOC_URL ("-mno-usermode", "gcc/SH-Options.html#index-mno-usermode"), +DOC_URL ("-mno-v3push", "gcc/NDS32-Options.html#index-mno-v3push"), +DOC_URL ("-mno-v8plus", "gcc/SPARC-Options.html#index-mno-v8plus"), +DOC_URL ("-mno-vect-double", "gcc/Adapteva-Epiphany-Options.html#index-mno-vect-double"), +DOC_URL ("-mno-virt", "gcc/MIPS-Options.html#index-mno-virt"), +DOC_URL ("-mno-vis", "gcc/SPARC-Options.html#index-mno-vis"), +DOC_URL ("-mno-vis2", "gcc/SPARC-Options.html#index-mno-vis2"), +DOC_URL ("-mno-vis3", "gcc/SPARC-Options.html#index-mno-vis3"), +DOC_URL ("-mno-vis4", "gcc/SPARC-Options.html#index-mno-vis4"), +DOC_URL ("-mno-vis4b", "gcc/SPARC-Options.html#index-mno-vis4b"), +DOC_URL ("-mno-vliw-branch", "gcc/FRV-Options.html#index-mno-vliw-branch"), +DOC_URL ("-mno-volatile-asm-stop", "gcc/IA-64-Options.html#index-mno-volatile-asm-stop"), +DOC_URL ("-mno-volatile-cache", "gcc/ARC-Options.html#index-mno-volatile-cache"), +DOC_URL ("-mno-vrsave", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-vrsave"), +DOC_URL ("-mno-vsx", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-vsx"), +DOC_URL ("-mno-vx", "gcc/S_002f390-and-zSeries-Options.html#index-mno-vx"), +DOC_URL ("-mno-warn-devices-csv", "gcc/MSP430-Options.html#index-mno-warn-devices-csv"), +DOC_URL ("-mno-warn-mcu", "gcc/MSP430-Options.html#index-mno-warn-mcu"), +DOC_URL ("-mno-warn-multiple-fast-interrupts", "gcc/RX-Options.html#index-mno-warn-multiple-fast-interrupts"), +DOC_URL ("-mno-wide-bitfields", "gcc/MCore-Options.html#index-mno-wide-bitfields"), +DOC_URL ("-mno-xl-compat", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-xl-compat"), +DOC_URL ("-mno-xpa", "gcc/MIPS-Options.html#index-mno-xpa"), +DOC_URL ("-mno-zdcbranch", "gcc/SH-Options.html#index-mno-zdcbranch"), +DOC_URL ("-mno-zero-extend", "gcc/MMIX-Options.html#index-mno-zero-extend"), +DOC_URL ("-mno-zvector", "gcc/S_002f390-and-zSeries-Options.html#index-mno-zvector"), +DOC_URL ("-mnobitfield", "gcc/M680x0-Options.html#index-mnobitfield"), +DOC_URL ("-mnodiv", "gcc/FT32-Options.html#index-mnodiv"), +DOC_URL ("-mnomacsave", "gcc/SH-Options.html#index-mnomacsave"), +DOC_URL ("-mnop-fun-dllimport", "gcc/x86-Windows-Options.html#index-mnop-fun-dllimport"), +DOC_URL ("-mnop-mcount", "gcc/x86-Options.html#index-mnop-mcount"), +DOC_URL ("-mnopm", "gcc/FT32-Options.html#index-mnopm"), +DOC_URL ("-mnops", "gcc/Adapteva-Epiphany-Options.html#index-mnops"), +DOC_URL ("-mnorm", "gcc/ARC-Options.html#index-mnorm"), +DOC_URL ("-modd-spreg", "gcc/MIPS-Options.html#index-modd-spreg"), +DOC_URL ("-mone-byte-bool", "gcc/Darwin-Options.html#index-mone-byte-bool"), +DOC_URL ("-moptimize", "gcc/Nvidia-PTX-Options.html#index-moptimize"), +DOC_URL ("-mordered", "gcc/HPPA-Options.html#index-mordered"), +DOC_URL ("-moverride", "gcc/AArch64-Options.html#index-moverride"), +DOC_URL ("-mpa-risc-1-0", "gcc/HPPA-Options.html#index-mpa-risc-1-0"), +DOC_URL ("-mpa-risc-1-1", "gcc/HPPA-Options.html#index-mpa-risc-1-1"), +DOC_URL ("-mpa-risc-2-0", "gcc/HPPA-Options.html#index-mpa-risc-2-0"), +DOC_URL ("-mpack", "gcc/FRV-Options.html#index-mpack"), +DOC_URL ("-mpacked-stack", "gcc/S_002f390-and-zSeries-Options.html#index-mpacked-stack"), +DOC_URL ("-mpadstruct", "gcc/SH-Options.html#index-mpadstruct"), +DOC_URL ("-mpaired-single", "gcc/MIPS-Options.html#index-mpaired-single"), +DOC_URL ("-mpartial-vector-fp-math", "gcc/x86-Options.html#index-mpartial-vector-fp-math"), +DOC_URL ("-mpc-relative-literal-loads", "gcc/AArch64-Options.html#index-mpc-relative-literal-loads"), +DOC_URL ("-mpc32", "gcc/x86-Options.html#index-mpc32"), +DOC_URL ("-mpc64", "gcc/x86-Options.html#index-mpc64"), +DOC_URL ("-mpc80", "gcc/x86-Options.html#index-mpc80"), +DOC_URL ("-mpclmul", "gcc/x86-Options.html#index-mpclmul"), +DOC_URL ("-mpconfig", "gcc/x86-Options.html#index-mpconfig"), +DOC_URL ("-mpdebug", "gcc/CRIS-Options.html#index-mpdebug"), +DOC_URL ("-mpe", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpe"), +DOC_URL ("-mpe-aligned-commons", "gcc/x86-Windows-Options.html#index-mpe-aligned-commons"), +DOC_URL ("-mpic-register", "gcc/ARM-Options.html#index-mpic-register"), +DOC_URL ("-mpid", "gcc/RX-Options.html#index-mpid"), +DOC_URL ("-mpku", "gcc/x86-Options.html#index-mpku"), +DOC_URL ("-mplt", "gcc/MIPS-Options.html#index-mplt"), +DOC_URL ("-mpltseq", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpltseq"), +DOC_URL ("-mpointer-size=size", "gcc/VMS-Options.html#index-mpointer-size_003dsize"), +DOC_URL ("-mpointers-to-nested-functions", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpointers-to-nested-functions"), +DOC_URL ("-mpoke-function-name", "gcc/ARM-Options.html#index-mpoke-function-name"), +DOC_URL ("-mpopc", "gcc/SPARC-Options.html#index-mpopc"), +DOC_URL ("-mpopcnt", "gcc/x86-Options.html#index-mpopcnt"), +DOC_URL ("-mpopcntb", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntb"), +DOC_URL ("-mpopcntd", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntd"), +DOC_URL ("-mportable-runtime", "gcc/HPPA-Options.html#index-mportable-runtime"), +DOC_URL ("-mpostinc", "gcc/Adapteva-Epiphany-Options.html#index-mpostinc"), +DOC_URL ("-mpostmodify", "gcc/Adapteva-Epiphany-Options.html#index-mpostmodify"), +DOC_URL ("-mpower8-fusion", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-fusion"), +DOC_URL ("-mpower8-vector", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-vector"), +DOC_URL ("-mpowerpc-gfxopt", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gfxopt"), +DOC_URL ("-mpowerpc-gpopt", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gpopt"), +DOC_URL ("-mpowerpc64", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc64"), +DOC_URL ("-mprefer-avx128", "gcc/x86-Options.html#index-mprefer-avx128"), +DOC_URL ("-mprefer-short-insn-regs", "gcc/Adapteva-Epiphany-Options.html#index-mprefer-short-insn-regs"), +DOC_URL ("-mprefer-vector-width", "gcc/x86-Options.html#index-mprefer-vector-width"), +DOC_URL ("-mprefergot", "gcc/SH-Options.html#index-mprefergot"), +DOC_URL ("-mprefetchi", "gcc/x86-Options.html#index-mprefetchi"), +DOC_URL ("-mprefetchwt1", "gcc/x86-Options.html#index-mprefetchwt1"), +DOC_URL ("-mprefixed", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mprefixed"), +DOC_URL ("-mpretend-cmove", "gcc/SH-Options.html#index-mpretend-cmove"), +DOC_URL ("-mprfchw", "gcc/x86-Options.html#index-mprfchw"), +DOC_URL ("-mprint-tune-info", "gcc/ARM-Options.html#index-mprint-tune-info"), +DOC_URL ("-mprioritize-restricted-insns", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mprioritize-restricted-insns"), +DOC_URL ("-mprivileged", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mprivileged"), +DOC_URL ("-mprolog-function", "gcc/V850-Options.html#index-mprolog-function"), +DOC_URL ("-mprologue-epilogue", "gcc/CRIS-Options.html#index-mprologue-epilogue"), +DOC_URL ("-mprototype", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mprototype"), +DOC_URL ("-mptwrite", "gcc/x86-Options.html#index-mptwrite"), +DOC_URL ("-mptx", "gcc/Nvidia-PTX-Options.html#index-mptx"), +DOC_URL ("-mpure-code", "gcc/ARM-Options.html#index-mpure-code"), +DOC_URL ("-mpush-args", "gcc/x86-Options.html#index-mpush-args"), +DOC_URL ("-mpushpop", "gcc/C-SKY-Options.html#index-mpushpop"), +DOC_URL ("-mq-class", "gcc/ARC-Options.html#index-mq-class"), +DOC_URL ("-mquad-memory", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory"), +DOC_URL ("-mquad-memory-atomic", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory-atomic"), +DOC_URL ("-mr0rel-sec", "gcc/Nios-II-Options.html#index-mr0rel-sec"), +DOC_URL ("-mr10k-cache-barrier", "gcc/MIPS-Options.html#index-mr10k-cache-barrier"), +DOC_URL ("-mraoint", "gcc/x86-Options.html#index-mraoint"), +DOC_URL ("-mrdpid", "gcc/x86-Options.html#index-mrdpid"), +DOC_URL ("-mrdrnd", "gcc/x86-Options.html#index-mrdrnd"), +DOC_URL ("-mrdseed", "gcc/x86-Options.html#index-mrdseed"), +DOC_URL ("-mreadonly-in-sdata", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mreadonly-in-sdata"), +DOC_URL ("-mrecip-precision", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip-precision"), +DOC_URL ("-mrecord-mcount", "gcc/x86-Options.html#index-mrecord-mcount"), +DOC_URL ("-mrecord-return", "gcc/x86-Options.html#index-mrecord-return"), +DOC_URL ("-mred-zone", "gcc/x86-Options.html#index-mred-zone"), +DOC_URL ("-mreduced-regs", "gcc/NDS32-Options.html#index-mreduced-regs"), +DOC_URL ("-mregister-names", "gcc/IA-64-Options.html#index-mregister-names"), +DOC_URL ("-mregnames", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mregnames"), +DOC_URL ("-mregparm", "gcc/x86-Options.html#index-mregparm"), +DOC_URL ("-mrelax-cmpxchg-loop", "gcc/x86-Options.html#index-mrelax-cmpxchg-loop"), +DOC_URL ("-mrelax-immediate", "gcc/MCore-Options.html#index-mrelax-immediate"), +DOC_URL ("-mrelax-pic-calls", "gcc/MIPS-Options.html#index-mrelax-pic-calls"), +DOC_URL ("-mrelocatable", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable"), +DOC_URL ("-mrelocatable-lib", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable-lib"), +DOC_URL ("-mrenesas", "gcc/SH-Options.html#index-mrenesas"), +DOC_URL ("-mrestrict-it", "gcc/ARM-Options.html#index-mrestrict-it"), +DOC_URL ("-mreturn-pointer-on-d0", "gcc/MN10300-Options.html#index-mreturn-pointer-on-d0"), +DOC_URL ("-mrf16", "gcc/ARC-Options.html#index-mrf16"), +DOC_URL ("-mrgf-banked-regs", "gcc/ARC-Options.html#index-mrgf-banked-regs"), +DOC_URL ("-mrh850-abi", "gcc/V850-Options.html#index-mrh850-abi"), +DOC_URL ("-mriscv-attribute", "gcc/RISC-V-Options.html#index-mriscv-attribute"), +DOC_URL ("-mrl78", "gcc/RL78-Options.html#index-mrl78"), +DOC_URL ("-mrmw", "gcc/AVR-Options.html#index-mrmw"), +DOC_URL ("-mrop-protect", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mrop-protect"), +DOC_URL ("-mror", "gcc/OpenRISC-Options.html#index-mror"), +DOC_URL ("-mrori", "gcc/OpenRISC-Options.html#index-mrori"), +DOC_URL ("-mround-nearest", "gcc/Adapteva-Epiphany-Options.html#index-mround-nearest"), +DOC_URL ("-mrtm", "gcc/x86-Options.html#index-mrtm"), +DOC_URL ("-mrtp", "gcc/VxWorks-Options.html#index-mrtp"), +DOC_URL ("-mrtsc", "gcc/ARC-Options.html#index-mrtsc"), +DOC_URL ("-ms", "gcc/H8_002f300-Options.html#index-ms"), +DOC_URL ("-ms2600", "gcc/H8_002f300-Options.html#index-ms2600"), +DOC_URL ("-msahf", "gcc/x86-Options.html#index-msahf"), +DOC_URL ("-msave-acc-in-interrupts", "gcc/RX-Options.html#index-msave-acc-in-interrupts"), +DOC_URL ("-msave-mduc-in-interrupts", "gcc/RL78-Options.html#index-msave-mduc-in-interrupts"), +DOC_URL ("-msave-restore", "gcc/RISC-V-Options.html#index-msave-restore"), +DOC_URL ("-msave-toc-indirect", "gcc/RS_002f6000-and-PowerPC-Options.html#index-msave-toc-indirect"), +DOC_URL ("-mscc", "gcc/FRV-Options.html#index-mscc"), +DOC_URL ("-msched-ar-data-spec", "gcc/IA-64-Options.html#index-msched-ar-data-spec"), +DOC_URL ("-msched-ar-in-data-spec", "gcc/IA-64-Options.html#index-msched-ar-in-data-spec"), +DOC_URL ("-msched-br-data-spec", "gcc/IA-64-Options.html#index-msched-br-data-spec"), +DOC_URL ("-msched-br-in-data-spec", "gcc/IA-64-Options.html#index-msched-br-in-data-spec"), +DOC_URL ("-msched-control-spec", "gcc/IA-64-Options.html#index-msched-control-spec"), +DOC_URL ("-msched-costly-dep", "gcc/RS_002f6000-and-PowerPC-Options.html#index-msched-costly-dep"), +DOC_URL ("-msched-count-spec-in-critical-path", "gcc/IA-64-Options.html#index-msched-count-spec-in-critical-path"), +DOC_URL ("-msched-fp-mem-deps-zero-cost", "gcc/IA-64-Options.html#index-msched-fp-mem-deps-zero-cost"), +DOC_URL ("-msched-in-control-spec", "gcc/IA-64-Options.html#index-msched-in-control-spec"), +DOC_URL ("-msched-max-memory-insns", "gcc/IA-64-Options.html#index-msched-max-memory-insns"), +DOC_URL ("-msched-max-memory-insns-hard-limit", "gcc/IA-64-Options.html#index-msched-max-memory-insns-hard-limit"), +DOC_URL ("-msched-prefer-non-control-spec-insns", "gcc/IA-64-Options.html#index-msched-prefer-non-control-spec-insns"), +DOC_URL ("-msched-prefer-non-data-spec-insns", "gcc/IA-64-Options.html#index-msched-prefer-non-data-spec-insns"), +DOC_URL ("-msched-stop-bits-after-every-cycle", "gcc/IA-64-Options.html#index-msched-stop-bits-after-every-cycle"), +DOC_URL ("-mschedule", "gcc/HPPA-Options.html#index-mschedule"), +DOC_URL ("-msda", "gcc/V850-Options.html#index-msda"), +DOC_URL ("-msdata=all", "gcc/C6X-Options.html#index-msdata_003dall"), +DOC_URL ("-msdata=data", "gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata_003ddata"), +DOC_URL ("-msdata=eabi", "gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata_003deabi"), +DOC_URL ("-msdata=sdata", "gcc/M32R_002fD-Options.html#index-msdata_003dsdata"), +DOC_URL ("-msdata=sysv", "gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata_003dsysv"), +DOC_URL ("-msdata=use", "gcc/M32R_002fD-Options.html#index-msdata_003duse"), +DOC_URL ("-msdiv", "gcc/eBPF-Options.html#index-msdiv"), +DOC_URL ("-msdram", "gcc/Blackfin-Options.html#index-msdram"), +DOC_URL ("-msecure-plt", "gcc/RS_002f6000-and-PowerPC-Options.html#index-msecure-plt"), +DOC_URL ("-msecurity", "gcc/C-SKY-Options.html#index-msecurity"), +DOC_URL ("-msel-sched-dont-check-control-spec", "gcc/IA-64-Options.html#index-msel-sched-dont-check-control-spec"), +DOC_URL ("-mserialize", "gcc/x86-Options.html#index-mserialize"), +DOC_URL ("-mserialize-volatile", "gcc/Xtensa-Options.html#index-mserialize-volatile"), +DOC_URL ("-msetlb", "gcc/MN10300-Options.html#index-msetlb"), +DOC_URL ("-msext", "gcc/OpenRISC-Options.html#index-msext"), +DOC_URL ("-msfimm", "gcc/OpenRISC-Options.html#index-msfimm"), +DOC_URL ("-msgx", "gcc/x86-Options.html#index-msgx"), +DOC_URL ("-msha", "gcc/x86-Options.html#index-msha"), +DOC_URL ("-msha512", "gcc/x86-Options.html#index-msha512"), +DOC_URL ("-mshared-library-id", "gcc/Blackfin-Options.html#index-mshared-library-id"), +DOC_URL ("-mshftimm", "gcc/OpenRISC-Options.html#index-mshftimm"), +DOC_URL ("-mshort", "gcc/M680x0-Options.html#index-mshort"), +DOC_URL ("-mshort-calls", "gcc/AVR-Options.html#index-mshort-calls"), +DOC_URL ("-mshorten-memrefs", "gcc/RISC-V-Options.html#index-mshorten-memrefs"), +DOC_URL ("-mshstk", "gcc/x86-Options.html#index-mshstk"), +DOC_URL ("-mside-effects", "gcc/CRIS-Options.html#index-mside-effects"), +DOC_URL ("-msign-extend-enabled", "gcc/LM32-Options.html#index-msign-extend-enabled"), +DOC_URL ("-msign-return-address", "gcc/AArch64-Options.html#index-msign-return-address"), +DOC_URL ("-msilicon-errata", "gcc/MSP430-Options.html#index-msilicon-errata"), +DOC_URL ("-msilicon-errata-warn", "gcc/MSP430-Options.html#index-msilicon-errata-warn"), +DOC_URL ("-msingle-exit", "gcc/MMIX-Options.html#index-msingle-exit"), +DOC_URL ("-msio", "gcc/HPPA-Options.html#index-msio"), +DOC_URL ("-msize-level", "gcc/ARC-Options.html#index-msize-level"), +DOC_URL ("-mskip-rax-setup", "gcc/x86-Options.html#index-mskip-rax-setup"), +DOC_URL ("-mslow-bytes", "gcc/MCore-Options.html#index-mslow-bytes"), +DOC_URL ("-mslow-flash-data", "gcc/ARM-Options.html#index-mslow-flash-data"), +DOC_URL ("-msm3", "gcc/x86-Options.html#index-msm3"), +DOC_URL ("-msm4", "gcc/x86-Options.html#index-msm4"), +DOC_URL ("-msmall", "gcc/MSP430-Options.html#index-msmall"), +DOC_URL ("-msmall-data", "gcc/DEC-Alpha-Options.html#index-msmall-data"), +DOC_URL ("-msmall-divides", "gcc/MicroBlaze-Options.html#index-msmall-divides"), +DOC_URL ("-msmall-exec", "gcc/S_002f390-and-zSeries-Options.html#index-msmall-exec"), +DOC_URL ("-msmall-model", "gcc/FR30-Options.html#index-msmall-model"), +DOC_URL ("-msmall-text", "gcc/DEC-Alpha-Options.html#index-msmall-text"), +DOC_URL ("-msmall16", "gcc/Adapteva-Epiphany-Options.html#index-msmall16"), +DOC_URL ("-msmallc", "gcc/Nios-II-Options.html#index-msmallc"), +DOC_URL ("-msmart", "gcc/C-SKY-Options.html#index-msmart"), +DOC_URL ("-msmartmips", "gcc/MIPS-Options.html#index-msmartmips"), +DOC_URL ("-msmov", "gcc/eBPF-Options.html#index-msmov"), +DOC_URL ("-msmp", "gcc/VxWorks-Options.html#index-msmp"), +DOC_URL ("-msoft-cmpsf", "gcc/Adapteva-Epiphany-Options.html#index-msoft-cmpsf"), +DOC_URL ("-msoft-div", "gcc/OpenRISC-Options.html#index-msoft-div"), +DOC_URL ("-msoft-mul", "gcc/OpenRISC-Options.html#index-msoft-mul"), +DOC_URL ("-msoft-mult", "gcc/HPPA-Options.html#index-msoft-mult"), +DOC_URL ("-msoft-quad-float", "gcc/SPARC-Options.html#index-msoft-quad-float"), +DOC_URL ("-msoft-stack", "gcc/Nvidia-PTX-Options.html#index-msoft-stack"), +DOC_URL ("-msp8", "gcc/AVR-Options.html#index-msp8"), +DOC_URL ("-mspace", "gcc/V850-Options.html#index-mspace"), +DOC_URL ("-mspace-regs", "gcc/HPPA-Options.html#index-mspace-regs"), +DOC_URL ("-mspfp", "gcc/ARC-Options.html#index-mspfp"), +DOC_URL ("-mspfp-compact", "gcc/ARC-Options.html#index-mspfp-compact"), +DOC_URL ("-mspfp-fast", "gcc/ARC-Options.html#index-mspfp-fast"), +DOC_URL ("-mspfp_compact", "gcc/ARC-Options.html#index-mspfp_005fcompact"), +DOC_URL ("-mspfp_fast", "gcc/ARC-Options.html#index-mspfp_005ffast"), +DOC_URL ("-msplit", "gcc/PDP-11-Options.html#index-msplit"), +DOC_URL ("-msplit-addresses", "gcc/MIPS-Options.html#index-msplit-addresses"), +DOC_URL ("-msplit-lohi", "gcc/Adapteva-Epiphany-Options.html#index-msplit-lohi"), +DOC_URL ("-msplit-vecmove-early", "gcc/Adapteva-Epiphany-Options.html#index-msplit-vecmove-early"), +DOC_URL ("-msram-ecc", "gcc/AMD-GCN-Options.html#index-msram-ecc"), +DOC_URL ("-msse", "gcc/x86-Options.html#index-msse"), +DOC_URL ("-msse2", "gcc/x86-Options.html#index-msse2"), +DOC_URL ("-msse2avx", "gcc/x86-Options.html#index-msse2avx"), +DOC_URL ("-msse3", "gcc/x86-Options.html#index-msse3"), +DOC_URL ("-msse4", "gcc/x86-Options.html#index-msse4"), +DOC_URL ("-msse4.1", "gcc/x86-Options.html#index-msse4_002e1"), +DOC_URL ("-msse4.2", "gcc/x86-Options.html#index-msse4_002e2"), +DOC_URL ("-msse4a", "gcc/x86-Options.html#index-msse4a"), +DOC_URL ("-msseregparm", "gcc/x86-Options.html#index-msseregparm"), +DOC_URL ("-mssse3", "gcc/x86-Options.html#index-mssse3"), +DOC_URL ("-mstack-align", "gcc/CRIS-Options.html#index-mstack-align"), +DOC_URL ("-mstack-bias", "gcc/SPARC-Options.html#index-mstack-bias"), +DOC_URL ("-mstack-check-l1", "gcc/Blackfin-Options.html#index-mstack-check-l1"), +DOC_URL ("-mstack-guard", "gcc/S_002f390-and-zSeries-Options.html#index-mstack-guard"), +DOC_URL ("-mstack-increment", "gcc/MCore-Options.html#index-mstack-increment"), +DOC_URL ("-mstack-offset", "gcc/Adapteva-Epiphany-Options.html#index-mstack-offset"), +DOC_URL ("-mstack-protector-guard-symbol", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-symbol"), +DOC_URL ("-mstackrealign", "gcc/x86-Options.html#index-mstackrealign"), +DOC_URL ("-mstd-struct-return", "gcc/SPARC-Options.html#index-mstd-struct-return"), +DOC_URL ("-mstore-max", "gcc/x86-Options.html#index-mstore-max"), +DOC_URL ("-mstrict-X", "gcc/AVR-Options.html#index-mstrict-X"), +DOC_URL ("-mstring-compare-inline-limit", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mstring-compare-inline-limit"), +DOC_URL ("-mstringop-strategy=alg", "gcc/x86-Options.html#index-mstringop-strategy_003dalg"), +DOC_URL ("-mstructure-size-boundary", "gcc/ARM-Options.html#index-mstructure-size-boundary"), +DOC_URL ("-msubxc", "gcc/SPARC-Options.html#index-msubxc"), +DOC_URL ("-msv-mode", "gcc/Visium-Options.html#index-msv-mode"), +DOC_URL ("-msve-vector-bits", "gcc/AArch64-Options.html#index-msve-vector-bits"), +DOC_URL ("-msvr4-struct-return", "gcc/RS_002f6000-and-PowerPC-Options.html#index-msvr4-struct-return"), +DOC_URL ("-mswap", "gcc/ARC-Options.html#index-mswap"), +DOC_URL ("-mswape", "gcc/ARC-Options.html#index-mswape"), +DOC_URL ("-msym32", "gcc/MIPS-Options.html#index-msym32"), +DOC_URL ("-msynci", "gcc/MIPS-Options.html#index-msynci"), +DOC_URL ("-msys-crt0", "gcc/Nios-II-Options.html#index-msys-crt0"), +DOC_URL ("-msys-lib", "gcc/Nios-II-Options.html#index-msys-lib"), +DOC_URL ("-mtarget-align", "gcc/Xtensa-Options.html#index-mtarget-align"), +DOC_URL ("-mtas", "gcc/SH-Options.html#index-mtas"), +DOC_URL ("-mtbm", "gcc/x86-Options.html#index-mtbm"), +DOC_URL ("-mtda", "gcc/V850-Options.html#index-mtda"), +DOC_URL ("-mtelephony", "gcc/ARC-Options.html#index-mtelephony"), +DOC_URL ("-mtext-section-literals", "gcc/Xtensa-Options.html#index-mtext-section-literals"), +DOC_URL ("-mthumb", "gcc/ARM-Options.html#index-mthumb"), +DOC_URL ("-mthumb-interwork", "gcc/ARM-Options.html#index-mthumb-interwork"), +DOC_URL ("-mtiny-printf", "gcc/MSP430-Options.html#index-mtiny-printf"), +DOC_URL ("-mtiny-stack", "gcc/AVR-Options.html#index-mtiny-stack"), +DOC_URL ("-mtls", "gcc/FRV-Options.html#index-mtls"), +DOC_URL ("-mtls-dialect=desc", "gcc/AArch64-Options.html#index-mtls-dialect_003ddesc"), +DOC_URL ("-mtls-dialect=traditional", "gcc/AArch64-Options.html#index-mtls-dialect_003dtraditional"), +DOC_URL ("-mtls-direct-seg-refs", "gcc/x86-Options.html#index-mtls-direct-seg-refs"), +DOC_URL ("-mtls-markers", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mtls-markers"), +DOC_URL ("-mtoc", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mtoc"), +DOC_URL ("-mtomcat-stats", "gcc/FRV-Options.html#index-mtomcat-stats"), +DOC_URL ("-mtoplevel-symbols", "gcc/MMIX-Options.html#index-mtoplevel-symbols"), +DOC_URL ("-mtp-regno", "gcc/ARC-Options.html#index-mtp-regno"), +DOC_URL ("-mtpcs-frame", "gcc/ARM-Options.html#index-mtpcs-frame"), +DOC_URL ("-mtpcs-leaf-frame", "gcc/ARM-Options.html#index-mtpcs-leaf-frame"), +DOC_URL ("-mtpf-trace", "gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace"), +DOC_URL ("-mtpf-trace-skip", "gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace-skip"), +DOC_URL ("-mtraceback", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mtraceback"), +DOC_URL ("-mtrap-precision", "gcc/DEC-Alpha-Options.html#index-mtrap-precision"), +DOC_URL ("-mtrust", "gcc/C-SKY-Options.html#index-mtrust"), +DOC_URL ("-mtsxldtrk", "gcc/x86-Options.html#index-mtsxldtrk"), +DOC_URL ("-mtune-ctrl=feature-list", "gcc/x86-Options.html#index-mtune-ctrl_003dfeature-list"), +DOC_URL ("-muclibc", "gcc/GNU_002fLinux-Options.html#index-muclibc"), +DOC_URL ("-muintr", "gcc/x86-Options.html#index-muintr"), +DOC_URL ("-multcost", "gcc/ARC-Options.html#index-multcost"), +DOC_URL ("-multcost=number", "gcc/SH-Options.html#index-multcost_003dnumber"), +DOC_URL ("-multi_module", "gcc/Darwin-Options.html#index-multi_005fmodule"), +DOC_URL ("-multilib-library-pic", "gcc/FRV-Options.html#index-multilib-library-pic"), +DOC_URL ("-multiply-enabled", "gcc/LM32-Options.html#index-multiply-enabled"), +DOC_URL ("-multiply_defined", "gcc/Darwin-Options.html#index-multiply_005fdefined"), +DOC_URL ("-multiply_defined_unused", "gcc/Darwin-Options.html#index-multiply_005fdefined_005funused"), +DOC_URL ("-munalign-prob-threshold", "gcc/ARC-Options.html#index-munalign-prob-threshold"), +DOC_URL ("-munaligned-doubles", "gcc/SPARC-Options.html#index-munaligned-doubles"), +DOC_URL ("-municode", "gcc/x86-Windows-Options.html#index-municode"), +DOC_URL ("-muniform-simt", "gcc/Nvidia-PTX-Options.html#index-muniform-simt"), +DOC_URL ("-muninit-const-in-rodata", "gcc/MIPS-Options.html#index-muninit-const-in-rodata"), +DOC_URL ("-munix", "gcc/VAX-Options.html#index-munix"), +DOC_URL ("-munix-asm", "gcc/PDP-11-Options.html#index-munix-asm"), +DOC_URL ("-munordered-float", "gcc/OpenRISC-Options.html#index-munordered-float"), +DOC_URL ("-munroll-only-small-loops", "gcc/x86-Options.html#index-munroll-only-small-loops"), +DOC_URL ("-mupdate", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mupdate"), +DOC_URL ("-muser-enabled", "gcc/LM32-Options.html#index-muser-enabled"), +DOC_URL ("-musermode", "gcc/SH-Options.html#index-musermode"), +DOC_URL ("-musermsr", "gcc/x86-Options.html#index-musermsr"), +DOC_URL ("-mv3-atomics", "gcc/eBPF-Options.html#index-mv3-atomics"), +DOC_URL ("-mv3push", "gcc/NDS32-Options.html#index-mv3push"), +DOC_URL ("-mv850", "gcc/V850-Options.html#index-mv850"), +DOC_URL ("-mv850e", "gcc/V850-Options.html#index-mv850e"), +DOC_URL ("-mv850e1", "gcc/V850-Options.html#index-mv850e1"), +DOC_URL ("-mv850e2", "gcc/V850-Options.html#index-mv850e2"), +DOC_URL ("-mv850e2v3", "gcc/V850-Options.html#index-mv850e2v3"), +DOC_URL ("-mv850e2v4", "gcc/V850-Options.html#index-mv850e2v4"), +DOC_URL ("-mv850e3v5", "gcc/V850-Options.html#index-mv850e3v5"), +DOC_URL ("-mv850es", "gcc/V850-Options.html#index-mv850es"), +DOC_URL ("-mv8plus", "gcc/SPARC-Options.html#index-mv8plus"), +DOC_URL ("-mvaes", "gcc/x86-Options.html#index-mvaes"), +DOC_URL ("-mvdsp", "gcc/C-SKY-Options.html#index-mvdsp"), +DOC_URL ("-mvect-double", "gcc/Adapteva-Epiphany-Options.html#index-mvect-double"), +DOC_URL ("-mvect8-ret-in-mem", "gcc/x86-Options.html#index-mvect8-ret-in-mem"), +DOC_URL ("-mvirt", "gcc/MIPS-Options.html#index-mvirt"), +DOC_URL ("-mvis", "gcc/SPARC-Options.html#index-mvis"), +DOC_URL ("-mvis2", "gcc/SPARC-Options.html#index-mvis2"), +DOC_URL ("-mvis3", "gcc/SPARC-Options.html#index-mvis3"), +DOC_URL ("-mvis4", "gcc/SPARC-Options.html#index-mvis4"), +DOC_URL ("-mvis4b", "gcc/SPARC-Options.html#index-mvis4b"), +DOC_URL ("-mvliw-branch", "gcc/FRV-Options.html#index-mvliw-branch"), +DOC_URL ("-mvms-return-codes", "gcc/VMS-Options.html#index-mvms-return-codes"), +DOC_URL ("-mvolatile-asm-stop", "gcc/IA-64-Options.html#index-mvolatile-asm-stop"), +DOC_URL ("-mvpclmulqdq", "gcc/x86-Options.html#index-mvpclmulqdq"), +DOC_URL ("-mvr4130-align", "gcc/MIPS-Options.html#index-mvr4130-align"), +DOC_URL ("-mvrsave", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mvrsave"), +DOC_URL ("-mvsx", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mvsx"), +DOC_URL ("-mvx", "gcc/S_002f390-and-zSeries-Options.html#index-mvx"), +DOC_URL ("-mvxworks", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mvxworks"), +DOC_URL ("-mvzeroupper", "gcc/x86-Options.html#index-mvzeroupper"), +DOC_URL ("-mwaitpkg", "gcc/x86-Options.html#index-mwaitpkg"), +DOC_URL ("-mwarn-devices-csv", "gcc/MSP430-Options.html#index-mwarn-devices-csv"), +DOC_URL ("-mwarn-dynamicstack", "gcc/S_002f390-and-zSeries-Options.html#index-mwarn-dynamicstack"), +DOC_URL ("-mwarn-framesize", "gcc/S_002f390-and-zSeries-Options.html#index-mwarn-framesize"), +DOC_URL ("-mwarn-mcu", "gcc/MSP430-Options.html#index-mwarn-mcu"), +DOC_URL ("-mwarn-multiple-fast-interrupts", "gcc/RX-Options.html#index-mwarn-multiple-fast-interrupts"), +DOC_URL ("-mwbnoinvd", "gcc/x86-Options.html#index-mwbnoinvd"), +DOC_URL ("-mwide-bitfields", "gcc/MCore-Options.html#index-mwide-bitfields"), +DOC_URL ("-mwidekl", "gcc/x86-Options.html#index-mwidekl"), +DOC_URL ("-mwin32", "gcc/x86-Windows-Options.html#index-mwin32"), +DOC_URL ("-mwindows", "gcc/x86-Windows-Options.html#index-mwindows"), +DOC_URL ("-mword-relocations", "gcc/ARM-Options.html#index-mword-relocations"), +DOC_URL ("-mx32", "gcc/x86-Options.html#index-mx32"), +DOC_URL ("-mxl-barrel-shift", "gcc/MicroBlaze-Options.html#index-mxl-barrel-shift"), +DOC_URL ("-mxl-compat", "gcc/RS_002f6000-and-PowerPC-Options.html#index-mxl-compat"), +DOC_URL ("-mxl-float-convert", "gcc/MicroBlaze-Options.html#index-mxl-float-convert"), +DOC_URL ("-mxl-float-sqrt", "gcc/MicroBlaze-Options.html#index-mxl-float-sqrt"), +DOC_URL ("-mxl-gp-opt", "gcc/MicroBlaze-Options.html#index-mxl-gp-opt"), +DOC_URL ("-mxl-multiply-high", "gcc/MicroBlaze-Options.html#index-mxl-multiply-high"), +DOC_URL ("-mxl-pattern-compare", "gcc/MicroBlaze-Options.html#index-mxl-pattern-compare"), +DOC_URL ("-mxl-reorder", "gcc/MicroBlaze-Options.html#index-mxl-reorder"), +DOC_URL ("-mxl-soft-div", "gcc/MicroBlaze-Options.html#index-mxl-soft-div"), +DOC_URL ("-mxl-soft-mul", "gcc/MicroBlaze-Options.html#index-mxl-soft-mul"), +DOC_URL ("-mxl-stack-check", "gcc/MicroBlaze-Options.html#index-mxl-stack-check"), +DOC_URL ("-mxnack", "gcc/AMD-GCN-Options.html#index-mxnack"), +DOC_URL ("-mxop", "gcc/x86-Options.html#index-mxop"), +DOC_URL ("-mxpa", "gcc/MIPS-Options.html#index-mxpa"), +DOC_URL ("-mxsave", "gcc/x86-Options.html#index-mxsave"), +DOC_URL ("-mxsavec", "gcc/x86-Options.html#index-mxsavec"), +DOC_URL ("-mxsaveopt", "gcc/x86-Options.html#index-mxsaveopt"), +DOC_URL ("-mxsaves", "gcc/x86-Options.html#index-mxsaves"), +DOC_URL ("-mxy", "gcc/ARC-Options.html#index-mxy"), +DOC_URL ("-myellowknife", "gcc/RS_002f6000-and-PowerPC-Options.html#index-myellowknife"), +DOC_URL ("-mzarch", "gcc/S_002f390-and-zSeries-Options.html#index-mzarch"), +DOC_URL ("-mzda", "gcc/V850-Options.html#index-mzda"), +DOC_URL ("-mzdcbranch", "gcc/SH-Options.html#index-mzdcbranch"), +DOC_URL ("-mzero-extend", "gcc/MMIX-Options.html#index-mzero-extend"), +DOC_URL ("-mzvector", "gcc/S_002f390-and-zSeries-Options.html#index-mzvector"), +DOC_URL ("-no-80387", "gcc/x86-Options.html#index-no-80387"), +DOC_URL ("-no-block-ops-unaligned-vsx", "gcc/RS_002f6000-and-PowerPC-Options.html#index-no-block-ops-unaligned-vsx"), +DOC_URL ("-no-canonical-prefixes", "gcc/Directory-Options.html#index-no-canonical-prefixes"), +DOC_URL ("-no-integrated-cpp", "gcc/Preprocessor-Options.html#index-no-integrated-cpp"), +DOC_URL ("-no-pie", "gcc/Link-Options.html#index-no-pie"), +DOC_URL ("-no-sysroot-suffix", "gcc/Directory-Options.html#index-no-sysroot-suffix"), +DOC_URL ("-no_dead_strip_inits_and_terms", "gcc/Darwin-Options.html#index-no_005fdead_005fstrip_005finits_005fand_005fterms"), +DOC_URL ("-noall_load", "gcc/Darwin-Options.html#index-noall_005fload"), +DOC_URL ("-nocpp", "gcc/MIPS-Options.html#index-nocpp"), +DOC_URL ("-nodefaultlibs", "gcc/Link-Options.html#index-nodefaultlibs"), +DOC_URL ("-nodefaultrpaths", "gcc/Darwin-Options.html#index-nodefaultrpaths"), +DOC_URL ("-nodevicelib", "gcc/AVR-Options.html#index-nodevicelib"), +DOC_URL ("-nodevicespecs", "gcc/AVR-Options.html#index-nodevicespecs"), +DOC_URL ("-nofixprebinding", "gcc/Darwin-Options.html#index-nofixprebinding"), +DOC_URL ("-nofpu", "gcc/RX-Options.html#index-nofpu"), +DOC_URL ("-nolibc", "gcc/Link-Options.html#index-nolibc"), +DOC_URL ("-nolibdld", "gcc/HPPA-Options.html#index-nolibdld"), +DOC_URL ("-nomultidefs", "gcc/Darwin-Options.html#index-nomultidefs"), +DOC_URL ("-non-static", "gcc/VxWorks-Options.html#index-non-static"), +DOC_URL ("-noprebind", "gcc/Darwin-Options.html#index-noprebind"), +DOC_URL ("-noseglinkedit", "gcc/Darwin-Options.html#index-noseglinkedit"), +DOC_URL ("-nostartfiles", "gcc/Link-Options.html#index-nostartfiles"), +DOC_URL ("-nostdinc", "gcc/Directory-Options.html#index-nostdinc"), +DOC_URL ("-nostdlib", "gcc/Link-Options.html#index-nostdlib"), +DOC_URL ("-nostdlib++", "gcc/Link-Options.html#index-nostdlib_002b_002b"), +DOC_URL ("-o", "gcc/Overall-Options.html#index-o"), +DOC_URL ("-pagezero_size", "gcc/Darwin-Options.html#index-pagezero_005fsize"), +DOC_URL ("-param", "gcc/Optimize-Options.html#index-param"), +DOC_URL ("-pass-exit-codes", "gcc/Overall-Options.html#index-pass-exit-codes"), +DOC_URL ("-pie", "gcc/Link-Options.html#index-pie"), +DOC_URL ("-pipe", "gcc/Overall-Options.html#index-pipe"), +DOC_URL ("-plt", "gcc/RISC-V-Options.html#index-plt"), +DOC_URL ("-prebind", "gcc/Darwin-Options.html#index-prebind"), +DOC_URL ("-prebind_all_twolevel_modules", "gcc/Darwin-Options.html#index-prebind_005fall_005ftwolevel_005fmodules"), +DOC_URL ("-print-file-name", "gcc/Developer-Options.html#index-print-file-name"), +DOC_URL ("-print-libgcc-file-name", "gcc/Developer-Options.html#index-print-libgcc-file-name"), +DOC_URL ("-print-multi-directory", "gcc/Developer-Options.html#index-print-multi-directory"), +DOC_URL ("-print-multi-lib", "gcc/Developer-Options.html#index-print-multi-lib"), +DOC_URL ("-print-multi-os-directory", "gcc/Developer-Options.html#index-print-multi-os-directory"), +DOC_URL ("-print-multiarch", "gcc/Developer-Options.html#index-print-multiarch"), +DOC_URL ("-print-objc-runtime-info", "gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-print-objc-runtime-info"), +DOC_URL ("-print-prog-name", "gcc/Developer-Options.html#index-print-prog-name"), +DOC_URL ("-print-search-dirs", "gcc/Developer-Options.html#index-print-search-dirs"), +DOC_URL ("-print-sysroot", "gcc/Developer-Options.html#index-print-sysroot"), +DOC_URL ("-print-sysroot-headers-suffix", "gcc/Developer-Options.html#index-print-sysroot-headers-suffix"), +DOC_URL ("-private_bundle", "gcc/Darwin-Options.html#index-private_005fbundle"), +DOC_URL ("-pthreads", "gcc/Solaris-2-Options.html#index-pthreads"), +DOC_URL ("-r", "gcc/Link-Options.html#index-r"), +DOC_URL ("-rdynamic", "gcc/Link-Options.html#index-rdynamic"), +DOC_URL ("-read_only_relocs", "gcc/Darwin-Options.html#index-read_005fonly_005frelocs"), +DOC_URL ("-remap", "gcc/Preprocessor-Options.html#index-remap"), +DOC_URL ("-s", "gcc/Link-Options.html#index-s"), +DOC_URL ("-save-temps", "gcc/Developer-Options.html#index-save-temps"), +DOC_URL ("-save-temps=cwd", "gcc/Developer-Options.html#index-save-temps_003dcwd"), +DOC_URL ("-save-temps=obj", "gcc/Developer-Options.html#index-save-temps_003dobj"), +DOC_URL ("-sectalign", "gcc/Darwin-Options.html#index-sectalign"), +DOC_URL ("-sectcreate", "gcc/Darwin-Options.html#index-sectcreate"), +DOC_URL ("-sectorder", "gcc/Darwin-Options.html#index-sectorder"), +DOC_URL ("-seg1addr", "gcc/Darwin-Options.html#index-seg1addr"), +DOC_URL ("-seg_addr_table", "gcc/Darwin-Options.html#index-seg_005faddr_005ftable"), +DOC_URL ("-seg_addr_table_filename", "gcc/Darwin-Options.html#index-seg_005faddr_005ftable_005ffilename"), +DOC_URL ("-segaddr", "gcc/Darwin-Options.html#index-segaddr"), +DOC_URL ("-seglinkedit", "gcc/Darwin-Options.html#index-seglinkedit"), +DOC_URL ("-segprot", "gcc/Darwin-Options.html#index-segprot"), +DOC_URL ("-shared", "gcc/Link-Options.html#index-shared"), +DOC_URL ("-shared-libgcc", "gcc/Link-Options.html#index-shared-libgcc"), +DOC_URL ("-short-calls", "gcc/Adapteva-Epiphany-Options.html#index-short-calls"), +DOC_URL ("-sim", "gcc/CRIS-Options.html#index-sim"), +DOC_URL ("-sim2", "gcc/CRIS-Options.html#index-sim2"), +DOC_URL ("-single_module", "gcc/Darwin-Options.html#index-single_005fmodule"), +DOC_URL ("-specs", "gcc/Overall-Options.html#index-specs"), +DOC_URL ("-static-libasan", "gcc/Link-Options.html#index-static-libasan"), +DOC_URL ("-static-libgcc", "gcc/Link-Options.html#index-static-libgcc"), +DOC_URL ("-static-liblsan", "gcc/Link-Options.html#index-static-liblsan"), +DOC_URL ("-static-libstdc++", "gcc/Link-Options.html#index-static-libstdc_002b_002b"), +DOC_URL ("-static-libtsan", "gcc/Link-Options.html#index-static-libtsan"), +DOC_URL ("-static-libubsan", "gcc/Link-Options.html#index-static-libubsan"), +DOC_URL ("-static-pie", "gcc/Link-Options.html#index-static-pie"), +DOC_URL ("-stdlib", "gcc/C_002b_002b-Dialect-Options.html#index-stdlib"), +DOC_URL ("-sub_library", "gcc/Darwin-Options.html#index-sub_005flibrary"), +DOC_URL ("-sub_umbrella", "gcc/Darwin-Options.html#index-sub_005fumbrella"), +DOC_URL ("-symbolic", "gcc/Link-Options.html#index-symbolic"), +DOC_URL ("-sysroot", "gcc/Directory-Options.html#index-sysroot"), +DOC_URL ("-target-help", "gcc/Overall-Options.html#index-target-help"), +DOC_URL ("-threads", "gcc/HPPA-Options.html#index-threads"), +DOC_URL ("-time", "gcc/Developer-Options.html#index-time"), +DOC_URL ("-tno-android-cc", "gcc/GNU_002fLinux-Options.html#index-tno-android-cc"), +DOC_URL ("-tno-android-ld", "gcc/GNU_002fLinux-Options.html#index-tno-android-ld"), +DOC_URL ("-traditional-cpp", "gcc/Preprocessor-Options.html#index-traditional-cpp"), +DOC_URL ("-trigraphs", "gcc/Preprocessor-Options.html#index-trigraphs"), +DOC_URL ("-twolevel_namespace", "gcc/Darwin-Options.html#index-twolevel_005fnamespace"), +DOC_URL ("-u", "gcc/Link-Options.html#index-u"), +DOC_URL ("-umbrella", "gcc/Darwin-Options.html#index-umbrella"), +DOC_URL ("-undef", "gcc/Preprocessor-Options.html#index-undef"), +DOC_URL ("-undefined", "gcc/Darwin-Options.html#index-undefined"), +DOC_URL ("-unexported_symbols_list", "gcc/Darwin-Options.html#index-unexported_005fsymbols_005flist"), +DOC_URL ("-v", "gcc/Overall-Options.html#index-v"), +DOC_URL ("-version", "gcc/Overall-Options.html#index-version"), +DOC_URL ("-w", "gcc/Warning-Options.html#index-w"), +DOC_URL ("-weak_reference_mismatches", "gcc/Darwin-Options.html#index-weak_005freference_005fmismatches"), +DOC_URL ("-whatsloaded", "gcc/Darwin-Options.html#index-whatsloaded"), +DOC_URL ("-whyload", "gcc/Darwin-Options.html#index-whyload"), +DOC_URL ("-wrapper", "gcc/Overall-Options.html#index-wrapper"), +DOC_URL ("-x", "gcc/Overall-Options.html#index-x"), +DOC_URL ("-z", "gcc/Link-Options.html#index-z"),