diff options
Diffstat (limited to 'clang/lib/Sema/AnalysisBasedWarnings.cpp')
| -rw-r--r-- | clang/lib/Sema/AnalysisBasedWarnings.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index 37d966a5a046..589869d01865 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -1843,6 +1843,14 @@ class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler { : getNotes(); } + OptionalNotes makeManagedMismatchNoteForParam(SourceLocation DeclLoc) { + return DeclLoc.isValid() + ? getNotes(PartialDiagnosticAt( + DeclLoc, + S.PDiag(diag::note_managed_mismatch_here_for_param))) + : getNotes(); + } + public: ThreadSafetyReporter(Sema &S, SourceLocation FL, SourceLocation FEL) : S(S), FunLocation(FL), FunEndLocation(FEL), @@ -1863,6 +1871,38 @@ class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler { } } + void handleUnmatchedUnderlyingMutexes(SourceLocation Loc, SourceLocation DLoc, + Name scopeName, StringRef Kind, + Name expected, Name actual) override { + PartialDiagnosticAt Warning(Loc, + S.PDiag(diag::warn_unmatched_underlying_mutexes) + << Kind << scopeName << expected << actual); + Warnings.emplace_back(std::move(Warning), + makeManagedMismatchNoteForParam(DLoc)); + } + + void handleExpectMoreUnderlyingMutexes(SourceLocation Loc, + SourceLocation DLoc, Name scopeName, + StringRef Kind, + Name expected) override { + PartialDiagnosticAt Warning( + Loc, S.PDiag(diag::warn_expect_more_underlying_mutexes) + << Kind << scopeName << expected); + Warnings.emplace_back(std::move(Warning), + makeManagedMismatchNoteForParam(DLoc)); + } + + void handleExpectFewerUnderlyingMutexes(SourceLocation Loc, + SourceLocation DLoc, Name scopeName, + StringRef Kind, + Name actual) override { + PartialDiagnosticAt Warning( + Loc, S.PDiag(diag::warn_expect_fewer_underlying_mutexes) + << Kind << scopeName << actual); + Warnings.emplace_back(std::move(Warning), + makeManagedMismatchNoteForParam(DLoc)); + } + void handleInvalidLockExp(SourceLocation Loc) override { PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_cannot_resolve_lock) << Loc); |
