aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/friend3.C10
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b24258b..fbee4d6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2003-09-02 Scott Brumbaugh <scottb.lists@verizon.net>
+
+ PR c++/11553
+ * parser.c (cp_parser_decl_specifier_seq): Add check for a
+ duplicate friend decl-specifier.
+
2003-09-02 Mark Mitchell <mark@codesourcery.com>
PR c++/11847
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 01d6dba..916b042 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -6312,7 +6312,10 @@ cp_parser_decl_specifier_seq (cp_parser* parser,
case RID_FRIEND:
/* decl-specifier:
friend */
- friend_p = true;
+ if (friend_p)
+ error ("duplicate `friend'");
+ else
+ friend_p = true;
/* The representation of the specifier is simply the
appropriate TREE_IDENTIFIER node. */
decl_spec = token->value;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2cac015..57b9436 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-09-02 Scott Brumbaugh <scottb.lists@verizon.net>
+
+ PR c++/11553
+ * g++.dg/parse/friend3.C: New test.
+
2003-09-02 Mark Mitchell <mark@codesourcery.com>
PR c++/11847
diff --git a/gcc/testsuite/g++.dg/parse/friend3.C b/gcc/testsuite/g++.dg/parse/friend3.C
new file mode 100644
index 0000000..3932202
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/friend3.C
@@ -0,0 +1,10 @@
+// { dg-do compile }
+//
+// PR 11553 catch duplicate friend specifiers
+
+struct S
+{
+ friend friend class C; // { dg-error "duplicate" }
+};
+
+