[clang] Control analysis-based diagnostics with #pragma (PR #136323)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 18 11:13:15 PDT 2025
================
@@ -2504,23 +2505,37 @@ sema::AnalysisBasedWarnings::AnalysisBasedWarnings(Sema &s)
NumUninitAnalysisVariables(0), MaxUninitAnalysisVariablesPerFunction(0),
NumUninitAnalysisBlockVisits(0),
MaxUninitAnalysisBlockVisitsPerFunction(0) {
+}
+
+// We need this here for unique_ptr with forward declared class.
+sema::AnalysisBasedWarnings::~AnalysisBasedWarnings() = default;
+sema::AnalysisBasedWarnings::Policy
+sema::AnalysisBasedWarnings::getPolicyInEffectAt(SourceLocation Loc) {
using namespace diag;
DiagnosticsEngine &D = S.getDiagnostics();
+ Policy P;
- DefaultPolicy.enableCheckUnreachable =
- isEnabled(D, warn_unreachable) || isEnabled(D, warn_unreachable_break) ||
- isEnabled(D, warn_unreachable_return) ||
- isEnabled(D, warn_unreachable_loop_increment);
+ // Note: The enabled checks should be kept in sync with the switch in
+ // SemaPPCallbacks::PragmaDiagnostic().
+ P.enableCheckUnreachable =
+ PolicyOverrides.enableCheckUnreachable ||
+ isEnabled(D, Loc, warn_unreachable, warn_unreachable_break,
+ warn_unreachable_return, warn_unreachable_loop_increment);
- DefaultPolicy.enableThreadSafetyAnalysis = isEnabled(D, warn_double_lock);
+ P.enableThreadSafetyAnalysis = PolicyOverrides.enableThreadSafetyAnalysis ||
+ isEnabled(D, Loc, warn_double_lock);
- DefaultPolicy.enableConsumedAnalysis =
- isEnabled(D, warn_use_in_invalid_state);
+ P.enableConsumedAnalysis = PolicyOverrides.enableConsumedAnalysis ||
+ isEnabled(D, Loc, warn_use_in_invalid_state);
+ return P;
}
-// We need this here for unique_ptr with forward declared class.
-sema::AnalysisBasedWarnings::~AnalysisBasedWarnings() = default;
+void sema::AnalysisBasedWarnings::clearOverrides() {
+ PolicyOverrides.enableCheckUnreachable = false;
----------------
AaronBallman wrote:
The overrides are set in `SemaPPCallback::PragmaDiagnostic()`, the others come from `AnalysisBasedWarnings::getPolicyInEffectAt()`
https://github.com/llvm/llvm-project/pull/136323
More information about the cfe-commits
mailing list