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
This commit is contained in:
Nathan Sidwell 2017-06-06 15:06:56 +00:00 committed by Nathan Sidwell
parent 4ebcc903bf
commit 25d446fd38
3 changed files with 37 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2017-06-06 Nathan Sidwell <nathan@acm.org>
PR c++/80979
* name-lookup.c (adl_class_only): Don't add visible friends.
2017-06-05 Volker Reichelt <v.reichelt@netcologne.de>
* parser.c (cp_parser_base_specifier): Fix typos in error messages.

View File

@ -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.) */

View File

@ -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);
}