================
@@ -46,330 +44,104 @@ namespace {
 struct PendingWarning {
   SourceLocation ExpiryLoc; // Where the loan expired.
   llvm::PointerUnion<const UseFact *, const OriginEscapesFact *> CausingFact;
-  const Expr *MovedExpr;
-  const Expr *InvalidatedByExpr;
-  bool CausingFactDominatesExpiry;
+  Confidence ConfidenceLevel;
 };
 
-using AnnotationTarget =
-    llvm::PointerUnion<const ParmVarDecl *, const CXXMethodDecl *>;
-using EscapingTarget =
-    llvm::PointerUnion<const Expr *, const FieldDecl *, const VarDecl *>;
-
 class LifetimeChecker {
 private:
   llvm::DenseMap<LoanID, PendingWarning> FinalWarningsMap;
-  llvm::DenseMap<AnnotationTarget, const Expr *> AnnotationWarningsMap;
-  llvm::DenseMap<const ParmVarDecl *, EscapingTarget> NoescapeWarningsMap;
   const LoanPropagationAnalysis &LoanPropagation;
-  const MovedLoansAnalysis &MovedLoans;
   const LiveOriginsAnalysis &LiveOrigins;
-  FactManager &FactMgr;
-  LifetimeSafetySemaHelper *SemaHelper;
-  ASTContext &AST;
-
-  static SourceLocation
-  GetFactLoc(llvm::PointerUnion<const UseFact *, const OriginEscapesFact *> F) 
{
-    if (const auto *UF = F.dyn_cast<const UseFact *>())
-      return UF->getUseExpr()->getExprLoc();
-    if (const auto *OEF = F.dyn_cast<const OriginEscapesFact *>()) {
-      if (auto *ReturnEsc = dyn_cast<ReturnEscapeFact>(OEF))
-        return ReturnEsc->getReturnExpr()->getExprLoc();
-      if (auto *FieldEsc = dyn_cast<FieldEscapeFact>(OEF))
-        return FieldEsc->getFieldDecl()->getLocation();
-    }
-    llvm_unreachable("unhandled causing fact in PointerUnion");
-  }
+  const FactManager &FactMgr;
+  LifetimeSafetyReporter *Reporter;
 
 public:
   LifetimeChecker(const LoanPropagationAnalysis &LoanPropagation,
-                  const MovedLoansAnalysis &MovedLoans,
-                  const LiveOriginsAnalysis &LiveOrigins, FactManager &FM,
-                  AnalysisDeclContext &ADC,
-                  LifetimeSafetySemaHelper *SemaHelper)
-      : LoanPropagation(LoanPropagation), MovedLoans(MovedLoans),
-        LiveOrigins(LiveOrigins), FactMgr(FM), SemaHelper(SemaHelper),
-        AST(ADC.getASTContext()) {
-    for (const CFGBlock *B : *ADC.getAnalysis<PostOrderCFGView>())
+                  const LiveOriginsAnalysis &LiveOrigins, const FactManager 
&FM,
+                  AnalysisDeclContext &ADC, LifetimeSafetyReporter *Reporter)
+      : LoanPropagation(LoanPropagation), LiveOrigins(LiveOrigins), 
FactMgr(FM),
+        Reporter(Reporter) {
+    for (const CFGBlock *B : *ADC.getAnalysis<PostOrderCFGView>()) {
       for (const Fact *F : FactMgr.getFacts(B))
         if (const auto *EF = F->getAs<ExpireFact>())
           checkExpiry(EF);
-        else if (const auto *IOF = F->getAs<InvalidateOriginFact>())
-          checkInvalidation(IOF);
-        else if (const auto *OEF = F->getAs<OriginEscapesFact>())
-          checkAnnotations(OEF);
-    issuePendingWarnings();
-    suggestAnnotations();
-    reportNoescapeViolations();
-    //  Annotation inference is currently guarded by a frontend flag. In the
-    //  future, this might be replaced by a design that differentiates between
-    //  explicit and inferred findings with separate warning groups.
-    if (AST.getLangOpts().EnableLifetimeSafetyInference)
-      inferAnnotations();
-  }
-
-  /// Checks if an escaping origin holds a placeholder loan, indicating a
-  /// missing [[clang::lifetimebound]] annotation or a violation of
-  /// [[clang::noescape]].
-  void checkAnnotations(const OriginEscapesFact *OEF) {
-    OriginID EscapedOID = OEF->getEscapedOriginID();
-    LoanSet EscapedLoans = LoanPropagation.getLoans(EscapedOID, OEF);
-    auto CheckParam = [&](const ParmVarDecl *PVD) {
-      // NoEscape param should not escape.
-      if (PVD->hasAttr<NoEscapeAttr>()) {
-        if (auto *ReturnEsc = dyn_cast<ReturnEscapeFact>(OEF))
-          NoescapeWarningsMap.try_emplace(PVD, ReturnEsc->getReturnExpr());
-        if (auto *FieldEsc = dyn_cast<FieldEscapeFact>(OEF))
-          NoescapeWarningsMap.try_emplace(PVD, FieldEsc->getFieldDecl());
-        if (auto *GlobalEsc = dyn_cast<GlobalEscapeFact>(OEF))
-          NoescapeWarningsMap.try_emplace(PVD, GlobalEsc->getGlobal());
-        return;
-      }
-      // Suggest lifetimebound for parameter escaping through return.
-      if (!PVD->hasAttr<LifetimeBoundAttr>())
-        if (auto *ReturnEsc = dyn_cast<ReturnEscapeFact>(OEF))
-          AnnotationWarningsMap.try_emplace(PVD, ReturnEsc->getReturnExpr());
-      // TODO: Suggest lifetime_capture_by(this) for parameter escaping to a
-      // field!
-    };
-    auto CheckImplicitThis = [&](const CXXMethodDecl *MD) {
-      if (!implicitObjectParamIsLifetimeBound(MD))
-        if (auto *ReturnEsc = dyn_cast<ReturnEscapeFact>(OEF))
-          AnnotationWarningsMap.try_emplace(MD, ReturnEsc->getReturnExpr());
-    };
-    for (LoanID LID : EscapedLoans) {
-      const Loan *L = FactMgr.getLoanMgr().getLoan(LID);
-      const AccessPath &AP = L->getAccessPath();
-      if (const auto *PVD = AP.getAsPlaceholderParam())
-        CheckParam(PVD);
-      else if (const auto *MD = AP.getAsPlaceholderThis())
-        CheckImplicitThis(MD);
     }
----------------
NeKon69 wrote:

I don't think the braces you added here are needed

https://github.com/llvm/llvm-project/pull/171808
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to