aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-03-08 17:30:30 -0500
committerJason Merrill <jason@gcc.gnu.org>2016-03-08 17:30:30 -0500
commit1e546b68c1e45d0f1fffbf02c5324717264816c4 (patch)
tree0592250fdfd01e69ed91ca08f4e4428701a9a8c4
parentd259b234a301aa5c06ca78262ae814b3d8d0f1a5 (diff)
downloadgcc-1e546b68c1e45d0f1fffbf02c5324717264816c4.zip
gcc-1e546b68c1e45d0f1fffbf02c5324717264816c4.tar.gz
gcc-1e546b68c1e45d0f1fffbf02c5324717264816c4.tar.bz2
P0036R0: Unary Folds and Empty Parameter Packs
* pt.c (expand_empty_fold): Remove special cases for *,+,&,|. From-SVN: r234068
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c12
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/fold1.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/fold3.C8
4 files changed, 11 insertions, 18 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5906ceb..2b95036 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 515537b..9766668 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 3c33651..510d61a 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 307818f..58d41e6 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" }