diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-10-22 23:44:25 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-10-22 23:44:25 +0000 |
commit | 71e256fa18d44534f029b73cd492fe387f6aa259 (patch) | |
tree | 2f55c95f7ee50b771fd702cf463eee9b0a5f200c /gcc/cp | |
parent | eb344f43ef3115df9af589b4f2cac36f5de42bd7 (diff) | |
download | gcc-71e256fa18d44534f029b73cd492fe387f6aa259.tar.gz |
PR c++/6579
* spew.c (snarf_parenthesized_expression): New function.
(snarf_block): Use it.
PR c++/6579
* g++.dg/parse/stmtexpr3.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58427 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/spew.c | 27 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6f73ad911d1..2529697ba4a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-10-22 Mark Mitchell <mark@codesourcery.com> + + PR c++/6579 + * spew.c (snarf_parenthesized_expression): New function. + (snarf_block): Use it. + 2002-10-22 Richard Henderson <rth@redhat.com> * method.c (use_thunk): Always compute vcall_value; assert that diff --git a/gcc/cp/spew.c b/gcc/cp/spew.c index 8633bb8c4c5..1d671252126 100644 --- a/gcc/cp/spew.c +++ b/gcc/cp/spew.c @@ -133,6 +133,7 @@ static struct unparsed_text * alloc_unparsed_text static void snarf_block PARAMS ((struct unparsed_text *t)); static tree snarf_defarg PARAMS ((void)); +static void snarf_parenthesized_expression (struct unparsed_text *); static int frob_id PARAMS ((int, int, tree *)); /* The list of inline functions being held off until we reach the end of @@ -1067,6 +1068,30 @@ alloc_unparsed_text (locus, decl, interface) return r; } +/* Accumulate the tokens that make up a parenthesized expression in T, + having already read the opening parenthesis. */ + +static void +snarf_parenthesized_expression (struct unparsed_text *t) +{ + int yyc; + int level = 1; + + while (1) + { + yyc = next_token (space_for_token (t)); + if (yyc == '(') + ++level; + else if (yyc == ')' && --level == 0) + break; + else if (yyc == 0) + { + error ("%Hend of file read inside definition", &t->locus); + break; + } + } +} + /* Subroutine of snarf_method, deals with actual absorption of the block. */ static void @@ -1145,6 +1170,8 @@ snarf_block (t) else if (look_for_semicolon && blev == 0) break; } + else if (yyc == '(' && blev == 0) + snarf_parenthesized_expression (t); else if (yyc == 0) { error ("%Hend of file read inside definition", &t->locus); |