Suppress diagnostics substituting into a requires-expression (PR c++/92403).
authorAndrew Sutton <asutton@lock3software.com>
Tue, 19 Nov 2019 15:11:14 +0000 (15:11 +0000)
committerAndrew Sutton <asutton@gcc.gnu.org>
Tue, 19 Nov 2019 15:11:14 +0000 (15:11 +0000)
gcc/cp/
* pt.c (tsubst_copy_and_build): Perform the first substitution without
diagnostics and a second only if tsubst_requries_expr returns an error.

From-SVN: r278449

gcc/cp/ChangeLog
gcc/cp/pt.c

index 30ebf18..819de73 100644 (file)
@@ -1,3 +1,10 @@
+2019-11-19  Andrew Sutton  <asutton@lock3software.com>
+
+       PR c++/92403
+       Suppress diagnostics substituting into a requires-expression.
+       * pt.c (tsubst_copy_and_build): Perform the first substitution without
+       diagnostics and a second only if tsubst_requries_expr returns an error.
+
 2019-11-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/92504
index 8f7734a..424098a 100644 (file)
@@ -20139,7 +20139,12 @@ tsubst_copy_and_build (tree t,
       }
 
     case REQUIRES_EXPR:
-      RETURN (tsubst_requires_expr (t, args, complain, in_decl));
+      {
+       tree r = tsubst_requires_expr (t, args, tf_none, in_decl);
+       if (r == error_mark_node && (complain & tf_error))
+         tsubst_requires_expr (t, args, complain, in_decl);
+       RETURN (r);
+      }
 
     case RANGE_EXPR:
       /* No need to substitute further, a RANGE_EXPR will always be built