c++: Prevent warnings for value-dependent exprs [PR96742]
authorMarek Polacek <polacek@redhat.com>
Sat, 24 Oct 2020 19:26:27 +0000 (15:26 -0400)
committerMarek Polacek <polacek@redhat.com>
Wed, 28 Oct 2020 21:26:45 +0000 (17:26 -0400)
commit976e7ef1a2d54f46021f74d071d9fdb9631298f8
treeb75d70aa7e586590846694b818893cb4e165703d
parent122f0db27933e6e34e073c9c4d27a10801652ebd
c++: Prevent warnings for value-dependent exprs [PR96742]

Here, in r11-155, I changed the call to uses_template_parms to
type_dependent_expression_p_push to avoid a crash in C++98 in
value_dependent_expression_p on a non-constant expression.  But that
prompted a host of complaints that we now warn for value-dependent
expressions in templates.  Those warnings are technically valid, but
people still don't want them because they're awkward to avoid.  This
patch uses value_dependent_expression_p or type_dependent_expression_p.
But make sure that we don't ICE in value_dependent_expression_p by
checking potential_constant_expression first.

gcc/cp/ChangeLog:

PR c++/96675
PR c++/96742
* pt.c (tsubst_copy_and_build): Call value_dependent_expression_p or
type_dependent_expression_p instead of type_dependent_expression_p_push.
But only call value_dependent_expression_p for expressions that are
potential_constant_expression.

gcc/testsuite/ChangeLog:

PR c++/96675
PR c++/96742
* g++.dg/warn/Wdiv-by-zero-3.C: Turn dg-warning into dg-bogus.
* g++.dg/warn/Wtautological-compare3.C: New test.
* g++.dg/warn/Wtype-limits5.C: New test.
* g++.old-deja/g++.pt/crash10.C: Remove dg-warning.
gcc/cp/pt.c
gcc/testsuite/g++.dg/warn/Wdiv-by-zero-3.C
gcc/testsuite/g++.dg/warn/Wtautological-compare3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wtype-limits5.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/crash10.C