diff options
author | Nathan Sidwell <nathan@acm.org> | 2018-01-17 18:11:49 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2018-01-17 18:11:49 +0000 |
commit | 4436a3ce496abccfc405ade7fb8b575ea55a64ee (patch) | |
tree | 4861545d49bcad613e9bfba0c5a6af62ff049b31 /gcc | |
parent | bb9869d5a3e3a0f3673742ede7ea9bc325adbb4a (diff) | |
download | gcc-4436a3ce496abccfc405ade7fb8b575ea55a64ee.zip gcc-4436a3ce496abccfc405ade7fb8b575ea55a64ee.tar.gz gcc-4436a3ce496abccfc405ade7fb8b575ea55a64ee.tar.bz2 |
[C++/83287] Another overload lookup ice
https://gcc.gnu.org/ml/gcc-patches/2018-01/msg01580.html
PR c++/83287
* init.c (build_raw_new_expr): Scan list for lookups to keep.
PR c++/83287
* g++.dg/lookup/pr83287-2.C: New.
From-SVN: r256809
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/init.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/pr83287-2.C | 20 |
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 49cf0c0..71fa358 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2018-01-17 Nathan Sidwell <nathan@acm.org> + + PR c++/83287 + * init.c (build_raw_new_expr): Scan list for lookups to keep. + 2018-01-17 David Malcolm <dmalcolm@redhat.com> PR c++/83814 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 1be7c67..233f41c 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2325,7 +2325,12 @@ build_raw_new_expr (vec<tree, va_gc> *placement, tree type, tree nelts, else if (init->is_empty ()) init_list = void_node; else - init_list = build_tree_list_vec (init); + { + init_list = build_tree_list_vec (init); + for (tree v = init_list; v; v = TREE_CHAIN (v)) + if (TREE_CODE (TREE_VALUE (v)) == OVERLOAD) + lookup_keep (TREE_VALUE (v), true); + } new_expr = build4 (NEW_EXPR, build_pointer_type (type), build_tree_list_vec (placement), type, nelts, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d6c744e..da2cc0b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-17 Nathan Sidwell <nathan@acm.org> + + PR c++/83287 + * g++.dg/lookup/pr83287-2.C: New. + 2018-01-17 David Malcolm <dmalcolm@redhat.com> PR c++/83814 diff --git a/gcc/testsuite/g++.dg/lookup/pr83287-2.C b/gcc/testsuite/g++.dg/lookup/pr83287-2.C new file mode 100644 index 0000000..6ea6540 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/pr83287-2.C @@ -0,0 +1,20 @@ +// PR c++/83287 failed to keep lookup until instantiation time + +void foo (); + +namespace { + void foo (); +} + +template <class T> +void +bar () +{ + new T (foo); // { dg-error "cannot resolve" } +} + +void +baz () +{ + bar <double> (); +} |