diff options
author | Mark Mitchell <mark@codesourcery.com> | 2002-04-13 07:10:12 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2002-04-13 07:10:12 +0000 |
commit | 0481bc2173f4356508e3eed62575fa36b22dfefb (patch) | |
tree | 3c8faed6a9f50ee59d2f66d5398cf53616345600 /gcc/cp | |
parent | 1d405c5eba2b1350d2614e690e35fbb0076209f4 (diff) | |
download | gcc-0481bc2173f4356508e3eed62575fa36b22dfefb.zip gcc-0481bc2173f4356508e3eed62575fa36b22dfefb.tar.gz gcc-0481bc2173f4356508e3eed62575fa36b22dfefb.tar.bz2 |
re PR c++/5373 (Statement expressions broken in C++)
PR c++ 5373.
* g++.dg/parse/stmtexpr1.C: New test.
PR c++/5373.
* semantics.c (finish_expr_stmt): Remember the type of the
expression before any conversions are performed.
From-SVN: r52264
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 6 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ca9251a..e615310 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2002-04-12 Mark Mitchell <mark@codesourcery.com> + PR c++/5373. + * semantics.c (finish_expr_stmt): Remember the type of the + expression before any conversions are performed. + +2002-04-12 Mark Mitchell <mark@codesourcery.com> + PR c++/5189. * call.c (add_template_candidate_real): Do not treat member templates as copy constructors. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fb6e182..f53ac28 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -203,6 +203,7 @@ finish_expr_stmt (expr) tree expr; { tree r = NULL_TREE; + tree expr_type = NULL_TREE;; if (expr != NULL_TREE) { @@ -213,6 +214,9 @@ finish_expr_stmt (expr) || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)) expr = default_conversion (expr); + /* Remember the type of the expression. */ + expr_type = TREE_TYPE (expr); + if (stmts_are_full_exprs_p ()) expr = convert_to_void (expr, "statement"); @@ -223,7 +227,7 @@ finish_expr_stmt (expr) /* This was an expression-statement, so we save the type of the expression. */ - last_expr_type = expr ? TREE_TYPE (expr) : NULL_TREE; + last_expr_type = expr_type; return r; } |