[Bug c++/92539] New: [8/9/10 Regression] -Warray-bounds false positive (loop unroll?)
nok.raven at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Nov 15 23:46:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92539
Bug ID: 92539
Summary: [8/9/10 Regression] -Warray-bounds false positive
(loop unroll?)
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nok.raven at gmail dot com
Target Milestone: ---
static bool
ischar(int ch)
{
return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) != 0;
}
static bool eat(char const*& first, char const* last)
{
if (first != last && ischar(*first)) {
++first;
return true;
}
return false;
}
static bool eat_two(char const*& first, char const* last)
{
auto save = first;
if (eat(first, last) && eat(first, last))
return true;
first = save;
return false;
}
static bool foo(char const*& first, char const* last)
{
auto local_iterator = first;
int i = 0;
for (; i < 3; ++i)
if (!eat_two(local_iterator, last))
return false;
first = local_iterator;
return true;
}
static bool test(char const* in, bool full_match = true)
{
auto last = in;
while (*last)
++last;
return foo(in, last) && (!full_match || (in == last));
}
int main()
{
return test("aa");
}
$ g++ -std=c++17 -O3 -Wall
<source>: In function 'int main()':
<source>:9:23: warning: array subscript 4 is outside array bounds of 'const
char [3]' [-Warray-bounds]
9 | if (first != last && ischar(*first)) {
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
<source>:9:23: warning: array subscript 5 is outside array bounds of 'const
char [3]' [-Warray-bounds]
9 | if (first != last && ischar(*first)) {
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
<source>:41:42: warning: array subscript 6 is outside array bounds of 'const
char [3]' [-Warray-bounds]
41 | return foo(in, last) && (!full_match || (in == last));
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
https://godbolt.org/z/86XVfe
The code is reduced Spirit.X3 test.
The -fsanitize=address and -fsanitize=undefined do not show any errors.
More information about the Gcc-bugs
mailing list