summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-02-03 03:30:07 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-02-03 03:30:07 +0000
commit815b29d7c913c5c24068b98c85bb1ca202006f29 (patch)
tree4bc11c95302accfc2d3d5ae85e873ba10e46a9b6 /clang/test/SemaCXX/warn-thread-safety-analysis.cpp
parentb62bb8cedc9452886b8e64e8a39f3d0e34d6975e (diff)
downloadbcm5719-llvm-815b29d7c913c5c24068b98c85bb1ca202006f29.tar.gz
bcm5719-llvm-815b29d7c913c5c24068b98c85bb1ca202006f29.zip
Thread safety analysis: at a CFG join point between a block terminating in a
'continue' and another block, prefer the lockset from the other block, and diagnose the 'continue' block as being the end of a loop. llvm-svn: 149666
Diffstat (limited to 'clang/test/SemaCXX/warn-thread-safety-analysis.cpp')
-rw-r--r--clang/test/SemaCXX/warn-thread-safety-analysis.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/clang/test/SemaCXX/warn-thread-safety-analysis.cpp b/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
index dfec94ca91e..634a2334307 100644
--- a/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
+++ b/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
@@ -208,8 +208,7 @@ void sls_fun_bad_6() {
}
void sls_fun_bad_7() {
- sls_mu.Lock(); // \
- // expected-warning{{expecting mutex 'sls_mu' to be locked at start of each loop}}
+ sls_mu.Lock();
while (getBool()) {
sls_mu.Unlock();
if (getBool()) {
@@ -218,7 +217,7 @@ void sls_fun_bad_7() {
}
}
sls_mu.Lock(); // \
- // expected-warning{{mutex 'sls_mu' is still locked at the end of its scope}}
+ // expected-warning{{expecting mutex 'sls_mu' to be locked at start of each loop}}
}
sls_mu.Unlock();
}
@@ -257,6 +256,21 @@ void sls_fun_bad_11() {
// expected-warning{{unlocking 'sls_mu' that was not locked}}
}
+void sls_fun_bad_12() {
+ sls_mu.Lock(); // \
+ // expected-warning{{mutex 'sls_mu' is still locked at the end of its scope}}
+ while (getBool()) {
+ sls_mu.Unlock();
+ if (getBool()) {
+ if (getBool()) {
+ break;
+ }
+ }
+ sls_mu.Lock();
+ }
+ sls_mu.Unlock();
+}
+
//-----------------------------------------//
// Handling lock expressions in attribute args
// -------------------------------------------//
@@ -1900,4 +1914,3 @@ void test() {
}
};
-
OpenPOWER on IntegriCloud