diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-03-08 18:47:42 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-03-08 18:47:42 +0000 |
commit | 0e1363428da6b1ff7d0f20d730e5fd76a29241ed (patch) | |
tree | ac2ca092904548ecb5c41cd9e875ffc991c35ea8 /gcc | |
parent | 988d1653869158be80b797b13a60dacfc0a4fa22 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 1 | ||||
-rw-r--r-- | gcc/cp/parser.c | 8 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/constructor1.C | 4 |
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) +{ +} |