diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5906ceb9e3b..2b95036f931 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2016-03-08 Jason Merrill + + P0036R0: Unary Folds and Empty Parameter Packs + * pt.c (expand_empty_fold): Remove special cases for *,+,&,|. + 2016-03-08 Jakub Jelinek PR c++/70135 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 515537b384b..9766668dfcf 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10629,10 +10629,6 @@ gen_elem_of_pack_expansion_instantiation (tree pattern, sequence, the value of the expression is as follows; the program is ill-formed if the operator is not listed in this table. - * 1 - + 0 - & -1 - | 0 && true || false , void() */ @@ -10644,14 +10640,6 @@ expand_empty_fold (tree t, tsubst_flags_t complain) if (!FOLD_EXPR_MODIFY_P (t)) switch (code) { - case MULT_EXPR: - return integer_one_node; - case PLUS_EXPR: - return integer_zero_node; - case BIT_AND_EXPR: - return integer_minus_one_node; - case BIT_IOR_EXPR: - return integer_zero_node; case TRUTH_ANDIF_EXPR: return boolean_true_node; case TRUTH_ORIF_EXPR: diff --git a/gcc/testsuite/g++.dg/cpp1z/fold1.C b/gcc/testsuite/g++.dg/cpp1z/fold1.C index 3c33651ffd8..510d61a35c8 100644 --- a/gcc/testsuite/g++.dg/cpp1z/fold1.C +++ b/gcc/testsuite/g++.dg/cpp1z/fold1.C @@ -22,11 +22,11 @@ MAKE_FNS (add, +); MAKE_FNS (sub, -); int main() { - assert(unary_left_add() == 0); + // assert(unary_left_add() == 0); assert(unary_left_add(1) == 1); assert(unary_left_add(1, 2, 3) == 6); - assert(unary_right_add() == 0); + // assert(unary_right_add() == 0); assert(unary_right_add(1) == 1); assert(unary_right_add(1, 2, 3) == 6); diff --git a/gcc/testsuite/g++.dg/cpp1z/fold3.C b/gcc/testsuite/g++.dg/cpp1z/fold3.C index 307818f55c8..58d41e6f6ee 100644 --- a/gcc/testsuite/g++.dg/cpp1z/fold3.C +++ b/gcc/testsuite/g++.dg/cpp1z/fold3.C @@ -47,16 +47,16 @@ MAKE_FN (dot_star, .*); MAKE_FN (arrow_star, ->*); int main() { - static_assert(add() == int(), ""); - static_assert(mul() == 1, ""); - static_assert(bor() == int(), ""); - static_assert(band() == -1, ""); static_assert(land() == true, ""); static_assert(lor() == false, ""); comma(); // No value to theck // These are all errors, but the error is emitted at the point // of instantiation (line 10). + add(); // { dg-message "required from here" } + mul(); // { dg-message "required from here" } + bor(); // { dg-message "required from here" } + band(); // { dg-message "required from here" } sub(); // { dg-message "required from here" } div(); // { dg-message "required from here" } mod(); // { dg-message "required from here" }