https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95334

--- Comment #2 from Haoxin Tu <haoxintu at gmail dot com> ---
I also find these cases

test1.cc
#include <iostream>

bool g_bool = 0;
long g_long = -4075183478711827874L;
const long l_long = 7122990940771016367L;
int main () {
    g_bool = g_long * l_long;
    std::cout << g_bool << std::endl;
    return 0;
}

GCC detects nothing.

$g++ -w -fsanitize=signed-integer-overflow test1.cc
1

But when remove "const"
test2.cc
#include <iostream>

bool g_bool = 0;
long g_long = -4075183478711827874L;
const long l_long = 7122990940771016367L;
int main () {
    g_bool = g_long * l_long;
    std::cout << g_bool << std::endl;
    return 0;
}

GCC can dectect the signed-integer-overflow.

$g++ -w -fsanitize=signed-integer-overflow test2.cc
test2.cc:7:21: runtime error: signed integer overflow: -4075183478711827874 *
7122990940771016367 cannot be represented in type 'long int'
1

Reply via email to