summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/AnalysisBasedWarnings.cpp
diff options
context:
space:
mode:
authorDeLesley Hutchins <delesley@google.com>2015-02-03 22:11:04 +0000
committerDeLesley Hutchins <delesley@google.com>2015-02-03 22:11:04 +0000
commitab1dc2d54db5fc2ad4ee748745420eac844a5ea3 (patch)
tree899c05ac07727ebfe508a90dc6411a261d418633 /clang/lib/Sema/AnalysisBasedWarnings.cpp
parente4101e2c9e15f3f6e6a5bbb80acc65021b476886 (diff)
downloadbcm5719-llvm-ab1dc2d54db5fc2ad4ee748745420eac844a5ea3.tar.gz
bcm5719-llvm-ab1dc2d54db5fc2ad4ee748745420eac844a5ea3.zip
Thread Safety Analysis: add support for before/after annotations on mutexes.
These checks detect potential deadlocks caused by inconsistent lock ordering. The checks are implemented under the -Wthread-safety-beta flag. This patch also replaces calls to getAttrs() with calls to attrs() throughout ThreadSafety.cpp, which fixes the earlier issue that cause assert failures. llvm-svn: 228051
Diffstat (limited to 'clang/lib/Sema/AnalysisBasedWarnings.cpp')
-rw-r--r--clang/lib/Sema/AnalysisBasedWarnings.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp
index f666a9b4638..da044d0ec24 100644
--- a/clang/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp
@@ -1679,6 +1679,22 @@ class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {
Warnings.push_back(DelayedDiag(Warning, getNotes()));
}
+
+ virtual void handleLockAcquiredBefore(StringRef Kind, Name L1Name,
+ Name L2Name, SourceLocation Loc)
+ override {
+ PartialDiagnosticAt Warning(Loc,
+ S.PDiag(diag::warn_acquired_before) << Kind << L1Name << L2Name);
+ Warnings.push_back(DelayedDiag(Warning, getNotes()));
+ }
+
+ virtual void handleBeforeAfterCycle(Name L1Name, SourceLocation Loc)
+ override {
+ PartialDiagnosticAt Warning(Loc,
+ S.PDiag(diag::warn_acquired_before_after_cycle) << L1Name);
+ Warnings.push_back(DelayedDiag(Warning, getNotes()));
+ }
+
void enterFunction(const FunctionDecl* FD) override {
CurrentFunction = FD;
}
@@ -1704,7 +1720,7 @@ class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {
DiagList Warnings;
public:
-
+
ConsumedWarningsHandler(Sema &S) : S(S) {}
void emitDiagnostics() override {
@@ -1981,7 +1997,8 @@ AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P,
if (!Diags.isIgnored(diag::warn_thread_safety_verbose, D->getLocStart()))
Reporter.setVerbose(true);
- threadSafety::runThreadSafetyAnalysis(AC, Reporter);
+ threadSafety::runThreadSafetyAnalysis(AC, Reporter,
+ &S.ThreadSafetyDeclCache);
Reporter.emitDiagnostics();
}
OpenPOWER on IntegriCloud