<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Static analyzer is very conservative with atomic ops"
   href="https://bugs.llvm.org/show_bug.cgi?id=34365">34365</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Static analyzer is very conservative with atomic ops
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Static Analyzer
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>kremenek@apple.com
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>george.burgess.iv@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>$ cat tc.cpp
void bar() {
  int i = 2;
  char *c = new char;
  if (__sync_fetch_and_sub(&i, 1) == 1) delete c;
  if (__sync_fetch_and_sub(&i, 1) == 1) delete c;
}

$ clang++ --analyze tc.cpp -std=c++11
tc.cpp:5:41: warning: Attempt to free released memory
  if (__sync_fetch_and_sub(&i, 1) == 1) delete c;
                                        ^~~~~~~~
tc.cpp:6:1: warning: Potential leak of memory pointed to by 'c'
}
^

I'm unsure if it's possible to do much better than this in general, since
atomic ops are inherently annoying to reason about. That said, this issue makes
the analyzer pretty noisy when it's analyzing home-grown shared_ptr
implementations.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>