aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-03-08 18:47:42 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-03-08 18:47:42 +0000
commit0e1363428da6b1ff7d0f20d730e5fd76a29241ed (patch)
treeac2ca092904548ecb5c41cd9e875ffc991c35ea8 /gcc
parent988d1653869158be80b797b13a60dacfc0a4fa22 (diff)
downloadgcc-0e1363428da6b1ff7d0f20d730e5fd76a29241ed.zip
gcc-0e1363428da6b1ff7d0f20d730e5fd76a29241ed.tar.gz
gcc-0e1363428da6b1ff7d0f20d730e5fd76a29241ed.tar.bz2
re PR c++/9823 (ICE in sort_mem_initializers)
PR c++/9823 * cp-tree.h (begin_mem_initializers): Remove. * parser.c (cp_parser_mem_initializer_list): Inline it here. Do not call finish_mem_initializers if not in a constructor. (cp_parser_class_head): Fix typo in error message. * semantics.c (begin_mem_initializers): Remove. * testsuite/g++.dg/parser/constructor1.C: New test. PR c++/9823 * g++.dg/parser/constructor1.C: New test. From-SVN: r63999
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog8
-rw-r--r--gcc/cp/cp-tree.h1
-rw-r--r--gcc/cp/parser.c8
-rw-r--r--gcc/cp/semantics.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/constructor1.C4
6 files changed, 22 insertions, 13 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4acff21..53e1b74 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,13 @@
2003-03-08 Mark Mitchell <mark@codesourcery.com>
+ PR c++/9823
+ * cp-tree.h (begin_mem_initializers): Remove.
+ * parser.c (cp_parser_mem_initializer_list): Inline it here.
+ Do not call finish_mem_initializers if not in a constructor.
+ (cp_parser_class_head): Fix typo in error message.
+ * semantics.c (begin_mem_initializers): Remove.
+ * testsuite/g++.dg/parser/constructor1.C: New test.
+
PR c++/9809
* call.c (add_function_candidate): Skip builtin fuctions that have
not yet been declared.
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 3ab95cc..b4eeb76 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -4205,7 +4205,6 @@ extern void expand_body (tree);
extern tree nullify_returns_r (tree *, int *, void *);
extern void do_pushlevel (scope_kind);
extern tree do_poplevel (void);
-extern void begin_mem_initializers (void);
extern void finish_mem_initializers (tree);
extern void setup_vtbl_ptr (tree, tree);
extern void clear_out_block (void);
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 468ba03b..1c83227 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -7189,7 +7189,8 @@ cp_parser_mem_initializer_list (cp_parser* parser)
/* Let the semantic analysis code know that we are starting the
mem-initializer-list. */
- begin_mem_initializers ();
+ if (!DECL_CONSTRUCTOR_P (current_function_decl))
+ error ("only constructors take base initializers");
/* Loop through the list. */
while (true)
@@ -7212,7 +7213,8 @@ cp_parser_mem_initializer_list (cp_parser* parser)
}
/* Perform semantic analysis. */
- finish_mem_initializers (mem_initializer_list);
+ if (DECL_CONSTRUCTOR_P (current_function_decl))
+ finish_mem_initializers (mem_initializer_list);
}
/* Parse a mem-initializer.
@@ -11789,7 +11791,7 @@ cp_parser_class_head (cp_parser* parser,
class was originally declared, the program is invalid. */
if (scope && !is_ancestor (scope, CP_DECL_CONTEXT (type)))
{
- error ("declaration of `%D' in `%D' which does not "
+ error ("declaration of `%D' in `%D' which does not "
"enclose `%D'", type, scope, nested_name_specifier);
return NULL_TREE;
}
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index cf0bec7..a5b7c50 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1142,15 +1142,6 @@ finish_eh_cleanup (cleanup)
add_stmt (r);
}
-/* Begin processing a mem-initializer-list. */
-
-void
-begin_mem_initializers ()
-{
- if (! DECL_CONSTRUCTOR_P (current_function_decl))
- error ("only constructors take base initializers");
-}
-
/* The MEM_INITS is a list of mem-initializers, in reverse of the
order they were written by the user. Each node is as for
emit_mem_initializers. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0d3d209..8c11f85 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-03-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9823
+ * g++.dg/parser/constructor1.C: New test.
+
2003-03-08 Hans-Peter Nilsson <hp@bitrange.com>
* gcc.c-torture/execute/20020720-1.x: Add xfail for cris-*-*.
diff --git a/gcc/testsuite/g++.dg/parse/constructor1.C b/gcc/testsuite/g++.dg/parse/constructor1.C
new file mode 100644
index 0000000..3011862
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/constructor1.C
@@ -0,0 +1,4 @@
+ACE_Process_Descriptor::ACE_Process_Descriptor () : // { dg-error "" }
+ process_ (0)
+{
+}