Commit c8572dd6 by Patrick Palka

re PR c++/27100 (ICE with multiple friend declarations)

Fix PR c++/27100

gcc/cp/ChangeLog:

	PR c++/27100
	* decl.c (duplicate_decls): Properly copy the
	DECL_PENDING_INLINE_P, DECL_PENDING_INLINE_INFO and
	DECL_SAVED_FUNCTION_DATA fields from OLDDECL to NEWDECL.

gcc/testsuite/ChangeLog:

	PR c++/27100
	* g++.dg/other/friend6.C: New test.

From-SVN: r237078
parent 1c7733a7
2016-06-03 Patrick Palka <ppalka@gcc.gnu.org>
PR c++/27100
* decl.c (duplicate_decls): Properly copy the
DECL_PENDING_INLINE_P, DECL_PENDING_INLINE_INFO and
DECL_SAVED_FUNCTION_DATA fields from OLDDECL to NEWDECL.
2016-06-03 Chung-Lin Tang <cltang@codesourcery.com>
* semantics.c (finish_omp_clauses): Mark OpenACC reduction
......
......@@ -2351,8 +2351,17 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
}
else
{
if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
if (DECL_PENDING_INLINE_P (olddecl))
{
DECL_PENDING_INLINE_P (newdecl) = 1;
DECL_PENDING_INLINE_INFO (newdecl)
= DECL_PENDING_INLINE_INFO (olddecl);
}
else if (DECL_PENDING_INLINE_P (newdecl))
;
else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
DECL_SAVED_FUNCTION_DATA (newdecl)
= DECL_SAVED_FUNCTION_DATA (olddecl);
DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
......
2016-06-03 Patrick Palka <ppalka@gcc.gnu.org>
PR c++/27100
* g++.dg/other/friend6.C: New test.
2016-06-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* g++.dg/torture/ppc-ldst-array.C: New.
......
// PR c++/27100
// This used to fail at link time with an "undefined reference to 'foo'" error.
// { dg-do run }
struct A
{
friend void foo (const A&) { }
friend void foo (const A&);
};
int
main ()
{
foo (A ());
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment