aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/pt.c
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-08-20 18:00:09 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-08-20 18:00:09 +0000
commit47d4c811980d2793dc7502bd3949de2bac374304 (patch)
tree5a3085908e5444b2d648003ad19dda683f9fac3c /gcc/cp/pt.c
parentf2f3f409f6b69750caf647923bfc8c622f4dd991 (diff)
downloadgcc-47d4c811980d2793dc7502bd3949de2bac374304.zip
gcc-47d4c811980d2793dc7502bd3949de2bac374304.tar.gz
gcc-47d4c811980d2793dc7502bd3949de2bac374304.tar.bz2
re PR c++/11945 (Incorrect warnings issued for comma-expressions inside templates)
cp: PR c++/11945 * pt.c (build_non_dependent_expr): Look inside COND_EXPR and COMPOUND_EXPR. * semantics.c (finish_expr_stmt): Always convert to void. * typeck.c (build_x_compound_exp): Always convert to void. testsuite: PR c++/11945 * g++.dg/warn/noeffect2.C: New test. From-SVN: r70606
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r--gcc/cp/pt.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 863ab86..20642c3 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -11797,6 +11797,19 @@ build_non_dependent_expr (tree expr)
types. */
if (TREE_CODE (expr) == OVERLOAD)
return expr;
+
+ if (TREE_CODE (expr) == COND_EXPR)
+ return build (COND_EXPR,
+ TREE_TYPE (expr),
+ TREE_OPERAND (expr, 0),
+ build_non_dependent_expr (TREE_OPERAND (expr, 1)),
+ build_non_dependent_expr (TREE_OPERAND (expr, 2)));
+ if (TREE_CODE (expr) == COMPOUND_EXPR)
+ return build (COMPOUND_EXPR,
+ TREE_TYPE (expr),
+ TREE_OPERAND (expr, 0),
+ build_non_dependent_expr (TREE_OPERAND (expr, 1)));
+
/* Otherwise, build a NON_DEPENDENT_EXPR.
REFERENCE_TYPEs are not stripped for expressions in templates