summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
diff options
context:
space:
mode:
authorDeLesley Hutchins <delesley@google.com>2012-09-21 17:57:00 +0000
committerDeLesley Hutchins <delesley@google.com>2012-09-21 17:57:00 +0000
commit10958cae09813a79fb61eea5e11783257ce421e4 (patch)
tree2723add198d5b4571ee31dafcc135dc14e39666b /clang/test/SemaCXX/warn-thread-safety-analysis.cpp
parent61e2f2d6ec593d711a9c7b94fea20afd6bb96ecb (diff)
downloadbcm5719-llvm-10958cae09813a79fb61eea5e11783257ce421e4.tar.gz
bcm5719-llvm-10958cae09813a79fb61eea5e11783257ce421e4.zip
Thread-safety analysis: better handling of unreachable blocks. Fixes a bug
where a call to function marked 'noreturn' is followed by unreachable implicit destructor calls. llvm-svn: 164394
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, 15 insertions, 6 deletions
diff --git a/clang/test/SemaCXX/warn-thread-safety-analysis.cpp b/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
index fa8786a957f..fd3577c3038 100644
--- a/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
+++ b/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
@@ -64,6 +64,7 @@ void beginNoWarnOnWrites() EXCLUSIVE_LOCK_FUNCTION("*");
void endNoWarnOnWrites() UNLOCK_FUNCTION("*");
+// For testing handling of smart pointers.
template<class T>
class SmartPtr {
public:
@@ -80,6 +81,15 @@ private:
};
+// For testing destructor calls and cleanup.
+class MyString {
+public:
+ MyString(const char* s);
+ ~MyString();
+};
+
+
+
Mutex sls_mu;
Mutex sls_mu2 __attribute__((acquired_after(sls_mu)));
@@ -3250,12 +3260,6 @@ void Base::bar(Inner* i) {
namespace TrylockWithCleanups {
-class MyString {
-public:
- MyString(const char* s);
- ~MyString();
-};
-
struct Foo {
Mutex mu_;
int a GUARDED_BY(mu_);
@@ -3460,6 +3464,7 @@ public:
};
void exitNow() __attribute__((noreturn));
+void exitDestruct(const MyString& ms) __attribute__((noreturn));
Mutex fatalmu_;
@@ -3482,6 +3487,10 @@ void test3() EXCLUSIVE_LOCKS_REQUIRED(fatalmu_) {
}
}
+void test4() EXCLUSIVE_LOCKS_REQUIRED(fatalmu_) {
+ exitDestruct("foo");
+}
+
} // end namespace UnreachableExitTest
OpenPOWER on IntegriCloud