From f325e752268d3be618e4c044f831e07c6010fdb1 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Sat, 1 Jun 2019 17:27:20 +0000 Subject: [PATCH] PR middle-end/90694 - incorrect representation of ADDR_EXPR involving a pointer to array gcc/ChangeLog: PR middle-end/90694 * tree-pretty-print.c (dump_generic_node): Add parentheses. gcc/testsuite/ChangeLog: PR middle-end/90694 * gcc.dg/tree-ssa/dump-5.c: New test. From-SVN: r271838 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/tree-ssa/dump-5.c | 15 +++++++++++++++ gcc/tree-pretty-print.c | 12 ++++++++++-- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/dump-5.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 491577b8828..20bdc2bec37 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-06-01 Martin Sebor + + PR middle-end/90694 + * tree-pretty-print.c (dump_generic_node): Add parentheses. + 2019-05-31 Jan Hubicka * alias.c: Include ipa-utils.h. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0663f4c07c6..0108097262b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-06-01 Martin Sebor + + PR middle-end/90694 + * gcc.dg/tree-ssa/dump-5.c: New test. + 2019-05-31 Jan Hubicka * g++.dg/lto/alias-1_0.C: New testcase. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/dump-5.c b/gcc/testsuite/gcc.dg/tree-ssa/dump-5.c new file mode 100644 index 00000000000..6807b5e9ef4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/dump-5.c @@ -0,0 +1,15 @@ +/* PR middle-end/90694 - incorrect representation of ADDR_EXPR involving + a pointer to array + { dg-do compile } + { dg-options "-fdump-tree-original" } */ + +typedef char A8[8]; + +unsigned f (A8 *pa) +{ + return __builtin_strlen (&(*pa)[2]); +} + +/* Veriy the expression is correct in the dump: + { dg-final { scan-tree-dump-not "\\\&\\\*pa\\\[2\\\]" "original" } } + { dg-final { scan-tree-dump "\\\&\\\(\\\*pa\\\)\\\[2\\\]" "original" } } */ diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index 4ba9170ddd3..1d6eae101ee 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -1679,9 +1679,17 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags, { if (TREE_CODE (TREE_OPERAND (node, 0)) != ADDR_EXPR) { + /* Enclose pointers to arrays in parentheses. */ + tree op0 = TREE_OPERAND (node, 0); + tree op0type = TREE_TYPE (op0); + if (POINTER_TYPE_P (op0type) + && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE) + pp_left_paren (pp); pp_star (pp); - dump_generic_node (pp, TREE_OPERAND (node, 0), - spc, flags, false); + dump_generic_node (pp, op0, spc, flags, false); + if (POINTER_TYPE_P (op0type) + && TREE_CODE (TREE_TYPE (op0type)) == ARRAY_TYPE) + pp_right_paren (pp); } else dump_generic_node (pp, -- 2.30.2