aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/comma1.C13
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index affca567..214dc92 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-26 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/14278
+ * parser.c (cp_parser_parameter_declaration_list): Commit
+ to fewer tentative parses.
+
2004-02-26 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/14284
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 3d6efe1..3e26c2d 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -11108,6 +11108,7 @@ cp_parser_parameter_declaration_list (cp_parser* parser)
cannot use this technique when inside a template argument
list. */
if (!parser->in_template_argument_list_p
+ && !parser->in_type_id_in_expr_p
&& cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser)
/* However, a parameter-declaration of the form
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f66cd59..dda6ed7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-02-26 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/14278
+ * g++.dg/parse/comma1.C: New test.
+
2004-02-26 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/14284
diff --git a/gcc/testsuite/g++.dg/parse/comma1.C b/gcc/testsuite/g++.dg/parse/comma1.C
new file mode 100644
index 0000000..33d222c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/comma1.C
@@ -0,0 +1,13 @@
+// PR c++/14278
+
+struct X {
+ X (int p);
+};
+
+struct A {
+ A(X);
+};
+
+void *p_fun;
+
+A a(X ((*(int (*)(int, int)) p_fun)(0, 0)));