[cfe-dev] UBSan false positive (?) with virtual inheritance

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Fri Jan 31 09:54:48 PST 2020


This looks like a bug to me; it looks like we're checking for the size of
an A being available, but should only be checking for the nvsize since we
don't know we have an object whose most-derived type is A.

On Thu, 30 Jan 2020, 23:45 Alexey Sidorin via cfe-dev, <
cfe-dev at lists.llvm.org> wrote:

> Hello everyone,
>
> The code example below triggers an undefined behavior sanitizer warning
> when compiled with -O1 and higher:
>
>      1  struct Aux {
>      2    virtual ~Aux() = default;
>      3    int i = 0;
>      4  };
>      5
>      6  struct Base {
>      7    virtual ~Base() = default;
>      8  };
>      9
>     10  struct A : public virtual Base, public Aux {};
>     11
>     12  struct B final : public virtual A {};
>     13
>     14  void check(const A &a) {}
>     15
>     16  int main() {
>     17    B b;
>     18    check(b); // UBSan warns here
>     19    return 0;
>     20  }
>
> When compiled with -fsanitize=undefined:
>
> example.cpp:18:9: runtime error: reference binding to address
> 0x7ffe652149c8 with insufficient space for an object of type 'const A'
>
> When compiled with -fsanitize=object-size:
> example.cpp:12:8: runtime error: constructor call on address
> 0x7ffc7988a2e0 with insufficient space for an object of type 'A'
>
> example.cpp:18:9: runtime error: reference binding to address
> 0x7ffc7988a2e0 with insufficient space for an object of type 'const A'
>
> Could someone tell if it is a sanitizer false positive or does this case
> actually contains a kind of UB? GCC doesn't give any warning for this code.
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20200131/febffbfc/attachment.html>


More information about the cfe-dev mailing list