re PR c++/84691 (internal compiler error: in poplevel_class, at cp/name-lookup.c:4430)

/cp
2018-04-27  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/84691
	* decl.c (grokdeclarator): Clear friendp upon definition in local
	class definition error.

/testsuite
2018-04-27  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/84691
	* g++.dg/cpp0x/friend3.C: New.

From-SVN: r259716
This commit is contained in:
Paolo Carlini 2018-04-27 16:56:55 +00:00 committed by Paolo Carlini
parent 6d0e87b25e
commit a6e34898d1
4 changed files with 27 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2018-04-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84691
* decl.c (grokdeclarator): Clear friendp upon definition in local
class definition error.
2018-04-27 Jason Merrill <jason@redhat.com>
PR c++/85545 - ICE with noexcept PMF conversion.

View file

@ -11298,9 +11298,11 @@ grokdeclarator (const cp_declarator *declarator,
if (decl_context == NORMAL)
error ("friend declaration not in class definition");
if (current_function_decl && funcdef_flag)
error ("can%'t define friend function %qs in a local "
"class definition",
name);
{
error ("can%'t define friend function %qs in a local "
"class definition", name);
friendp = 0;
}
}
else if (ctype && sfk == sfk_conversion)
{

View file

@ -1,3 +1,8 @@
2018-04-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84691
* g++.dg/cpp0x/friend3.C: New.
2018-04-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/82518

View file

@ -0,0 +1,11 @@
// PR c++/84691
// { dg-do compile { target c++11 } }
template<typename>
struct a {
unsigned b = [] {
union {
friend void c() {} // { dg-error "local class" }
}; // { dg-error "no members" }
};
};