[PATCH] D127993: [Static Analyzer][CFG] Introducing the source array in the CFG of DecompositionDecl
Domján Dániel via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 17 09:35:32 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGfc6b2281bfd7: [Static Analyzer][CFG] Introducing the source array in the CFG of… (authored by isuckatcs).
Herald added a subscriber: cfe-commits.
Changed prior to commit:
https://reviews.llvm.org/D127993?vs=437859&id=437943#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127993/new/
https://reviews.llvm.org/D127993
Files:
clang/lib/Analysis/CFG.cpp
clang/test/Analysis/cfg.cpp
Index: clang/test/Analysis/cfg.cpp
===================================================================
--- clang/test/Analysis/cfg.cpp
+++ clang/test/Analysis/cfg.cpp
@@ -650,6 +650,22 @@
return 0;
}
+// CHECK-LABEL: void DecompositionDecl()
+// CHECK: [B1]
+// CHECK-NEXT: 1: int arr[2];
+// CHECK-NEXT: 2: arr
+// CHECK-NEXT: 3: [B1.2] (ImplicitCastExpr, ArrayToPointerDecay, int *)
+// CHECK-NEXT: 4: *
+// CHECK-NEXT: 5: [B1.3]{{\[\[}}B1.4]]
+// CHECK-NEXT: 6: [B1.5] (ImplicitCastExpr, LValueToRValue, int)
+// CHECK-NEXT: 7: {{\{}}[B1.6]{{(\})}}
+// CHECK-NEXT: 8: auto = {{\{}}arr[*]{{(\})}};
+void DecompositionDecl() {
+ int arr[2];
+
+ auto [a, b] = arr;
+}
+
// CHECK-LABEL: template<> int *PR18472<int>()
// CHECK: [B2 (ENTRY)]
// CHECK-NEXT: Succs (1): B1
Index: clang/lib/Analysis/CFG.cpp
===================================================================
--- clang/lib/Analysis/CFG.cpp
+++ clang/lib/Analysis/CFG.cpp
@@ -609,6 +609,7 @@
AddStmtChoice asc);
CFGBlock *VisitUnaryOperator(UnaryOperator *U, AddStmtChoice asc);
CFGBlock *VisitWhileStmt(WhileStmt *W);
+ CFGBlock *VisitArrayInitLoopExpr(ArrayInitLoopExpr *A, AddStmtChoice asc);
CFGBlock *Visit(Stmt *S, AddStmtChoice asc = AddStmtChoice::NotAlwaysAdd,
bool ExternallyDestructed = false);
@@ -2330,6 +2331,9 @@
case Stmt::WhileStmtClass:
return VisitWhileStmt(cast<WhileStmt>(S));
+
+ case Stmt::ArrayInitLoopExprClass:
+ return VisitArrayInitLoopExpr(cast<ArrayInitLoopExpr>(S), asc);
}
}
@@ -3881,6 +3885,27 @@
return EntryConditionBlock;
}
+CFGBlock *CFGBuilder::VisitArrayInitLoopExpr(ArrayInitLoopExpr *A,
+ AddStmtChoice asc) {
+ if (asc.alwaysAdd(*this, A)) {
+ autoCreateBlock();
+ appendStmt(Block, A);
+ }
+
+ CFGBlock *B = Block;
+
+ if (CFGBlock *R = Visit(A->getSubExpr()))
+ B = R;
+
+ auto *OVE = dyn_cast<OpaqueValueExpr>(A->getCommonExpr());
+ assert(OVE && "ArrayInitLoopExpr->getCommonExpr() should be wrapped in an "
+ "OpaqueValueExpr!");
+ if (CFGBlock *R = Visit(OVE->getSourceExpr()))
+ B = R;
+
+ return B;
+}
+
CFGBlock *CFGBuilder::VisitObjCAtCatchStmt(ObjCAtCatchStmt *CS) {
// ObjCAtCatchStmt are treated like labels, so they are the first statement
// in a block.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127993.437943.patch
Type: text/x-patch
Size: 2409 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220617/cc70ca00/attachment.bin>
More information about the cfe-commits
mailing list