[cfe-dev] UBSan false positive (?) with virtual inheritance
Richard Smith via cfe-dev
cfe-dev at lists.llvm.org
Fri Jan 31 19:09:09 PST 2020
... and in fact we also generate wrong code for this example with the
sanitizers disabled -- we mark the reference parameter as
dereferenceable(sizeof(A)) rather than dereferenceable(nvsize(A)). Oops!
Fixed in master.
On Fri, 31 Jan 2020 at 09:54, Richard Smith <richard at metafoo.co.uk> wrote:
> 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/25d489a1/attachment.html>
More information about the cfe-dev
mailing list