diff options
author | Jason Merrill <jason@redhat.com> | 2011-02-10 11:29:58 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-02-10 11:29:58 -0500 |
commit | cb8384a3f592146069847a1f608a4b17fe0dfada (patch) | |
tree | 0576ee393b8a8de0a6989232641204a9f44c78b0 /gcc/cp/cvt.c | |
parent | 69f36ba6bd980b7a0a426beec9e6b2c495d129b4 (diff) | |
download | gcc-cb8384a3f592146069847a1f608a4b17fe0dfada.zip gcc-cb8384a3f592146069847a1f608a4b17fe0dfada.tar.gz gcc-cb8384a3f592146069847a1f608a4b17fe0dfada.tar.bz2 |
* cvt.c (convert_to_void): Handle null op1.
From-SVN: r170007
Diffstat (limited to 'gcc/cp/cvt.c')
-rw-r--r-- | gcc/cp/cvt.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 029aec3..36c0703 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -892,20 +892,24 @@ convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain) /* The two parts of a cond expr might be separate lvalues. */ tree op1 = TREE_OPERAND (expr,1); tree op2 = TREE_OPERAND (expr,2); - bool side_effects = TREE_SIDE_EFFECTS (op1) || TREE_SIDE_EFFECTS (op2); + bool side_effects = ((op1 && TREE_SIDE_EFFECTS (op1)) + || TREE_SIDE_EFFECTS (op2)); tree new_op1, new_op2; + new_op1 = NULL_TREE; if (implicit != ICV_CAST && !side_effects) { - new_op1 = convert_to_void (op1, ICV_SECOND_OF_COND, complain); + if (op1) + new_op1 = convert_to_void (op1, ICV_SECOND_OF_COND, complain); new_op2 = convert_to_void (op2, ICV_THIRD_OF_COND, complain); } else { - new_op1 = convert_to_void (op1, ICV_CAST, complain); + if (op1) + new_op1 = convert_to_void (op1, ICV_CAST, complain); new_op2 = convert_to_void (op2, ICV_CAST, complain); } - expr = build3 (COND_EXPR, TREE_TYPE (new_op1), + expr = build3 (COND_EXPR, TREE_TYPE (new_op2), TREE_OPERAND (expr, 0), new_op1, new_op2); break; } |