diff options
-rw-r--r-- | gcc/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/guality/pr93888.C | 24 | ||||
-rw-r--r-- | gcc/tree-inline.c | 1 |
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index df70632..b32bd44 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2020-03-04 Jakub Jelinek <jakub@redhat.com> + PR debug/93888 + * tree-inline.c (copy_decl_to_var): Copy DECL_BY_REFERENCE flag. + * tree-ssa-sccvn.c (vn_walk_cb_data::push_partial_def): Add offseti argument. Change pd argument so that it can be modified. Turn constant non-CONSTRUCTOR store into non-constant if it is too large. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cbf1716..90061ee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-03-04 Jakub Jelinek <jakub@redhat.com> + + PR debug/93888 + * g++.dg/guality/pr93888.C: New test. + 2020-02-04 Richard Biener <rguenther@suse.de> PR tree-optimization/93964 diff --git a/gcc/testsuite/g++.dg/guality/pr93888.C b/gcc/testsuite/g++.dg/guality/pr93888.C new file mode 100644 index 0000000..d54a4dc --- /dev/null +++ b/gcc/testsuite/g++.dg/guality/pr93888.C @@ -0,0 +1,24 @@ +// PR debug/93888 +// { dg-do run } +// { dg-options "-g -fvar-tracking -fno-inline" } +// { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } + +struct K +{ + K () {} + K (K const &rhs) { k[0] = 'C'; } + char k[8] = {'B','B','B','B','B','B','B','B'}; +}; + +__attribute__((always_inline)) inline bool +foo (const K karg) +{ + return karg.k[0] != 'C'; // { dg-final { gdb-test 16 "karg.k[0]" "'C'" } } +} // { dg-final { gdb-test 16 "karg.k[1]" "'B'" } } + +int +main () +{ + K x; + return foo (x); +} diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 23941da..59798ec 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -5929,6 +5929,7 @@ copy_decl_to_var (tree decl, copy_body_data *id) TREE_READONLY (copy) = TREE_READONLY (decl); TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (decl); DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (decl); + DECL_BY_REFERENCE (copy) = DECL_BY_REFERENCE (decl); return copy_decl_for_dup_finish (id, decl, copy); } |