From 056a3927785fdad7bf6929d3d093cbd896cae603 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 22 Sep 2011 14:16:27 +0000 Subject: [PATCH] re PR c++/50344 (friend declaration confused by const qualifier) /cp 2011-09-22 Jonathan Wakely Paolo Carlini PR c++/50344 * friend.c (make_friend_class): cv-qualification is ok in a friend declaration. /testsuite 2011-09-22 Jonathan Wakely Paolo Carlini PR c++/50344 * g++.dg/template/friend52.C: New. Co-Authored-By: Paolo Carlini From-SVN: r179088 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/friend.c | 4 +++- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/template/friend52.C | 17 +++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/friend52.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 51230909ed9..0dd01d95d43 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2011-09-22 Jonathan Wakely + Paolo Carlini + + PR c++/50344 + * friend.c (make_friend_class): cv-qualification is ok in a + friend declaration. + 2011-09-21 Paolo Carlini PR c++/50454 diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c index 36fcca4f737..b6bd387b829 100644 --- a/gcc/cp/friend.c +++ b/gcc/cp/friend.c @@ -1,6 +1,6 @@ /* Help friends in C++. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2007, 2008, 2010 Free Software Foundation, Inc. + 2007, 2008, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -237,6 +237,8 @@ make_friend_class (tree type, tree friend_type, bool complain) return; } + friend_type = cv_unqualified (friend_type); + if (friend_depth) /* If the TYPE is a template then it makes sense for it to be friends with itself; this means that each instantiation is diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1942dfc0f45..99cd2ead4b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-09-22 Jonathan Wakely + Paolo Carlini + + PR c++/50344 + * g++.dg/template/friend52.C: New. + 2011-09-22 Richard Sandiford * gcc.target/arm/cmp-1.c: New test. diff --git a/gcc/testsuite/g++.dg/template/friend52.C b/gcc/testsuite/g++.dg/template/friend52.C new file mode 100644 index 00000000000..d4fecd95ed4 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/friend52.C @@ -0,0 +1,17 @@ +// PR c++/50344 +// { dg-options "" } + +template class C +{ + friend T; + int i; +}; + +struct S +{ + int f() + { + C c; + return c.i; + } +}; -- 2.11.4.GIT