[clang] [LifetimeSafety] Handle GSL pointer construction from raw pointers (PR #175963)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 14 11:01:50 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-temporal-safety
Author: Utkarsh Saxena (usx95)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/175963.diff
2 Files Affected:
- (modified) clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp (+9)
- (modified) clang/unittests/Analysis/LifetimeSafetyTest.cpp (+2-3)
``````````diff
diff --git a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp
index b10c61f1cb6b7..bb82f09fa8457 100644
--- a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp
+++ b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp
@@ -444,6 +444,15 @@ void FactsGenerator::handleGSLPointerConstruction(const CXXConstructExpr *CCE) {
// View(const View &v);
ArgList = getRValueOrigins(Arg, ArgList);
flow(getOriginsList(*CCE), ArgList, /*Kill=*/true);
+ } else if (Arg->getType()->isPointerType()) {
+ // GSL pointer is constructed from a raw pointer. Flow only the outermost
+ // raw pointer. Example:
+ // View(const char*);
+ // Span<int*>(const in**);
+ OriginList *ArgList = getOriginsList(*Arg);
+ CurrentBlockFacts.push_back(FactMgr.createFact<OriginFlowFact>(
+ getOriginsList(*CCE)->getOuterOriginID(), ArgList->getOuterOriginID(),
+ /*Kill=*/true));
} else {
// This could be a new borrow.
// TODO: Add code example here.
diff --git a/clang/unittests/Analysis/LifetimeSafetyTest.cpp b/clang/unittests/Analysis/LifetimeSafetyTest.cpp
index f5e1ce3ae80ed..45611f856b3b2 100644
--- a/clang/unittests/Analysis/LifetimeSafetyTest.cpp
+++ b/clang/unittests/Analysis/LifetimeSafetyTest.cpp
@@ -1797,9 +1797,8 @@ TEST_F(LifetimeAnalysisTest, TrackImplicitObjectArg_GSLPointerArg) {
EXPECT_THAT(Origin("sv1"), HasLoansTo({"s1"}, "end"));
EXPECT_THAT(Origin("sv2"), HasLoansTo({"s2"}, "end"));
EXPECT_THAT(Origin("sv3"), HasLoansTo({"s3"}, "end"));
- // FIXME: Handle GSL pointer construction from raw pointers.
- EXPECT_THAT(Origin("sv4"), HasLoansTo({}, "end"));
- EXPECT_THAT(Origin("sv5"), HasLoansTo({}, "end"));
+ EXPECT_THAT(Origin("sv4"), HasLoansTo({"s4"}, "end"));
+ EXPECT_THAT(Origin("sv5"), HasLoansTo({"s5"}, "end"));
}
// ========================================================================= //
``````````
</details>
https://github.com/llvm/llvm-project/pull/175963
More information about the cfe-commits
mailing list