print-rtl: Fix printing of CONST_STRING in DEBUG_INSNs [PR93399]
The following testcase fails to assemble, as CONST_STRING in the DEBUG_INSNs is printed as is, so if it contains \n and/or \r, we are in trouble: .loc 1 14 3 # DEBUG haystack => [si] # DEBUG needle => " " In the gimple dumps we print those (STRING_CSTs) as # DEBUG haystack => D#1 # DEBUG needle => "\n" so this patch uses what we use in tree printing for the CONST_STRINGs too. 2020-03-05 Jakub Jelinek <jakub@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.
This commit is contained in:
parent
c9f90a25d4
commit
febfe87d80
6 changed files with 36 additions and 4 deletions
|
@ -1,3 +1,13 @@
|
|||
2020-03-05 Jakub Jelinek <jakub@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.
|
||||
|
||||
2020-03-05 Richard Biener <rguenther@suse.de>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
|
|
|
@ -1685,7 +1685,9 @@ print_value (pretty_printer *pp, const_rtx x, int verbose)
|
|||
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));
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2020-03-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/93399
|
||||
* gcc.dg/pr93399.c: New test.
|
||||
|
||||
PR tree-optimization/93582
|
||||
* gcc.dg/tree-ssa/pr93582-11.c: New test.
|
||||
|
||||
|
|
17
gcc/testsuite/gcc.dg/pr93399.c
Normal file
17
gcc/testsuite/gcc.dg/pr93399.c
Normal file
|
@ -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;
|
||||
}
|
|
@ -45,7 +45,6 @@ along with GCC; see the file COPYING3. If not see
|
|||
|
||||
/* 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, tree node, dump_flags_t flags)
|
|||
/* 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;
|
||||
|
|
|
@ -47,6 +47,7 @@ extern void print_declaration (pretty_printer *, tree, int, dump_flags_t);
|
|||
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);
|
||||
|
|
Loading…
Add table
Reference in a new issue