diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-07-16 09:43:43 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-07-16 09:43:43 +0200 |
commit | 9e51f66f9b9178499a88f6a4efcaab14d5d02efb (patch) | |
tree | a29b2967b04d2b451f6eb679e2e88414e2d2cc8c | |
parent | 6fb4417f5e1c1e6af80eca7af26754d39165ab70 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr3698.C | 21 |
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); +} |