diff mbox

C++ PATCH for c++/71285 (member of fold-expr)

Message ID CADzB+2m0uYLr8FbA9s3QqTyWD9xbopEzpu1k7pMLhpnt1=6_yA@mail.gmail.com
State New
Headers show

Commit Message

Jason Merrill Feb. 10, 2017, 6:23 p.m. UTC
The fold-expressions code was improperly using unknown_type_node,
which means unresolved overload; an expression whose type is unknown
due to type-dependence should have null type.

Tested x86_64-pc-linux-gnu, applying to trunk.
commit e0fecc36cbee5afb56837b883d4091d180b880b5
Author: Jason Merrill <jason@redhat.com>
Date:   Fri Feb 10 12:51:59 2017 -0500

            PR c++/71285 - member of fold-expression
    
            * semantics.c (finish_unary_fold_expr)
            (finish_binary_fold_expr): Use null type for fold-expressions.
diff mbox

Patch

diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index e9fc4aa..6a47476 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -9437,7 +9437,7 @@  finish_unary_fold_expr (tree expr, int op, tree_code dir)
 
   // Build the fold expression.
   tree code = build_int_cstu (integer_type_node, abs (op));
-  tree fold = build_min (dir, unknown_type_node, code, pack);
+  tree fold = build_min_nt_loc (UNKNOWN_LOCATION, dir, code, pack);
   FOLD_EXPR_MODIFY_P (fold) = (op < 0);
   return fold;
 }
@@ -9463,7 +9463,7 @@  finish_binary_fold_expr (tree pack, tree init, int op, tree_code dir)
 {
   pack = make_pack_expansion (pack);
   tree code = build_int_cstu (integer_type_node, abs (op));
-  tree fold = build_min (dir, unknown_type_node, code, pack, init);
+  tree fold = build_min_nt_loc (UNKNOWN_LOCATION, dir, code, pack, init);
   FOLD_EXPR_MODIFY_P (fold) = (op < 0);
   return fold;
 }
diff --git a/gcc/testsuite/g++.dg/cpp1z/fold9.C b/gcc/testsuite/g++.dg/cpp1z/fold9.C
new file mode 100644
index 0000000..578b8d0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/fold9.C
@@ -0,0 +1,12 @@ 
+// PR c++/71285
+// { dg-options -std=c++1z }
+
+template<typename... Args>
+void spurious(Args... args)
+{
+    (... + args).member;
+}
+
+int main()
+{
+}