aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2002-04-13 07:10:12 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2002-04-13 07:10:12 +0000
commit0481bc2173f4356508e3eed62575fa36b22dfefb (patch)
tree3c8faed6a9f50ee59d2f66d5398cf53616345600 /gcc/cp
parent1d405c5eba2b1350d2614e690e35fbb0076209f4 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/semantics.c6
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;
}