<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 30.03.2013 4:59, Jordan Rose wrote:<br>
    </div>
    <blockquote
      cite="mid:33478C08-4DC3-4FCB-A51C-8C45EBBC8560@apple.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <br>
      <div>
        <div>On Mar 29, 2013, at 17:50 , Anton Yartsev <<a
            moz-do-not-send="true" href="mailto:anton.yartsev@gmail.com">anton.yartsev@gmail.com</a>>
          wrote:</div>
        <br class="Apple-interchange-newline">
        <blockquote type="cite"><span style="font-family: Menlo-Regular;
            font-size: 11px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+//----- Test free
            standard new</span><br style="font-family: Menlo-Regular;
            font-size: 11px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+void testFreeOpNew() {</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+  void *p = operator
            new(0);</span><br style="font-family: Menlo-Regular;
            font-size: 11px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+  free(p);</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+} //
            expected-warning{{Memory is never released; potential leak}}</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+// FIXME: Pointer should
            escape</span><br style="font-family: Menlo-Regular;
            font-size: 11px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+void testFreeNewExpr() {</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+  int *p = new int;</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+  free(p);</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+} //
            expected-warning{{Memory is never released; potential leak}}</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+// FIXME: Pointer should
            escape</span><br style="font-family: Menlo-Regular;
            font-size: 11px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+void testObjcFreeNewed()
            {</span><br style="font-family: Menlo-Regular; font-size:
            11px; font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+  int *p = new int;</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+  NSData *nsdata =
            [NSData dataWithBytesNoCopy:p length:sizeof(int)
            freeWhenDone:1]; // expected-warning{{Memory is never
            released; potential leak}}</span><br style="font-family:
            Menlo-Regular; font-size: 11px; font-style: normal;
            font-variant: normal; font-weight: normal; letter-spacing:
            normal; line-height: normal; orphans: auto; text-align:
            start; text-indent: 0px; text-transform: none; white-space:
            normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+}</span><br
            style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
          <span style="font-family: Menlo-Regular; font-size: 11px;
            font-style: normal; font-variant: normal; font-weight:
            normal; letter-spacing: normal; line-height: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
            none; display: inline !important;">+// FIXME: Pointer should
            escape</span><br style="font-family: Menlo-Regular;
            font-size: 11px; font-style: normal; font-variant: normal;
            font-weight: normal; letter-spacing: normal; line-height:
            normal; orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;">
        </blockquote>
      </div>
      <br>
      <div>These don't escape because we assume arbitrary system
        functions don't free memory. I think these are fine when
        unix.Malloc is disabled.</div>
    </blockquote>
    Now, when allocation families got in, I would like to propose to
    split doesNotFreeMemOrInteresting() into two: doesNotFreeMem() and
    isInteresting() or something similar.<br>
    <br>
    doesNotFreeMem() should return "true" for a given call if it is
    known not to free memory, and "false" otherwise.<br>
    <br>
    For a known deallocation function isInteresting() should return
    "true", if a deallocation function is of the same family, as
    allocation one, and "false" otherwise. It also may contain any
    additional logic for non-deallocation functions if required.<br>
    <br>
    With this logic the cases will be considered as pointer escape that
    is symmetrical to the reverse case, when malloced memory is deleted
    (assume NewDelete id ON and UnixMalloc is OFF):<br>
    void testDeleteMalloced() {<br>
      int *p = (int *)malloc(sizeof(int)); // do not add RefState to p<br>
      delete p; // keep silent<br>
    } <br>
    <br>
    One more argument: that cases should be the subject of
    unix.MismatchedDeallocator - the memory <i>is</i> deallocated, but
    the deallocator do not match the allocator.<br>
    <br>
    What do you think?<br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Anton</pre>
  </body>
</html>