[llvm-branch-commits] [clang] construct gsl pointer from raw pointers (PR #175963)

Utkarsh Saxena via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Jan 14 07:06:31 PST 2026


https://github.com/usx95 created https://github.com/llvm/llvm-project/pull/175963

None

>From caf2733f8c77f76f77a1dd4c1bf10d264bccb34c Mon Sep 17 00:00:00 2001
From: Utkarsh Saxena <usx at google.com>
Date: Wed, 14 Jan 2026 14:42:34 +0000
Subject: [PATCH] construct gsl pointer from raw pointers

---
 clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp | 3 +++
 clang/unittests/Analysis/LifetimeSafetyTest.cpp      | 5 ++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp
index b10c61f1cb6b7..5393989facf9e 100644
--- a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp
+++ b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp
@@ -444,6 +444,9 @@ 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()) {
+    //  View(const char*);
+    killAndFlowOrigin(*CCE, *Arg);
   } 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"));
 }
 
 // ========================================================================= //



More information about the llvm-branch-commits mailing list