Commit c6c3f556 by Marek Polacek Committed by Marek Polacek

PR c++/92049 - extra error with -fchecking=2.

The concepts merge brought this bit

@@ -26326,9 +26559,9 @@ build_non_dependent_expr (tree expr)
     unexpected recursive instantiations.  */
       && !parsing_nsdmi ()
       /* Don't do this during concept expansion either and for
-         the same reason.  */
-      && !expanding_concept ())
-    fold_non_dependent_expr (expr, tf_none);
+    the same reason.  */
+      && !parsing_constraint_expression_p ())
+    fold_non_dependent_expr (expr);

   STRIP_ANY_LOCATION_WRAPPER (expr);

(which I'm not finding in the ChangeLog).  Dropping tf_none means that
fold_non_dependent_expr will use tf_warning_or_error by default, and in
this test that causes an error:

  template<bool> struct cond;

  template<int> struct S { 
    void f(int i) {
      cond<__builtin_constant_p(i)>();
    }
  };

  S<1> s;

where it complains that cond<false> is incomplete.  Which it is, but we're
not actually instantiating the function f, so issuing an error seems
overzealous (though not wrong), and it breaks a bunch of tests.  This patch
brings that tf_none back.  We will still complain if we do instantiate f.

	* pt.c (build_non_dependent_expr): Call fold_non_dependent_expr
	with tf_none.

	* g++.dg/template/builtin2.C: New test.

From-SVN: r276906
parent 436103a0
2019-10-11 Marek Polacek <polacek@redhat.com>
PR c++/92049 - extra error with -fchecking=2.
* pt.c (build_non_dependent_expr): Call fold_non_dependent_expr
with tf_none.
2019-10-11 Paolo Carlini <paolo.carlini@oracle.com> 2019-10-11 Paolo Carlini <paolo.carlini@oracle.com>
* typeck.c (cp_build_binary_op): Do not handle RROTATE_EXPR and * typeck.c (cp_build_binary_op): Do not handle RROTATE_EXPR and
......
...@@ -27059,7 +27059,7 @@ build_non_dependent_expr (tree expr) ...@@ -27059,7 +27059,7 @@ build_non_dependent_expr (tree expr)
/* Don't do this during concept processing either and for /* Don't do this during concept processing either and for
the same reason. */ the same reason. */
&& !processing_constraint_expression_p ()) && !processing_constraint_expression_p ())
fold_non_dependent_expr (expr); fold_non_dependent_expr (expr, tf_none);
STRIP_ANY_LOCATION_WRAPPER (expr); STRIP_ANY_LOCATION_WRAPPER (expr);
......
2019-10-11 Marek Polacek <polacek@redhat.com>
PR c++/92049 - extra error with -fchecking=2.
* g++.dg/template/builtin2.C: New test.
2019-10-11 Jim Wilson <jimw@sifive.com> 2019-10-11 Jim Wilson <jimw@sifive.com>
PR rtl-optimization/91860 PR rtl-optimization/91860
......
// PR c++/92049 - extra error with -fchecking=2.
// { dg-do compile { target c++11 } }
// { dg-additional-options "-fchecking=2" }
#include "builtin1.C"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment