public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/103531] New: Prpose compiler warning when ceil functions used on integral value
@ 2021-12-02 13:51 eyalroz1 at gmx dot com
2021-12-02 14:06 ` [Bug c/103531] " rguenth at gcc dot gnu.org
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: eyalroz1 at gmx dot com @ 2021-12-02 13:51 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103531
Bug ID: 103531
Summary: Prpose compiler warning when ceil functions used on
integral value
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: eyalroz1 at gmx dot com
Target Milestone: ---
The ceil functions (ceil() and ceilf() in C) take floating-point arguments:
double or float.
If the programmer passes an integer value to one of these functions, it'll get
converted to float/double, and the function will be idempotent. It is thus
typically useless to do so, but also harmless in itself.
But this is _not_ harmless when the programmer assumes they are running ceil()
on what they believe is a floating-point value, but actually isn't. A "typical"
example:
forgot_whether_this_type_is_integral_t x = get_x();
int covers_half = ceil(x / 2);
If x is a floating-point value, this codes will act as expected; but if it's
integral, it will actually place the _floor_ of x / 2.0 in covers_half.
I propose, therefore, that invoking ceil()/ceilf() on an integral value trigger
a warning. Alternatively, that some more complicated conditions trigger the
warning, e.g. invoking ceil() on the result of an integer division or integer
multiplication.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c/103531] Prpose compiler warning when ceil functions used on integral value
2021-12-02 13:51 [Bug c/103531] New: Prpose compiler warning when ceil functions used on integral value eyalroz1 at gmx dot com
@ 2021-12-02 14:06 ` rguenth at gcc dot gnu.org
2021-12-02 19:50 ` [Bug c/103531] Propose compiler warning when ceil/ceilf " eyalroz1 at gmx dot com
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-12-02 14:06 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103531
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |enhancement
Ever confirmed|0 |1
Keywords| |diagnostic
Status|UNCONFIRMED |NEW
Last reconfirmed| |2021-12-02
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed. Also applies to the C++ frontend.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c/103531] Propose compiler warning when ceil/ceilf used on integral value
2021-12-02 13:51 [Bug c/103531] New: Prpose compiler warning when ceil functions used on integral value eyalroz1 at gmx dot com
2021-12-02 14:06 ` [Bug c/103531] " rguenth at gcc dot gnu.org
@ 2021-12-02 19:50 ` eyalroz1 at gmx dot com
2021-12-03 4:03 ` egallager at gcc dot gnu.org
2021-12-03 7:37 ` eyalroz1 at gmx dot com
3 siblings, 0 replies; 5+ messages in thread
From: eyalroz1 at gmx dot com @ 2021-12-02 19:50 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103531
Eyal Rozenberg <eyalroz1 at gmx dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Prpose compiler warning |Propose compiler warning
|when ceil functions used on |when ceil/ceilf used on
|integral value |integral value
--- Comment #2 from Eyal Rozenberg <eyalroz1 at gmx dot com> ---
This also applies to C++, although in C++ you might be doing this in a
templated context, e.g.
T x = get_x();
auto y = ceil(x);
which is fine for floating-point T's and fishy for integral T's.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c/103531] Propose compiler warning when ceil/ceilf used on integral value
2021-12-02 13:51 [Bug c/103531] New: Prpose compiler warning when ceil functions used on integral value eyalroz1 at gmx dot com
2021-12-02 14:06 ` [Bug c/103531] " rguenth at gcc dot gnu.org
2021-12-02 19:50 ` [Bug c/103531] Propose compiler warning when ceil/ceilf " eyalroz1 at gmx dot com
@ 2021-12-03 4:03 ` egallager at gcc dot gnu.org
2021-12-03 7:37 ` eyalroz1 at gmx dot com
3 siblings, 0 replies; 5+ messages in thread
From: egallager at gcc dot gnu.org @ 2021-12-03 4:03 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103531
Eric Gallager <egallager at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |egallager at gcc dot gnu.org
Blocks| |87403
--- Comment #3 from Eric Gallager <egallager at gcc dot gnu.org> ---
-Wtraditional-conversion catches this:
$ /usr/local/bin/gcc -c -Wall -Wextra -pedantic -Wconversion -Wdouble-promotion
-Wtraditional-conversion 103531.c
103531.c: In function 'foo':
103531.c:5:30: warning: passing argument 1 of 'ceil' as floating rather than
integer due to prototype [-Wtraditional-conversion]
5 | int covers_half = ceil(x / 2);
| ~~^~~
103531.c:5:23: warning: conversion from 'double' to 'int' may change value
[-Wfloat-conversion]
5 | int covers_half = ceil(x / 2);
| ^~~~
$
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87403
[Bug 87403] [Meta-bug] Issues that suggest a new warning
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c/103531] Propose compiler warning when ceil/ceilf used on integral value
2021-12-02 13:51 [Bug c/103531] New: Prpose compiler warning when ceil functions used on integral value eyalroz1 at gmx dot com
` (2 preceding siblings ...)
2021-12-03 4:03 ` egallager at gcc dot gnu.org
@ 2021-12-03 7:37 ` eyalroz1 at gmx dot com
3 siblings, 0 replies; 5+ messages in thread
From: eyalroz1 at gmx dot com @ 2021-12-03 7:37 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103531
--- Comment #4 from Eyal Rozenberg <eyalroz1 at gmx dot com> ---
(In reply to Eric Gallager from comment #3)
> -Wtraditional-conversion catches this:
Well... you're technically right, but:
1. That is a much wider warning. If someone were to turn this on they would get
a gazillion warnings which would drown out this one.
2. (Weak point) Few people would consider turning this on given the
description.
3. This doesn't work for C++.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-12-03 7:37 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-02 13:51 [Bug c/103531] New: Prpose compiler warning when ceil functions used on integral value eyalroz1 at gmx dot com
2021-12-02 14:06 ` [Bug c/103531] " rguenth at gcc dot gnu.org
2021-12-02 19:50 ` [Bug c/103531] Propose compiler warning when ceil/ceilf " eyalroz1 at gmx dot com
2021-12-03 4:03 ` egallager at gcc dot gnu.org
2021-12-03 7:37 ` eyalroz1 at gmx dot com
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).