diff options
author | David Malcolm <dmalcolm@redhat.com> | 2024-04-10 16:43:30 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2024-04-10 16:43:30 -0400 |
commit | 4a94551d7eaaf7a75c5195fc0bf4af94185a04c7 (patch) | |
tree | c717cac5e8d2d4c3a022d1390ffd2b48fdcb379b /gcc/testsuite/c-c++-common/analyzer | |
parent | 107b0e63be023c11017aa53625a6557950df4d99 (diff) | |
download | gcc-4a94551d7eaaf7a75c5195fc0bf4af94185a04c7.zip gcc-4a94551d7eaaf7a75c5195fc0bf4af94185a04c7.tar.gz gcc-4a94551d7eaaf7a75c5195fc0bf4af94185a04c7.tar.bz2 |
analyzer: fix ICE on negative values for size_t [PR114472]
I made several attempts to fix this properly, but for now apply
a band-aid to at least prevent crashing on such cases.
gcc/analyzer/ChangeLog:
PR analyzer/114472
* access-diagram.cc (bit_size_expr::maybe_get_formatted_str):
Reject attempts to print sizes that are too large.
* region.cc (region_offset::calc_symbolic_bit_offset): Use a
typeless svalue for the bit offset.
* store.cc (bit_range::intersects_p): Replace assertion with
test.
(bit_range::exceeds_p): Likewise.
(bit_range::falls_short_of_p): Likewise.
gcc/testsuite/ChangeLog:
* c-c++-common/analyzer/out-of-bounds-pr114472.c: New test.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Diffstat (limited to 'gcc/testsuite/c-c++-common/analyzer')
-rw-r--r-- | gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c new file mode 100644 index 0000000..ef9e771 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c @@ -0,0 +1,17 @@ +/* Verify we don't ICE on cases involving very large values for size. */ + +char s, d; + +void +foo(void) +{ + __builtin_strncpy(&d, &s + 3, -1); /* { dg-warning "Wstringop-overflow" } */ + __builtin_strncpy(&d + 3, &s, -1); /* { dg-warning "Wstringop-overflow" } */ +} + +void +bar(void) +{ + __builtin_strncpy(&d, &s - 3, -1); /* { dg-warning "Wstringop-overflow" } */ + __builtin_strncpy(&d - 3, &s, -1); /* { dg-warning "Wstringop-overflow" } */ +} |