summaryrefslogtreecommitdiff
path: root/clang/lib/Sema/AnalysisBasedWarnings.cpp
diff options
context:
space:
mode:
authorMichael Kruse <llvm-project@meinersbur.de>2025-01-03 10:22:51 +0100
committerMichael Kruse <llvm-project@meinersbur.de>2025-01-03 10:22:51 +0100
commit38500d63e14ce340236840f60d356cdefb56a52c (patch)
tree17edbec446ce9b50d2f215a483b83afb293a635d /clang/lib/Sema/AnalysisBasedWarnings.cpp
parent1a3d5daaef7a6a63448a497da3eff7fc9e23df26 (diff)
parent27f30029741ecf023baece7b3dde1ff9011ffefc (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.cpp40
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);