aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-07-16 09:43:43 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-07-16 09:43:43 +0200
commit9e51f66f9b9178499a88f6a4efcaab14d5d02efb (patch)
treea29b2967b04d2b451f6eb679e2e88414e2d2cc8c
parent6fb4417f5e1c1e6af80eca7af26754d39165ab70 (diff)
downloadgcc-9e51f66f9b9178499a88f6a4efcaab14d5d02efb.zip
gcc-9e51f66f9b9178499a88f6a4efcaab14d5d02efb.tar.gz
gcc-9e51f66f9b9178499a88f6a4efcaab14d5d02efb.tar.bz2
re PR c++/3698 (improper handling of an extern declared inline function)
PR c++/3698 PR c++/86208 * cp-gimplify.c (cp_genericize_r): When using extern_decl_map, or in TREE_USED flag from stmt to h->to. * g++.dg/opt/pr3698.C: New test. From-SVN: r262678
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/cp-gimplify.c1
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/opt/pr3698.C21
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1d5d669..a8bd6b2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2018-07-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/3698
+ PR c++/86208
+ * cp-gimplify.c (cp_genericize_r): When using extern_decl_map, or
+ in TREE_USED flag from stmt to h->to.
+
2018-07-13 Nathan Sidwell <nathan@acm.org>
PR c++/86374
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index 145af26..356b188 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -1085,6 +1085,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
if (h)
{
*stmt_p = h->to;
+ TREE_USED (h->to) |= TREE_USED (stmt);
*walk_subtrees = 0;
return NULL;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3eee55c..9b6fe46 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2018-07-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/3698
+ PR c++/86208
+ * g++.dg/opt/pr3698.C: New test.
+
2018-07-16 Richard Biener <rguenther@suse.de>
PR ipa/86389
diff --git a/gcc/testsuite/g++.dg/opt/pr3698.C b/gcc/testsuite/g++.dg/opt/pr3698.C
new file mode 100644
index 0000000..ebdf573
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr3698.C
@@ -0,0 +1,21 @@
+// PR c++/3698
+// { dg-do link }
+// { dg-options "-O0" }
+
+struct X {
+ int i;
+};
+
+inline const int&
+OHashKey (const X& x)
+{
+ return x.i;
+}
+
+int
+main ()
+{
+ extern const int& OHashKey (const X& x);
+ X x;
+ return OHashKey (x);
+}