aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/guality/pr93888.C24
-rw-r--r--gcc/tree-inline.c1
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);
}