https://github.com/usx95 updated https://github.com/llvm/llvm-project/pull/175963
>From 29dc9c3694218044b16095f4e6a09460aa769744 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <[email protected]> Date: Wed, 14 Jan 2026 14:42:34 +0000 Subject: [PATCH] construct gsl pointer from raw pointers --- clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp | 9 +++++++++ clang/unittests/Analysis/LifetimeSafetyTest.cpp | 5 ++--- 2 files changed, 11 insertions(+), 3 deletions(-) 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")); } // ========================================================================= // _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
