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

            Bug ID: 120345
           Summary: array subscript is partly outside array bounds
           Product: gcc
           Version: 12.5.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: orgads at gmail dot com
  Target Milestone: ---

This is the most minimal repro I could create:

struct List {
    void *f1 = nullptr;
    void *f2 = nullptr;
};

class Base {
public:
    virtual ~Base() {}
    virtual void foo() = 0;
};

class Derived1 : public Base {
    char buf[10];

public:
    Derived1() {}
    ~Derived1() override {}
    void foo() override;
};

class Derived2 : public Base {
public:
    Derived2();
    ~Derived2();
    void foo() override;
};

void test()
{
    Base *update = new Derived2();
    List list;
    delete update;
}

When compiling with -fcheck-new -Wall -O2, the following error is shown:

In destructor 'virtual Derived1::~Derived1()',
    inlined from 'virtual Derived1::~Derived1()' at <source>:17:24,
    inlined from 'void test()' at <source>:32:9:
<source>:17:31: warning: array subscript 'Derived1::__as_base [0]' is partly
outside array bounds of 'unsigned char [8]' [-Warray-bounds=]
   17 |         ~Derived1() override {}
      |                               ^
<source>: In function 'void test()':
<source>:30:37: note: object of size 8 allocated by 'operator new'
   30 |         Base *update = new Derived2();
      |

This looks similar to bug 106247 and some others.

Godbolt link: https://godbolt.org/z/Pa8xh5T5n

Reply via email to