From 25d446fd388959e5c87cfe621c17a9a2f78f90aa Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 6 Jun 2017 15:06:56 +0000 Subject: [PATCH] re PR c++/80979 (ice in lookup_mark, at cp/tree.c:2298) PR c++/80979 * name-lookup.c (adl_class_only): Don't add visible friends. From-SVN: r248922 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/name-lookup.c | 6 ++++++ gcc/testsuite/g++.dg/lookup/pr80979.C | 26 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/g++.dg/lookup/pr80979.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f9bd9548eb8..8200756ba4d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-06-06 Nathan Sidwell + + PR c++/80979 + * name-lookup.c (adl_class_only): Don't add visible friends. + 2017-06-05 Volker Reichelt * parser.c (cp_parser_base_specifier): Fix typos in error messages. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 041d51c8494..169a1c99eda 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -801,6 +801,12 @@ name_lookup::adl_class_only (tree type) if (CP_DECL_CONTEXT (fn) != context) continue; + /* Only interested in anticipated friends. (Non-anticipated + ones will have been inserted during the namespace + adl.) */ + if (!DECL_ANTICIPATED (fn)) + continue; + /* Template specializations are never found by name lookup. (Templates themselves can be found, but not template specializations.) */ diff --git a/gcc/testsuite/g++.dg/lookup/pr80979.C b/gcc/testsuite/g++.dg/lookup/pr80979.C new file mode 100644 index 00000000000..eb22f71773c --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/pr80979.C @@ -0,0 +1,26 @@ +// pr C++/80979 ICE with late discovery of using directives during ADL +// of a friend declaration. + +namespace Tiny { + class Handsome {}; + void Dahl (Handsome &, Handsome &); + + namespace Jack { + class Vladof { + friend void Dahl (Vladof &, Vladof &); + }; + void Dahl (Vladof &, Vladof &); + } + + struct BDonk {}; + + namespace Tina { + void Dahl (BDonk &, Jack::Vladof &); + } + using Tina::Dahl; +} + +void BoomBoom (Tiny::BDonk &vault, Tiny::Jack::Vladof &hunter) +{ + Dahl (vault, hunter); +} -- 2.30.2