public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Martin Sebor <msebor@gmail.com>
To: "Martin Liška" <mliska@suse.cz>, "Jakub Jelinek" <jakub@redhat.com>
Cc: gcc-patches@gcc.gnu.org, Jan Hubicka <hubicka@ucw.cz>
Subject: Re: [stage1][PATCH] Add gcc_assert that &global_options are not dirty modified.
Date: Thu, 19 Mar 2020 10:13:44 -0600	[thread overview]
Message-ID: <312fd3c4-cc7c-5389-4ae7-615aad0761f3@gmail.com> (raw)
In-Reply-To: <8847e7b1-4f65-1109-7014-086a763d3e94@suse.cz>

On 3/19/20 9:32 AM, Martin Liška wrote:
> On 3/19/20 10:09 AM, Jakub Jelinek wrote:
>> I mean, optimize for the !flag_checking case...
> 
> Sure, I transformed both situations into heap memory allocation.
> In gcc/c-family/c-attribs.c I faced maybe uninitialized warning when
> I only assigned (and checked) the variable in flag_checking context.

I was mostly just curious about what was being checked and how so
I might be misunderstanding something but it looks to me like
the code generated by the loop below will be a very long series
(of hundreds?) of if statements, each doing the same thing but
each hardcoding different options names.  If that's correct, is
there an easy way to turn that repetitive series into a loop to
keep code (and string) size growth to a minimum?

Also, since the function prints output and the caller then aborts
on failure, would calling internal_error for the first mismatch
instead be more in keeping with how internal errors with additional
output are reported?

One last question/suggestion: if the efficiency of the checking is
at all a concern, would calling memcmp on the arrays first and only
looping to find the position of the mismatch, be viable? (I have no
idea if changes to some of the options are acceptable; if they are
this wouldn't work).

Martin

PS Since the function doesn't modify the option arrays it could
declare them const.

diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk
index 856a69168a5..586213da3d3 100644
--- a/gcc/opth-gen.awk
+++ b/gcc/opth-gen.awk
@@ -119,6 +119,41 @@ print "#endif"
  print "#endif"
  print ""

+print "#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && 
!defined(IN_RTS)"
+print "#ifndef GENERATOR_FILE"
+print "static inline bool gcc_options_check (gcc_options *ptr1, 
gcc_options *ptr2)"
+print "{"
+print "  bool result = true;"
+
+# all these options are mentioned in PR92860
+checked_options["flag_merge_constants"]++
+checked_options["param_max_fields_for_field_sensitive"]++
+checked_options["flag_omit_frame_pointer"]++
+checked_options["unroll_only_small_loops"]++
+
+for (i = 0; i < n_opts; i++) {
+	name = var_name(flags[i]);
+	if (name == "")
+		continue;
+
+	if (name in checked_options)
+		continue;
+	checked_options[name]++
+
+	print "  if (ptr1->x_" name " != ptr2->x_" name ")"
+	print "  {"
+	print "    if (result)"
+	print "      fprintf (stderr, \"Error: global_options are modified in 
local context:\\n\");"
+	print "    fprintf (stderr, \"  " name " (%ld/%ld)\\n\", (long 
int)ptr1->x_" name ", (long int)ptr2->x_" name ");"
+	print "    result = false;"
+	print "  }"
+}
+
+print "  return result;"
+print "}"
+print "#endif"
+print "#endif"
+
  # All of the optimization switches gathered together so they can be 
saved and restored.
  # This will allow attribute((cold)) to turn on space optimization.


  parent reply	other threads:[~2020-03-19 16:13 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-19  8:56 Martin Liška
2020-03-19  9:09 ` Jakub Jelinek
2020-03-19 15:32   ` Martin Liška
2020-03-19 15:47     ` Jakub Jelinek
2020-03-19 16:13     ` Martin Sebor [this message]
2020-03-20 15:40       ` Martin Liška
2020-03-20 15:43         ` Jakub Jelinek
2020-03-20 15:55           ` Martin Liška
2020-05-21 12:04             ` Martin Liška
2020-06-09 21:01               ` Jeff Law
2020-06-18 11:32                 ` Luis Machado
2020-06-18 12:21                   ` Martin Liška
2020-06-18 15:02                     ` Jeff Law
2020-06-18 15:36                       ` Martin Liška
2020-06-24  7:44                         ` Martin Liška
2020-06-18 15:40                   ` Martin Liška
2020-06-18 15:47                     ` Luis Machado
2020-06-18 16:02                       ` Martin Liška
2020-06-18 17:18                         ` Luis Machado
2020-06-18 18:34                           ` Martin Liška
2020-06-18 21:24                             ` Luis Machado
2020-06-24  7:25                     ` Martin Liška

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=312fd3c4-cc7c-5389-4ae7-615aad0761f3@gmail.com \
    --to=msebor@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=hubicka@ucw.cz \
    --cc=jakub@redhat.com \
    --cc=mliska@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).