P0036R0: Unary Folds and Empty Parameter Packs
authorJason Merrill <jason@redhat.com>
Tue, 8 Mar 2016 22:30:30 +0000 (17:30 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 8 Mar 2016 22:30:30 +0000 (17:30 -0500)
* pt.c (expand_empty_fold): Remove special cases for *,+,&,|.

From-SVN: r234068

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/g++.dg/cpp1z/fold1.C
gcc/testsuite/g++.dg/cpp1z/fold3.C

index 5906ceb..2b95036 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-08  Jason Merrill  <jason@redhat.com>
+
+       P0036R0: Unary Folds and Empty Parameter Packs
+       * pt.c (expand_empty_fold): Remove special cases for *,+,&,|.
+
 2016-03-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/70135
index 515537b..9766668 100644 (file)
@@ -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:
index 3c33651..510d61a 100644 (file)
@@ -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);
 
index 307818f..58d41e6 100644 (file)
@@ -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" }