This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug sanitizer/81281] New: UBSAN: false positive, dropped promotion to long type.
- From: "babokin at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 02 Jul 2017 20:36:52 +0000
- Subject: [Bug sanitizer/81281] New: UBSAN: false positive, dropped promotion to long type.
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81281
Bug ID: 81281
Summary: UBSAN: false positive, dropped promotion to long type.
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: sanitizer
Assignee: unassigned at gcc dot gnu.org
Reporter: babokin at gmail dot com
CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at gcc dot gnu.org
Target Milestone: ---
gcc x86_64, rev249877.
Looks like this one is deferent from other currently open ubsan bugs.
Promotion to long was dropped, so -2024172551 - (long)ci overflows. Also note,
that removing const modifier from ci definition hides the problem.
> cat f_init.cpp
extern const int ci = 1716607962;
int i = -943738830;
long long ll = -43165919987465092LL;
> cat f.cpp
extern const int ci;
extern int i;
extern long long ll;
int foo() {
int a = int(-2024172551 - i - (ci - ll)) -
(int(-2024172551 - i - (ci - ll)) -
int(-2024172551 - (long)ci));
return a;
}
int main() {
foo();
return 0;
}
> g++ -fsanitize=undefined -O0 f.cpp f_init.cpp -o out
> ./out
f.cpp:6:7: runtime error: signed integer overflow: -2024172551 - 1716607962
cannot be represented in type 'int'