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

            Bug ID: 101600
           Summary: Spurious -Warray-bounds
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sbergman at redhat dot com
  Target Milestone: ---

With recent GCC 12 trunk (but not with e.g. gcc-c++-11.1.1-3.fc34.x86_64):

> $ cat test.cc
> struct S1 { virtual ~S1(); };
> struct S2 { int m; };
> struct S3 { virtual ~S3(); };
> struct S4: S1, S2, S3 {};
> int f1();
> void f2(S3 *);
> void f3(S2 * p) {
>     for (int i = f1(); f1();) {
>         if (i == 0) {
>             p = nullptr;
>             break;
>         }
>     }
>     f2(static_cast<S4 *>(p));
> }

> $ g++ -c -O2 -Warray-bounds -O2 test.cc
> test.cc: In function ‘void f3(S2*)’:
> test.cc:14:7: warning: array subscript 0 is outside array bounds of ‘S2 
> [2305843009213693951]’ [-Warray-bounds]
>    14 |     f2(static_cast<S4 *>(p));
>       |     ~~^~~~~~~~~~~~~~~~~~~~~~
> test.cc:7:14: note: at offset -8 into object ‘p’ of size [0, 
> 9223372036854775807]
>     7 | void f3(S2 * p) {
>       |         ~~~~~^

Reply via email to