<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 - thread safety analysis: attribute acquire_capability on lock function incorrectly causes error"
   href="https://bugs.llvm.org/show_bug.cgi?id=33755">33755</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>thread safety analysis: attribute acquire_capability on lock function incorrectly causes error
          </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>Linux
          </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>danielgb@au1.ibm.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>$ ~/clang/bin/clang -Werror=thread-safety -c ~/clang-tsa-test.c
/home/dan/clang-tsa-test.c:16:1: error: expecting mutex 'that' to be held at
the end of function [-Werror,-Wthread-safety-analysis]
}
^
/home/dan/clang-tsa-test.c:10:5: note: mutex acquired here
int mysql_mutex_lock(
    ^
1 error generated.


$ cat ~/clang-tsa-test.c

#include <pthread.h>

struct st_mysql_mutex
{
  pthread_mutex_t m_mutex;
};

typedef struct st_mysql_mutex __attribute((capability("mutex"))) mysql_mutex_t;

int mysql_mutex_lock(
  mysql_mutex_t *that
  , const char *src_file, unsigned int src_line
  ) __attribute((acquire_capability(*that)))
{
    return pthread_mutex_lock(&that->m_mutex);
}


$ ~/clang/bin/clang --version
clang version 5.0.0 (llvm-clang.git 79a6eca386d468058b31e2d4f54b1b736a12f558)
(llvm.git 31f450353208e4d108fff264a2eba433758a0709)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/dan/clang/bin

Older deprecated attributes also fails:

$ cat ~/clang-tsa-test2.c

#include <pthread.h>

struct st_mysql_mutex
{
  pthread_mutex_t m_mutex;
};

typedef struct st_mysql_mutex __attribute((capability("mutex"))) mysql_mutex_t;

int mysql_mutex_lock(
  mysql_mutex_t *that
  , const char *src_file, unsigned int src_line
  ) __attribute((exclusive_lock_function(*that)))
{
    return pthread_mutex_lock(&that->m_mutex);
}
~/clang/bin/clang -Werror=thread-safety -c ~/clang-tsa-test2.c
/home/dan/clang-tsa-test.c:16:1: error: expecting mutex 'that' to be held at
the end of function [-Werror,-Wthread-safety-analysis]
}
^
/home/dan/clang-tsa-test.c:10:5: note: mutex acquired here
int mysql_mutex_lock(
    ^
1 error generated.</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>