On Thu, 5 Mar 2020, Jakub Jelinek wrote:

> On Thu, Mar 05, 2020 at 08:55:33AM +0100, Richard Biener wrote:
> > It looks like tree-pretty-print.c doesn't bother to truncate it
> > so why bother for RTL?
> 
> Ok, so I'll go then with the size_t argument, so that nothing needs to be
> truncated.
> Updated patch:

OK.

Richard.

> 2020-03-05  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR middle-end/93399
>       * tree-pretty-print.h (pretty_print_string): Declare.
>       * tree-pretty-print.c (pretty_print_string): Remove forward
>       declaration, no longer static.  Change nbytes parameter type
>       from unsigned to size_t.
>       * print-rtl.c (print_value) <case CONST_STRING>: Use
>       pretty_print_string and for shrink way too long strings.
> 
>       * gcc.dg/pr93399.c: New test.
> 
> --- gcc/tree-pretty-print.h.jj        2020-03-05 07:57:41.875443726 +0100
> +++ gcc/tree-pretty-print.h   2020-03-05 08:59:34.053274560 +0100
> @@ -47,6 +47,7 @@ extern void print_declaration (pretty_pr
>  extern int op_code_prio (enum tree_code);
>  extern int op_prio (const_tree);
>  extern const char *op_symbol_code (enum tree_code);
> +extern void pretty_print_string (pretty_printer *, const char *, size_t);
>  extern void print_call_name (pretty_printer *, tree, dump_flags_t);
>  extern void percent_K_format (text_info *, location_t, tree);
>  extern void pp_tree_identifier (pretty_printer *, tree);
> --- gcc/tree-pretty-print.c.jj        2020-03-05 07:57:41.833444349 +0100
> +++ gcc/tree-pretty-print.c   2020-03-05 08:59:18.821502109 +0100
> @@ -45,7 +45,6 @@ along with GCC; see the file COPYING3.
>  
>  /* Local functions, macros and variables.  */
>  static const char *op_symbol (const_tree);
> -static void pretty_print_string (pretty_printer *, const char*, unsigned);
>  static void newline_and_indent (pretty_printer *, int);
>  static void maybe_init_pretty_print (FILE *);
>  static void print_struct_decl (pretty_printer *, const_tree, int, 
> dump_flags_t);
> @@ -4216,8 +4215,8 @@ print_call_name (pretty_printer *pp, tre
>  /* Print the first N characters in the array STR, replacing non-printable
>     characters (including embedded nuls) with unambiguous escape sequences.  
> */
>  
> -static void
> -pretty_print_string (pretty_printer *pp, const char *str, unsigned n)
> +void
> +pretty_print_string (pretty_printer *pp, const char *str, size_t n)
>  {
>    if (str == NULL)
>      return;
> --- gcc/print-rtl.c.jj        2020-03-05 07:57:41.801444821 +0100
> +++ gcc/print-rtl.c   2020-03-05 09:01:00.523982754 +0100
> @@ -1685,7 +1685,9 @@ print_value (pretty_printer *pp, const_r
>        pp_string (pp, tmp);
>        break;
>      case CONST_STRING:
> -      pp_printf (pp, "\"%s\"", XSTR (x, 0));
> +      pp_string (pp, "\"");
> +      pretty_print_string (pp, XSTR (x, 0), strlen (XSTR (x, 0)));
> +      pp_string (pp, "\"");
>        break;
>      case SYMBOL_REF:
>        pp_printf (pp, "`%s'", XSTR (x, 0));
> --- gcc/testsuite/gcc.dg/pr93399.c.jj 2020-03-05 08:58:19.177393148 +0100
> +++ gcc/testsuite/gcc.dg/pr93399.c    2020-03-05 08:58:19.177393148 +0100
> @@ -0,0 +1,17 @@
> +/* PR middle-end/93399 */
> +/* { dg-do assemble } */
> +/* { dg-options "-fverbose-asm -dA -g -O3" } */
> +
> +extern inline __attribute__ ((__always_inline__, __gnu_inline__)) char *
> +strstr (const char *haystack, const char *needle)
> +{
> +  return __builtin_strstr (haystack, needle);
> +}
> +
> +int
> +main (int argc, const char **argv)
> +{
> +  char *substr = strstr (argv[0], "\n");
> +  char *another = strstr (argv[0], "\r\n");
> +  return 0;
> +}
> 
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to