diff options
author | Marek Polacek <polacek@redhat.com> | 2019-10-11 20:44:02 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2019-10-11 20:44:02 +0000 |
commit | c6c3f55699d316da38496de1328f6e09a46deed8 (patch) | |
tree | f3138d560c12a55888dfb3704380ec81964e0267 /libcpp | |
parent | 436103a09831b2924d3262c13a17da530f90da92 (diff) | |
download | gcc-c6c3f55699d316da38496de1328f6e09a46deed8.zip gcc-c6c3f55699d316da38496de1328f6e09a46deed8.tar.gz gcc-c6c3f55699d316da38496de1328f6e09a46deed8.tar.bz2 |
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
Diffstat (limited to 'libcpp')
0 files changed, 0 insertions, 0 deletions