* [Bug c++/105278] no warning for precise literals compared with floats
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
@ 2022-04-14 17:51 ` egallager at gcc dot gnu.org
2022-04-14 18:44 ` dcb314 at hotmail dot com
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: egallager at gcc dot gnu.org @ 2022-04-14 17:51 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
Eric Gallager <egallager at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |egallager at gcc dot gnu.org
Keywords| |diagnostic
--- Comment #1 from Eric Gallager <egallager at gcc dot gnu.org> ---
-Wfloat-equal gets you a warning, as does -Wdouble-promotion:
$ /usr/local/bin/gcc -c -g -O2 -Wall -Wextra -pedantic -Wconversion
-Wfloat-equal -Wdouble-promotion 105278.c
105278.c: In function 'f':
105278.c:5:15: warning: comparing floating-point with '==' or '!=' is unsafe
[-Wfloat-equal]
5 | if (a == 0.1234)
| ^~
105278.c:5:15: warning: implicit conversion from 'float' to 'double' to match
other operand of binary expression [-Wdouble-promotion]
$
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/105278] no warning for precise literals compared with floats
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
2022-04-14 17:51 ` [Bug c++/105278] " egallager at gcc dot gnu.org
@ 2022-04-14 18:44 ` dcb314 at hotmail dot com
2022-04-14 19:29 ` egallager at gcc dot gnu.org
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: dcb314 at hotmail dot com @ 2022-04-14 18:44 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
--- Comment #2 from David Binderman <dcb314 at hotmail dot com> ---
(In reply to Eric Gallager from comment #1)
> -Wfloat-equal gets you a warning, as does -Wdouble-promotion:
Thanks for that. This looks like another case where an obscure flag
really ought to be in -Wall or at least -Wextra.
I'll be adding it into my local compiler.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/105278] no warning for precise literals compared with floats
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
2022-04-14 17:51 ` [Bug c++/105278] " egallager at gcc dot gnu.org
2022-04-14 18:44 ` dcb314 at hotmail dot com
@ 2022-04-14 19:29 ` egallager at gcc dot gnu.org
2022-04-14 19:43 ` dcb314 at hotmail dot com
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: egallager at gcc dot gnu.org @ 2022-04-14 19:29 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
--- Comment #3 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to David Binderman from comment #2)
> (In reply to Eric Gallager from comment #1)
> > -Wfloat-equal gets you a warning, as does -Wdouble-promotion:
>
> Thanks for that. This looks like another case where an obscure flag
> really ought to be in -Wall or at least -Wextra.
>
> I'll be adding it into my local compiler.
Which one of them specifically do you want as part of -Wall or -Wextra? Because
the latter is listed explicitly in some documentation somewhere as an example
of a flag that would be bad to include in -Wall or -Wextra.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/105278] no warning for precise literals compared with floats
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
` (2 preceding siblings ...)
2022-04-14 19:29 ` egallager at gcc dot gnu.org
@ 2022-04-14 19:43 ` dcb314 at hotmail dot com
2022-11-16 22:52 ` pinskia at gcc dot gnu.org
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: dcb314 at hotmail dot com @ 2022-04-14 19:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
--- Comment #4 from David Binderman <dcb314 at hotmail dot com> ---
(In reply to Eric Gallager from comment #3)
> (In reply to David Binderman from comment #2)
> > (In reply to Eric Gallager from comment #1)
> > > -Wfloat-equal gets you a warning, as does -Wdouble-promotion:
> >
> > Thanks for that. This looks like another case where an obscure flag
> > really ought to be in -Wall or at least -Wextra.
> >
> > I'll be adding it into my local compiler.
>
> Which one of them specifically do you want as part of -Wall or -Wextra?
> Because the latter is listed explicitly in some documentation somewhere as
> an example of a flag that would be bad to include in -Wall or -Wextra.
Sorry, I should have been more clear -Wfloat-equal. I haven't looked into
the pros and cons of -Wdouble-promotion.
If you've got some spare time to pin down "some documentation somewhere",
then that would be appreciated.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/105278] no warning for precise literals compared with floats
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
` (3 preceding siblings ...)
2022-04-14 19:43 ` dcb314 at hotmail dot com
@ 2022-11-16 22:52 ` pinskia at gcc dot gnu.org
2022-11-16 22:54 ` [Bug c++/105278] -Wliteral-range vs -Wfloat-equal pinskia at gcc dot gnu.org
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-16 22:52 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note I think GCC's -Wfloat-equal is more reasonible than Clang's
-Wliteral-range really. The reason is because even if something can be
represented exactly in floating point (e.g. 3.0 or even 0.0), you could in
theory still get a few precision mismatch due to FMA or some other slight
differences in HW implementation.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/105278] -Wliteral-range vs -Wfloat-equal
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
` (4 preceding siblings ...)
2022-11-16 22:52 ` pinskia at gcc dot gnu.org
@ 2022-11-16 22:54 ` pinskia at gcc dot gnu.org
2022-11-17 13:33 ` egallager at gcc dot gnu.org
2022-11-17 18:40 ` pinskia at gcc dot gnu.org
7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-16 22:54 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|no warning for precise |-Wliteral-range vs
|literals compared with |-Wfloat-equal
|floats |
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I don't think clang implements -Wfloat-equal at all, at least they didn't at
the last time I looked a few years back.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/105278] -Wliteral-range vs -Wfloat-equal
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
` (5 preceding siblings ...)
2022-11-16 22:54 ` [Bug c++/105278] -Wliteral-range vs -Wfloat-equal pinskia at gcc dot gnu.org
@ 2022-11-17 13:33 ` egallager at gcc dot gnu.org
2022-11-17 18:40 ` pinskia at gcc dot gnu.org
7 siblings, 0 replies; 9+ messages in thread
From: egallager at gcc dot gnu.org @ 2022-11-17 13:33 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
--- Comment #7 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #6)
> I don't think clang implements -Wfloat-equal at all, at least they didn't at
> the last time I looked a few years back.
I just checked their diagnostics reference page and it says that they do:
https://clang.llvm.org/docs/DiagnosticsReference.html#wfloat-equal
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/105278] -Wliteral-range vs -Wfloat-equal
2022-04-14 15:41 [Bug c++/105278] New: no warning for precise literals compared with floats dcb314 at hotmail dot com
` (6 preceding siblings ...)
2022-11-17 13:33 ` egallager at gcc dot gnu.org
@ 2022-11-17 18:40 ` pinskia at gcc dot gnu.org
7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-17 18:40 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105278
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So clang emits one or the other warning for the code but not both.
You can defect the warning in clang by doing:
```
extern void g( int);
void f(float a)
{
double b = a;
if (b == 0.1234)
g( 1);
}
```
LLVM actually opimizes away the comparison while GCC does not.
^ permalink raw reply [flat|nested] 9+ messages in thread