public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/114580] New: Bogus warning on if constexpr
@ 2024-04-04 10:02 jakub at gcc dot gnu.org
2024-04-04 10:31 ` [Bug c++/114580] " jakub at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2024-04-04 10:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114580
Bug ID: 114580
Summary: Bogus warning on if constexpr
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
Target Milestone: ---
#include <type_traits>
template <typename T>
void foo ()
{
if constexpr ((T) std::is_constant_evaluated ())
;
}
void
bar ()
{
foo <bool> ();
}
emits bogus warning with -std=c++17 -Wall.
Once it (incorrectly) warns about
warning: ‘std::is_constant_evaluated’ always evaluates to false in a
non-‘constexpr’ function [-Wtautological-compare]
and once it correctly warns about
warning: ‘std::is_constant_evaluated’ always evaluates to true in ‘if
constexpr’ [-Wtautological-compare]
on the same line. In reality, std::is_constant_evaluated () here always
evaluates to true, never to false.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/114580] Bogus warning on if constexpr
2024-04-04 10:02 [Bug c++/114580] New: Bogus warning on if constexpr jakub at gcc dot gnu.org
@ 2024-04-04 10:31 ` jakub at gcc dot gnu.org
2024-04-09 7:32 ` cvs-commit at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2024-04-04 10:31 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114580
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2024-04-04
Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org
Ever confirmed|0 |1
Status|UNCONFIRMED |ASSIGNED
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 57873
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57873&action=edit
gcc14-pr114580.patch
Untested fix.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/114580] Bogus warning on if constexpr
2024-04-04 10:02 [Bug c++/114580] New: Bogus warning on if constexpr jakub at gcc dot gnu.org
2024-04-04 10:31 ` [Bug c++/114580] " jakub at gcc dot gnu.org
@ 2024-04-09 7:32 ` cvs-commit at gcc dot gnu.org
2024-04-09 7:39 ` jakub at gcc dot gnu.org
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-04-09 7:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114580
--- Comment #2 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:cfed80b9e4f562c99679739548df9369117dd791
commit r14-9861-gcfed80b9e4f562c99679739548df9369117dd791
Author: Jakub Jelinek <jakub@redhat.com>
Date: Tue Apr 9 09:31:42 2024 +0200
c++: Fix up maybe_warn_for_constant_evaluated calls [PR114580]
When looking at maybe_warn_for_constant_evaluated for the trivial
infinite loops patch, I've noticed that it can emit weird diagnostics
for if constexpr in templates, first warn that std::is_constant_evaluted()
always evaluates to false (because the function template is not constexpr)
and then during instantiation warn that std::is_constant_evaluted()
always evaluates to true (because it is used in if constexpr condition).
Now, only the latter is actually true, even when the if constexpr
is in a non-constexpr function, it will still always evaluate to true.
So, the following patch fixes it to call maybe_warn_for_constant_evaluated
always with IF_STMT_CONSTEXPR_P (if_stmt) as the second argument rather
than
true if it is if constexpr with non-dependent condition etc.
2024-04-09 Jakub Jelinek <jakub@redhat.com>
PR c++/114580
* semantics.cc (finish_if_stmt_cond): Call
maybe_warn_for_constant_evaluated with IF_STMT_CONSTEXPR_P
(if_stmt)
as the second argument, rather than true/false depending on if
it is if constexpr with non-dependent constant expression with
bool type.
* g++.dg/cpp2a/is-constant-evaluated15.C: New test.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/114580] Bogus warning on if constexpr
2024-04-04 10:02 [Bug c++/114580] New: Bogus warning on if constexpr jakub at gcc dot gnu.org
2024-04-04 10:31 ` [Bug c++/114580] " jakub at gcc dot gnu.org
2024-04-09 7:32 ` cvs-commit at gcc dot gnu.org
@ 2024-04-09 7:39 ` jakub at gcc dot gnu.org
2024-04-21 4:09 ` cvs-commit at gcc dot gnu.org
2024-04-23 6:45 ` jakub at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2024-04-09 7:39 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114580
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Fixed.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/114580] Bogus warning on if constexpr
2024-04-04 10:02 [Bug c++/114580] New: Bogus warning on if constexpr jakub at gcc dot gnu.org
` (2 preceding siblings ...)
2024-04-09 7:39 ` jakub at gcc dot gnu.org
@ 2024-04-21 4:09 ` cvs-commit at gcc dot gnu.org
2024-04-23 6:45 ` jakub at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-04-21 4:09 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114580
--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-13 branch has been updated by Jakub Jelinek
<jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:ae3b6dea0445f9650cf1a684527efac06497f1b4
commit r13-8629-gae3b6dea0445f9650cf1a684527efac06497f1b4
Author: Jakub Jelinek <jakub@redhat.com>
Date: Tue Apr 9 09:31:42 2024 +0200
c++: Fix up maybe_warn_for_constant_evaluated calls [PR114580]
When looking at maybe_warn_for_constant_evaluated for the trivial
infinite loops patch, I've noticed that it can emit weird diagnostics
for if constexpr in templates, first warn that std::is_constant_evaluted()
always evaluates to false (because the function template is not constexpr)
and then during instantiation warn that std::is_constant_evaluted()
always evaluates to true (because it is used in if constexpr condition).
Now, only the latter is actually true, even when the if constexpr
is in a non-constexpr function, it will still always evaluate to true.
So, the following patch fixes it to call maybe_warn_for_constant_evaluated
always with IF_STMT_CONSTEXPR_P (if_stmt) as the second argument rather
than
true if it is if constexpr with non-dependent condition etc.
2024-04-09 Jakub Jelinek <jakub@redhat.com>
PR c++/114580
* semantics.cc (finish_if_stmt_cond): Call
maybe_warn_for_constant_evaluated with IF_STMT_CONSTEXPR_P
(if_stmt)
as the second argument, rather than true/false depending on if
it is if constexpr with non-dependent constant expression with
bool type.
* g++.dg/cpp2a/is-constant-evaluated15.C: New test.
(cherry picked from commit cfed80b9e4f562c99679739548df9369117dd791)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/114580] Bogus warning on if constexpr
2024-04-04 10:02 [Bug c++/114580] New: Bogus warning on if constexpr jakub at gcc dot gnu.org
` (3 preceding siblings ...)
2024-04-21 4:09 ` cvs-commit at gcc dot gnu.org
@ 2024-04-23 6:45 ` jakub at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2024-04-23 6:45 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114580
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Fixed for 13.3 too.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-04-23 6:45 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-04 10:02 [Bug c++/114580] New: Bogus warning on if constexpr jakub at gcc dot gnu.org
2024-04-04 10:31 ` [Bug c++/114580] " jakub at gcc dot gnu.org
2024-04-09 7:32 ` cvs-commit at gcc dot gnu.org
2024-04-09 7:39 ` jakub at gcc dot gnu.org
2024-04-21 4:09 ` cvs-commit at gcc dot gnu.org
2024-04-23 6:45 ` jakub at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).