diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-02-03 03:30:07 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-02-03 03:30:07 +0000 |
commit | 815b29d7c913c5c24068b98c85bb1ca202006f29 (patch) | |
tree | 4bc11c95302accfc2d3d5ae85e873ba10e46a9b6 /clang/test/SemaCXX/warn-thread-safety-analysis.cpp | |
parent | b62bb8cedc9452886b8e64e8a39f3d0e34d6975e (diff) | |
download | bcm5719-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.cpp | 21 |
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() { } }; - |