public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Segher Boessenkool <segher@kernel.crashing.org>
To: Bill Schmidt <wschmidt@linux.ibm.com>
Cc: gcc-patches@gcc.gnu.org, dje.gcc@gmail.com
Subject: Re: [PATCH 18/18] rs6000: Add escape-newline support for builtins files
Date: Fri, 5 Nov 2021 18:50:21 -0500	[thread overview]
Message-ID: <20211105235021.GV614@gate.crashing.org> (raw)
In-Reply-To: <266157f7a8f28d641682fe86e52cd8282a86ac56.1630511335.git.wschmidt@linux.ibm.com>

Hi!

On Wed, Sep 01, 2021 at 11:13:54AM -0500, Bill Schmidt wrote:
> +/* Escape-newline support.  For readability, we prefer to allow developers
> +   to use escape-newline to continue long lines to the next one.  We
> +   maintain a buffer of "original" lines here, which are concatenated into
> +   linebuf, above, and which can be used to convert the virtual line
> +   position "line / pos" into actual line and position information.  */
> +#define MAXLINES 4

Make this bigger already?  Or, want to bet if we will need to increase
it for GCC 12 already?  Because for GCC 13 we almost certainly will :-)

> +/* From a possibly extended line with a virtual position, calculate
> +   the current line and character position.  */
> +static void
> +real_line_pos (int diagpos, int *real_line, int *real_pos)
> +{
> +  *real_line = line - lastline;
> +  *real_pos = diagpos;
> +
> +  for (int i = 0; i < MAXLINES && *real_pos > (int) strlen (lines[i]); i++)
> +    {
> +      (*real_line)++;
> +      *real_pos -= strlen (lines[i]) - 2;
> +    }
> +
> +  /* Convert from zero-base to one-base for printing.  */
> +  (*real_pos)++;
> +}

The cast is nasty, and you reuse that expression (which includes an
expensive call, which GCC might not realise it can CSE) anyway.  You
can rewrite this like

  for (int i = 0; i < MAXLINES; i++)
    {
      int len = strlen (lines[i]);
      if (*real_pos > len)
	break;

      (*real_line)++;
      *real_pos -= len - 2;
    }

fixing both these issues.

> +/* Produce a fatal error message.  */
> +static void
> +fatal (const char *msg)
> +{
> +  fprintf (stderr, "FATAL: %s\n", msg);
> +  abort ();
> +}

No vfprint?  Aww :-)  You didn't yet see any use for formatted fatal
errors I guess.

> +	      if (lastline == MAXLINES - 1)
> +		fatal ("number of supported overflow lines exceeded");
> +	      lastline++;

If you test after the increment you don't need the - 1 ;-)

> +	      line++;
> +	      if (!fgets (lines[lastline], LINELEN, file))
> +		fatal ("unexpected end of file");
> +	      strcpy (&linebuf[len - 2], lines[lastline]);

So, can this overflow linebuf?  I didn't see a test for that.

> +  /* Allocate some buffers.  */
> +  for (int i = 0; i < MAXLINES; i++)
> +    lines[i] = (char *) malloc (LINELEN);

C++ forces such unsightly casts, sigh.  Well there are worse things.
Some certain operator comes to mind.


Thanks for this cleanup!  In the new builtin definitions lines are much
shorter than before, but a few got really long anyway :-)

Okay for trunk.  Thanks!


Segher

  reply	other threads:[~2021-11-05 23:51 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-01 16:13 [PATCHv5 00/18] Replace the Power target-specific builtin machinery Bill Schmidt
2021-09-01 16:13 ` [PATCH 01/18] rs6000: Handle overloads during program parsing Bill Schmidt
2021-09-13 17:17   ` will schmidt
2021-09-13 23:53   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 02/18] rs6000: Move __builtin_mffsl to the [always] stanza Bill Schmidt
2021-09-13 17:53   ` will schmidt
2021-09-16 22:52   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 03/18] rs6000: Handle gimple folding of target built-ins Bill Schmidt
2021-09-13 18:42   ` will schmidt
2021-09-14 22:36     ` Bill Schmidt
2021-09-16 22:58   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 04/18] rs6000: Handle some recent MMA builtin changes Bill Schmidt
2021-09-13 19:02   ` will schmidt
2021-09-16 23:38   ` Segher Boessenkool
2021-09-17 15:14     ` Bill Schmidt
2021-09-01 16:13 ` [PATCH 05/18] rs6000: Support for vectorizing built-in functions Bill Schmidt
2021-09-13 19:29   ` will schmidt
2021-09-17 12:17   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 06/18] rs6000: Builtin expansion, part 1 Bill Schmidt
2021-10-31  3:24   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 07/18] rs6000: Builtin expansion, part 2 Bill Schmidt
2021-11-01 12:18   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 08/18] rs6000: Builtin expansion, part 3 Bill Schmidt
2021-11-03  1:15   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 09/18] rs6000: Builtin expansion, part 4 Bill Schmidt
2021-11-03  1:52   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 10/18] rs6000: Builtin expansion, part 5 Bill Schmidt
2021-11-04  0:55   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 11/18] rs6000: Builtin expansion, part 6 Bill Schmidt
2021-11-04  1:24   ` Segher Boessenkool
2021-11-07 15:28     ` Bill Schmidt
2021-11-07 21:05       ` Segher Boessenkool
2021-11-08 13:16         ` Bill Schmidt
2021-09-01 16:13 ` [PATCH 12/18] rs6000: Update rs6000_builtin_decl Bill Schmidt
2021-11-05 20:27   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 13/18] rs6000: Miscellaneous uses of rs6000_builtins_decl_x Bill Schmidt
2021-11-05 20:36   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 14/18] rs6000: Debug support Bill Schmidt
2021-11-05 21:34   ` Segher Boessenkool
2021-11-09 15:06     ` Bill Schmidt
2021-09-01 16:13 ` [PATCH 15/18] rs6000: Update altivec.h for automated interfaces Bill Schmidt
2021-11-05 22:08   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 16/18] rs6000: Test case adjustments Bill Schmidt
2021-11-05 22:37   ` Segher Boessenkool
2021-11-11 20:06     ` Bill Schmidt
2021-11-11 20:55       ` Bill Schmidt
2021-09-01 16:13 ` [PATCH 17/18] rs6000: Enable the new builtin support Bill Schmidt
2021-11-05 22:10   ` Segher Boessenkool
2021-09-01 16:13 ` [PATCH 18/18] rs6000: Add escape-newline support for builtins files Bill Schmidt
2021-11-05 23:50   ` Segher Boessenkool [this message]
2021-11-08 19:40     ` Bill Schmidt
2021-09-13 13:33 ` [PATCHv5 00/18] Replace the Power target-specific builtin machinery Bill Schmidt

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=20211105235021.GV614@gate.crashing.org \
    --to=segher@kernel.crashing.org \
    --cc=dje.gcc@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=wschmidt@linux.ibm.com \
    /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).