diff options
| author | Michael Kruse <llvm-project@meinersbur.de> | 2025-01-03 10:22:51 +0100 |
|---|---|---|
| committer | Michael Kruse <llvm-project@meinersbur.de> | 2025-01-03 10:22:51 +0100 |
| commit | 38500d63e14ce340236840f60d356cdefb56a52c (patch) | |
| tree | 17edbec446ce9b50d2f215a483b83afb293a635d /clang/lib/Sema/AnalysisBasedWarnings.cpp | |
| parent | 1a3d5daaef7a6a63448a497da3eff7fc9e23df26 (diff) | |
| parent | 27f30029741ecf023baece7b3dde1ff9011ffefc (diff) | |
Merge branch 'main' into users/meinersbur/flang_runtime_split-headersusers/meinersbur/flang_runtime_split-headers
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); |
