From 2e8cf16d0b8b9158a847384dcd7bbe5ab7f8284b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 12 Oct 2018 16:43:18 +0200 Subject: [PATCH] backport: re PR c++/3698 (improper handling of an extern declared inline function) Backported from mainline 2018-07-16 Jakub Jelinek 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: r265103 --- gcc/cp/ChangeLog | 10 ++++++++++ gcc/cp/cp-gimplify.c | 1 + gcc/testsuite/ChangeLog | 9 +++++++++ gcc/testsuite/g++.dg/opt/pr3698.C | 21 +++++++++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 gcc/testsuite/g++.dg/opt/pr3698.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4bb74d28f6d6..1c0986bbe94e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2018-10-12 Jakub Jelinek + + Backported from mainline + 2018-07-16 Jakub Jelinek + + 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-08-17 Richard Biener Backport from mainline diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 4891346a609b..9c107b79d8aa 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -1136,6 +1136,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 269ac9c071d3..be7ae42554e8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2018-10-12 Jakub Jelinek + + Backported from mainline + 2018-07-16 Jakub Jelinek + + PR c++/3698 + PR c++/86208 + * g++.dg/opt/pr3698.C: New test. + 2018-10-12 Richard Biener Backport from mainline diff --git a/gcc/testsuite/g++.dg/opt/pr3698.C b/gcc/testsuite/g++.dg/opt/pr3698.C new file mode 100644 index 000000000000..ebdf5731eb30 --- /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); +} -- 2.47.2