[clang] [clang][dataflow] Refactor `PropagateResultObject()` with a switch statement. (PR #88865)

via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 16 02:57:54 PDT 2024


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff 3c6f91e5b671321c95259dabecdbdfe4a6d69ce1 3da6980d1957c19bdb821c6059c032b1e1c55863 -- clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index 86b42b12c9..7ef6b9d1df 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -500,85 +500,85 @@ public:
 
     ResultObjectMap[E] = Loc;
 
-    switch(E->getStmtClass()) {
-      // The following AST node kinds are "original initializers": They are the
-      // lowest-level AST node that initializes a given object, and nothing
-      // below them can initialize the same object (or part of it).
-      case Stmt::CXXConstructExprClass:
-      case Stmt::CallExprClass:
-      case Stmt::LambdaExprClass:
-      case Stmt::CXXDefaultArgExprClass:
-      case Stmt::CXXDefaultInitExprClass:
-      case Stmt::CXXStdInitializerListExprClass:
+    switch (E->getStmtClass()) {
+    // The following AST node kinds are "original initializers": They are the
+    // lowest-level AST node that initializes a given object, and nothing
+    // below them can initialize the same object (or part of it).
+    case Stmt::CXXConstructExprClass:
+    case Stmt::CallExprClass:
+    case Stmt::LambdaExprClass:
+    case Stmt::CXXDefaultArgExprClass:
+    case Stmt::CXXDefaultInitExprClass:
+    case Stmt::CXXStdInitializerListExprClass:
+      return;
+    case Stmt::BinaryOperatorClass: {
+      auto *Op = cast<BinaryOperator>(E);
+      if (Op->getOpcode() == BO_Cmp) {
+        // Builtin `<=>` returns a `std::strong_ordering` object. We
+        // consider this to be an "original" initializer too (see above).
         return;
-      case Stmt::BinaryOperatorClass: {
-        auto *Op = cast<BinaryOperator>(E);
-        if (Op->getOpcode() == BO_Cmp) {
-          // Builtin `<=>` returns a `std::strong_ordering` object. We
-          // consider this to be an "original" initializer too (see above).
-          return;
-        }
-        if (Op->isCommaOp()) {
-          PropagateResultObject(Op->getRHS(), Loc);
-          return;
-        }
-        // We don't expect any other binary operators to produce a record
-        // prvalue, so if we get here, we've hit some case we don't know
-        // about.
-        assert(false);
+      }
+      if (Op->isCommaOp()) {
+        PropagateResultObject(Op->getRHS(), Loc);
         return;
       }
-      case Stmt::BinaryConditionalOperatorClass:
-      case Stmt::ConditionalOperatorClass: {
-        auto *Cond = cast<AbstractConditionalOperator>(E);
-        PropagateResultObject(Cond->getTrueExpr(), Loc);
-        PropagateResultObject(Cond->getFalseExpr(), Loc);
+      // We don't expect any other binary operators to produce a record
+      // prvalue, so if we get here, we've hit some case we don't know
+      // about.
+      assert(false);
+      return;
+    }
+    case Stmt::BinaryConditionalOperatorClass:
+    case Stmt::ConditionalOperatorClass: {
+      auto *Cond = cast<AbstractConditionalOperator>(E);
+      PropagateResultObject(Cond->getTrueExpr(), Loc);
+      PropagateResultObject(Cond->getFalseExpr(), Loc);
+      return;
+    }
+    case Stmt::InitListExprClass: {
+      auto *InitList = cast<InitListExpr>(E);
+      if (!InitList->isSemanticForm())
+        return;
+      if (InitList->isTransparent()) {
+        PropagateResultObject(InitList->getInit(0), Loc);
         return;
       }
-      case Stmt::InitListExprClass: {
-        auto *InitList = cast<InitListExpr>(E);
-        if (!InitList->isSemanticForm())
-          return;
-        if (InitList->isTransparent()) {
-          PropagateResultObject(InitList->getInit(0), Loc);
-          return;
-        }
 
-        RecordInitListHelper InitListHelper(InitList);
+      RecordInitListHelper InitListHelper(InitList);
 
-        for (auto [Base, Init] : InitListHelper.base_inits()) {
-          assert(Base->getType().getCanonicalType() ==
-                 Init->getType().getCanonicalType());
+      for (auto [Base, Init] : InitListHelper.base_inits()) {
+        assert(Base->getType().getCanonicalType() ==
+               Init->getType().getCanonicalType());
 
-          // Storage location for the base class is the same as that of the
-          // derived class because we "flatten" the object hierarchy and put all
-          // fields in `RecordStorageLocation` of the derived class.
-          PropagateResultObject(Init, Loc);
-        }
-
-        for (auto [Field, Init] : InitListHelper.field_inits()) {
-          // Fields of non-record type are handled in
-          // `TransferVisitor::VisitInitListExpr()`.
-          if (!Field->getType()->isRecordType())
-            continue;
-          PropagateResultObject(
-              Init, cast<RecordStorageLocation>(Loc->getChild(*Field)));
-        }
-        return;
+        // Storage location for the base class is the same as that of the
+        // derived class because we "flatten" the object hierarchy and put all
+        // fields in `RecordStorageLocation` of the derived class.
+        PropagateResultObject(Init, Loc);
       }
-      default: {
-        // All other expression nodes that propagate a record prvalue should
-        // have exactly one child.
-        SmallVector<Stmt *, 1> Children(E->child_begin(), E->child_end());
-        LLVM_DEBUG({
-          if (Children.size() != 1)
-            E->dump();
-        });
-        assert(Children.size() == 1);
-        for (Stmt *S : Children)
-          PropagateResultObject(cast<Expr>(S), Loc);
-        return;
+
+      for (auto [Field, Init] : InitListHelper.field_inits()) {
+        // Fields of non-record type are handled in
+        // `TransferVisitor::VisitInitListExpr()`.
+        if (!Field->getType()->isRecordType())
+          continue;
+        PropagateResultObject(
+            Init, cast<RecordStorageLocation>(Loc->getChild(*Field)));
       }
+      return;
+    }
+    default: {
+      // All other expression nodes that propagate a record prvalue should
+      // have exactly one child.
+      SmallVector<Stmt *, 1> Children(E->child_begin(), E->child_end());
+      LLVM_DEBUG({
+        if (Children.size() != 1)
+          E->dump();
+      });
+      assert(Children.size() == 1);
+      for (Stmt *S : Children)
+        PropagateResultObject(cast<Expr>(S), Loc);
+      return;
+    }
     }
   }
 

``````````

</details>


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


More information about the cfe-commits mailing list