[clang] Control analysis-based diagnostics with #pragma (PR #136323)

via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 18 10:36:45 PDT 2025


================
@@ -2493,35 +2493,44 @@ class sema::AnalysisBasedWarnings::InterProceduralData {
   CalledOnceInterProceduralData CalledOnceData;
 };
 
-static unsigned isEnabled(DiagnosticsEngine &D, unsigned diag) {
-  return (unsigned)!D.isIgnored(diag, SourceLocation());
+static bool isEnabledImpl(DiagnosticsEngine &D, SourceLocation Loc,
+                          unsigned Diag) {
+  return !D.isIgnored(Diag, Loc);
 }
 
+template <typename... Ts>
+static bool isEnabled(DiagnosticsEngine &D, SourceLocation Loc, Ts... Diags) {
+  return (isEnabledImpl(D, Loc, Diags) || ...);
+};
+
 sema::AnalysisBasedWarnings::AnalysisBasedWarnings(Sema &s)
     : S(s), IPData(std::make_unique<InterProceduralData>()),
       NumFunctionsAnalyzed(0), NumFunctionsWithBadCFGs(0), NumCFGBlocks(0),
       MaxCFGBlocksPerFunction(0), NumUninitAnalysisFunctions(0),
       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);
+  P.enableCheckUnreachable =
+      isEnabled(D, Loc, warn_unreachable, warn_unreachable_break,
+                warn_unreachable_return, warn_unreachable_loop_increment);
----------------
cor3ntin wrote:

no `diag::` namespace?

https://github.com/llvm/llvm-project/pull/136323


More information about the cfe-commits mailing list