diff options
author | Nathan Sidwell <nathan@acm.org> | 2017-12-05 17:29:58 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2017-12-05 17:29:58 +0000 |
commit | ea9e71de65fd640620938a463d30408f92fea8d1 (patch) | |
tree | 8307d62b3dda38e165d0f92bb11a59ed9e7ca38c | |
parent | 7109d224774bce3eb27e945b2e2f7ec9d7620fa9 (diff) | |
download | gcc-ea9e71de65fd640620938a463d30408f92fea8d1.zip gcc-ea9e71de65fd640620938a463d30408f92fea8d1.tar.gz gcc-ea9e71de65fd640620938a463d30408f92fea8d1.tar.bz2 |
[PR C++/83287] Mark lookup for keeping
https://gcc.gnu.org/ml/gcc-patches/2017-12/msg00242.html
PR c++/83287
* tree.c (build_min): Check CAST_EXPR arg for OVERLOADs.
* g++.dg/lookup/pr83287.C: New.
From-SVN: r255429
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/tree.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/pr83287.C | 19 |
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a5ab703..d5141f0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-12-05 Nathan Sidwell <nathan@acm.org> + + PR c++/83287 + * tree.c (build_min): Check CAST_EXPR arg for OVERLOADs. + 2017-12-05 Martin Liska <mliska@suse.cz> Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index c76dea4..43bbf43 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -3230,6 +3230,13 @@ build_min (enum tree_code code, tree tt, ...) } va_end (p); + + if (code == CAST_EXPR) + /* The single operand is a TREE_LIST, which we have to check. */ + for (tree v = TREE_OPERAND (t, 0); v; v = TREE_CHAIN (v)) + if (TREE_CODE (TREE_VALUE (v)) == OVERLOAD) + lookup_keep (TREE_VALUE (v), true); + return t; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 41099b4..58a4c00 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-12-05 Nathan Sidwell <nathan@acm.org> + + PR c++/83287 + * g++.dg/lookup/pr83287.C: New. + 2017-12-05 Jakub Jelinek <jakub@redhat.com> PR testsuite/83289 diff --git a/gcc/testsuite/g++.dg/lookup/pr83287.C b/gcc/testsuite/g++.dg/lookup/pr83287.C new file mode 100644 index 0000000..305407b --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/pr83287.C @@ -0,0 +1,19 @@ +// PR c++/83287 failed to keep lookup until instantiation time + +void foo (); + +namespace { + void foo (int); +} + +template <class T> +void bar () +{ + T (*p)() = (T (*)(void)) foo; +} + +void +baz () +{ + bar<void> (); +} |