aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely.gcc@gmail.com>2011-09-22 14:16:27 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-09-22 14:16:27 +0000
commit056a3927785fdad7bf6929d3d093cbd896cae603 (patch)
treeead0b04a92b283e76554e0f0f5c9b1d051d21acc /gcc
parente7dd5b57c4f92c45c73a1c86cd1b21912c08d682 (diff)
downloadgcc-056a3927785fdad7bf6929d3d093cbd896cae603.zip
gcc-056a3927785fdad7bf6929d3d093cbd896cae603.tar.gz
gcc-056a3927785fdad7bf6929d3d093cbd896cae603.tar.bz2
re PR c++/50344 (friend declaration confused by const qualifier)
/cp 2011-09-22 Jonathan Wakely <jwakely.gcc@gmail.com> Paolo Carlini <paolo.carlini@oracle.com> PR c++/50344 * friend.c (make_friend_class): cv-qualification is ok in a friend declaration. /testsuite 2011-09-22 Jonathan Wakely <jwakely.gcc@gmail.com> Paolo Carlini <paolo.carlini@oracle.com> PR c++/50344 * g++.dg/template/friend52.C: New. Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com> From-SVN: r179088
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/friend.c4
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/template/friend52.C17
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5123090..0dd01d9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2011-09-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/50344
+ * friend.c (make_friend_class): cv-qualification is ok in a
+ friend declaration.
+
2011-09-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50454
diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c
index 36fcca4..b6bd387 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 1942dfc..99cd2ea 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/50344
+ * g++.dg/template/friend52.C: New.
+
2011-09-22 Richard Sandiford <richard.sandiford@linaro.org>
* 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 0000000..d4fecd9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend52.C
@@ -0,0 +1,17 @@
+// PR c++/50344
+// { dg-options "" }
+
+template <typename T> class C
+{
+ friend T;
+ int i;
+};
+
+struct S
+{
+ int f()
+ {
+ C<const S> c;
+ return c.i;
+ }
+};