<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Aug 5, 2015 at 1:07 PM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm fine with merging this if Richard agrees.<br>
<br>
Richard, what say you?</blockquote><div><br></div><div>Sorry I missed this. Yes, this looks fine to me.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888"><br>
 - Hans<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Wed, Aug 5, 2015 at 12:52 PM, Alexey Samsonov <<a href="mailto:vonosmas@gmail.com">vonosmas@gmail.com</a>> wrote:<br>
> +Hans, Richard<br>
><br>
> Is it too late to merge this into 3.7rc2? This patch should be relatively<br>
> safe, and fixes a bug that was reported looong time ago.<br>
><br>
> On Wed, Aug 5, 2015 at 12:35 PM, Alexey Samsonov <<a href="mailto:vonosmas@gmail.com">vonosmas@gmail.com</a>> wrote:<br>
>><br>
>> Author: samsonov<br>
>> Date: Wed Aug  5 14:35:46 2015<br>
>> New Revision: 244101<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=244101&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=244101&view=rev</a><br>
>> Log:<br>
>> [UBSan] Fix UBSan-vptr false positive.<br>
>><br>
>> Offset from vptr to the start of most-derived object can actually<br>
>> be positive in some virtual base class vtables.<br>
>><br>
>> Patch by Stephan Bergmann!<br>
>><br>
>> Added:<br>
>><br>
>> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp<br>
>> Modified:<br>
>>     compiler-rt/trunk/lib/ubsan/ubsan_type_hash_itanium.cc<br>
>><br>
>> Modified: compiler-rt/trunk/lib/ubsan/ubsan_type_hash_itanium.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_type_hash_itanium.cc?rev=244101&r1=244100&r2=244101&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_type_hash_itanium.cc?rev=244101&r1=244100&r2=244101&view=diff</a><br>
>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/ubsan/ubsan_type_hash_itanium.cc (original)<br>
>> +++ compiler-rt/trunk/lib/ubsan/ubsan_type_hash_itanium.cc Wed Aug  5<br>
>> 14:35:46 2015<br>
>> @@ -185,8 +185,8 @@ namespace {<br>
>><br>
>>  struct VtablePrefix {<br>
>>    /// The offset from the vptr to the start of the most-derived object.<br>
>> -  /// This should never be greater than zero, and will usually be exactly<br>
>> -  /// zero.<br>
>> +  /// This will only be greater than zero in some virtual base class<br>
>> vtables<br>
>> +  /// used during object con-/destruction, and will usually be exactly<br>
>> zero.<br>
>>    sptr Offset;<br>
>>    /// The type_info object describing the most-derived class type.<br>
>>    std::type_info *TypeInfo;<br>
>> @@ -196,7 +196,7 @@ VtablePrefix *getVtablePrefix(void *Vtab<br>
>>    if (!Vptr)<br>
>>      return 0;<br>
>>    VtablePrefix *Prefix = Vptr - 1;<br>
>> -  if (Prefix->Offset > 0 || !Prefix->TypeInfo)<br>
>> +  if (!Prefix->TypeInfo)<br>
>>      // This can't possibly be a valid vtable.<br>
>>      return 0;<br>
>>    return Prefix;<br>
>><br>
>> Added:<br>
>> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp?rev=244101&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp?rev=244101&view=auto</a><br>
>><br>
>> ==============================================================================<br>
>> ---<br>
>> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp<br>
>> (added)<br>
>> +++<br>
>> compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/vptr-virtual-base-construction.cpp<br>
>> Wed Aug  5 14:35:46 2015<br>
>> @@ -0,0 +1,13 @@<br>
>> +// RUN: %clangxx -frtti -fsanitize=vptr -fno-sanitize-recover=vptr %s -o<br>
>> %t<br>
>> +// RUN: %run %t<br>
>> +<br>
>> +// REQUIRES: cxxabi<br>
>> +<br>
>> +int volatile n;<br>
>> +<br>
>> +struct A { virtual ~A() {} };<br>
>> +struct B: virtual A {};<br>
>> +struct C: virtual A { ~C() { n = 0; } };<br>
>> +struct D: virtual B, virtual C {};<br>
>> +<br>
>> +int main() { delete new D; }<br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
><br>
><br>
><br>
><br>
> --<br>
> Alexey Samsonov<br>
> <a href="mailto:vonosmas@gmail.com">vonosmas@gmail.com</a><br>
</div></div></blockquote></div><br></div></div>