<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Nov 13, 2017 at 11:10 PM, Stephan Bergmann via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 11/14/2017 12:41 AM, Kostya Serebryany wrote:<span class=""><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, Nov 13, 2017 at 7:55 AM, Stephan Bergmann via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a> <mailto:<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><wbr>>> wrote:<br>
<br>
    For a C++ program like<br>
<br>
        #include <new><br>
        int main() {<br>
             char * p1 = new char[sizeof (int)];<br>
             int * p2 = new(p1) int;<br>
             delete p2;<br>
        }<br>
<br>
<br>
    compiling it with -fsanitize=address will somewhat unhelpfully<br>
    report an "AddressSanitizer: alloc-dealloc-mismatch (operator new []<br>
    vs operator delete)" failure.<br>
<br>
    Is there a good way to work around that<br>
<br>
Why not use "delete [] p1"?<br>
</blockquote>
<br></span>
Because in the real program, p2 is then passed off to some API that takes ownership, and internally calls delete.  And both real and fake int* are handed off to that API, and I don't even control that API's implementation, so it can't be changed to a delete[] of the char array there.  Also, the real program uses a class type with non-trivial destructor instead of int.  (I probably should have been more careful when crafting this stripped-down example.)<br>
<br>
(But the more I think about it, the less I'm sure the code is even legal...)<div class="HOEnZb"><div class="h5"><br></div></div></blockquote><div><br></div><div>It's not legal.  This is not an AddressSanitizer false positive.  The form and type of the allocation must match the deallocation.</div><div><br></div><div>-- James</div></div></div></div>