[PR c++/84375] Fix ICE after bad friend
https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00987.html PR c++/84375 * name-lookup.c (do_pushdecl): Bail out on bad local friend injection. * g++.dg/lookup/pr84375.C: New. From-SVN: r257739
This commit is contained in:
parent
08223f7633
commit
b1a7e33d67
4 changed files with 30 additions and 7 deletions
|
@ -1,3 +1,8 @@
|
|||
2018-02-16 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/84375
|
||||
* name-lookup.c (do_pushdecl): Bail out on bad local friend injection.
|
||||
|
||||
2018-02-15 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/83227 - C++17 ICE with init-list derived-to-base conversion.
|
||||
|
|
|
@ -3079,12 +3079,16 @@ do_pushdecl (tree decl, bool is_friend)
|
|||
if (is_friend)
|
||||
{
|
||||
if (level->kind != sk_namespace)
|
||||
/* In a local class, a friend function declaration must
|
||||
find a matching decl in the innermost non-class scope.
|
||||
[class.friend/11] */
|
||||
error ("friend declaration %qD in local class without "
|
||||
"prior local declaration", decl);
|
||||
else if (!flag_friend_injection)
|
||||
{
|
||||
/* In a local class, a friend function declaration must
|
||||
find a matching decl in the innermost non-class scope.
|
||||
[class.friend/11] */
|
||||
error ("friend declaration %qD in local class without "
|
||||
"prior local declaration", decl);
|
||||
/* Don't attempt to push it. */
|
||||
return error_mark_node;
|
||||
}
|
||||
if (!flag_friend_injection)
|
||||
/* Hide it from ordinary lookup. */
|
||||
DECL_ANTICIPATED (decl) = DECL_HIDDEN_FRIEND_P (decl) = true;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-02-16 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/84375
|
||||
* g++.dg/lookup/pr84375.C: New.
|
||||
|
||||
2018-02-14 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
PR target/83831
|
||||
|
@ -29,7 +34,7 @@
|
|||
2018-02-15 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
* gcc.dg/lto/README (dg-lto-warning, dg-lto-message): Document new
|
||||
directives.
|
||||
directives.
|
||||
|
||||
2018-02-15 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
|
|
9
gcc/testsuite/g++.dg/lookup/pr84375.C
Normal file
9
gcc/testsuite/g++.dg/lookup/pr84375.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
// PR c++/84375 ICE after error
|
||||
|
||||
void foo()
|
||||
{
|
||||
struct A
|
||||
{
|
||||
friend void A(); // { dg-error "local class without prior local" }
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue