llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Utkarsh Saxena (usx95)

<details>
<summary>Changes</summary>



---

Patch is 59.25 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/203573.diff


4 Files Affected:

- (modified) clang/lib/Sema/SemaLifetimeSafety.h (+1-1) 
- (modified) clang/test/Sema/LifetimeSafety/annotation-suggestions.cpp (+8-8) 
- (modified) clang/test/Sema/LifetimeSafety/nocfg.cpp (+93-93) 
- (modified) clang/test/Sema/LifetimeSafety/safety.cpp (+51-51) 


``````````diff
diff --git a/clang/lib/Sema/SemaLifetimeSafety.h 
b/clang/lib/Sema/SemaLifetimeSafety.h
index a7c628f315d78..565c30f74cf9a 100644
--- a/clang/lib/Sema/SemaLifetimeSafety.h
+++ b/clang/lib/Sema/SemaLifetimeSafety.h
@@ -486,7 +486,7 @@ class LifetimeSafetySemaHelperImpl : public 
LifetimeSafetySemaHelper {
   std::string getDiagSubjectDescription(const Expr *E) {
     E = E->IgnoreImpCasts();
     if (isa<MaterializeTemporaryExpr>(E))
-      return "local temporary object";
+      return "temporary object";
 
     if (const auto *DRE = dyn_cast<DeclRefExpr>(E))
       return getDiagSubjectDescription(DRE->getDecl());
diff --git a/clang/test/Sema/LifetimeSafety/annotation-suggestions.cpp 
b/clang/test/Sema/LifetimeSafety/annotation-suggestions.cpp
index 1f94e101fb9ef..6abdc32c2d743 100644
--- a/clang/test/Sema/LifetimeSafety/annotation-suggestions.cpp
+++ b/clang/test/Sema/LifetimeSafety/annotation-suggestions.cpp
@@ -276,23 +276,23 @@ View return_view_field(const ViewProvider& v) {    // 
expected-warning {{paramet
 }
 
 void test_get_on_temporary_pointer() {
-  const ReturnsSelf* s_ref = &ReturnsSelf().get(); // expected-warning {{local 
temporary object does not live long enough}}.
+  const ReturnsSelf* s_ref = &ReturnsSelf().get(); // expected-warning 
{{temporary object does not live long enough}}.
                                                    // expected-note@-1 
{{destroyed here}}
-                                                   // expected-note@-2 
{{expression aliases the storage of local temporary object}}
+                                                   // expected-note@-2 
{{expression aliases the storage of temporary object}}
   (void)s_ref;                                     // expected-note {{later 
used here}}
 }
 
 void test_get_on_temporary_ref() {
-  const ReturnsSelf& s_ref = ReturnsSelf().get();  // expected-warning {{local 
temporary object does not live long enough}}.
+  const ReturnsSelf& s_ref = ReturnsSelf().get();  // expected-warning 
{{temporary object does not live long enough}}.
                                                    // expected-note@-1 
{{destroyed here}}
-                                                   // expected-note@-2 
{{expression aliases the storage of local temporary object}}
+                                                   // expected-note@-2 
{{expression aliases the storage of temporary object}}
   (void)s_ref;                                     // expected-note {{later 
used here}}
 }
 
 void test_getView_on_temporary() {
-  View sv = ViewProvider{1}.getView();      // expected-warning {{local 
temporary object does not live long enough}}.
+  View sv = ViewProvider{1}.getView();      // expected-warning {{temporary 
object does not live long enough}}.
                                             // expected-note@-1 {{destroyed 
here}}
-                                            // expected-note@-2 {{expression 
aliases the storage of local temporary object}}
+                                            // expected-note@-2 {{expression 
aliases the storage of temporary object}}
   (void)sv;                                 // expected-note {{later used 
here}}
 }
 
@@ -640,9 +640,9 @@ View* MakeView(const MyObj& in) { // expected-warning 
{{parameter in intra-TU fu
 }
 
 void test_new_allocation() {
-  View* v = MakeView(MyObj{}); // expected-warning {{local temporary object 
does not live long enough}} \
+  View* v = MakeView(MyObj{}); // expected-warning {{temporary object does not 
live long enough}} \
                                // expected-note {{destroyed here}} \
-                               // expected-note {{expression aliases the 
storage of local temporary object}}
+                               // expected-note {{expression aliases the 
storage of temporary object}}
   (void)v;                     // expected-note {{later used here}}
 }
 
diff --git a/clang/test/Sema/LifetimeSafety/nocfg.cpp 
b/clang/test/Sema/LifetimeSafety/nocfg.cpp
index 49b6175d378ae..3d7d59086ea54 100644
--- a/clang/test/Sema/LifetimeSafety/nocfg.cpp
+++ b/clang/test/Sema/LifetimeSafety/nocfg.cpp
@@ -75,7 +75,7 @@ struct Y {
 };
 
 void dangligGslPtrFromTemporary() {
-  MyIntPointer p = Y{}.a; // cfg-warning {{local temporary object does not 
live long enough}} \
+  MyIntPointer p = Y{}.a; // cfg-warning {{temporary object does not live long 
enough}} \
                           // cfg-note {{destroyed here}}
   (void)p;                // cfg-note {{later used here}}
 }
@@ -88,9 +88,9 @@ struct DanglingGslPtrField {
 
   DanglingGslPtrField(int i) : p(&i) {} // cfg-warning {{stack memory 
associated with parameter 'i' escapes to the field 'p' which will dangle}}
   DanglingGslPtrField() : p2(MyLongOwnerWithConversion{}) {}  // 
expected-warning {{initializing pointer member 'p2' to point to a temporary 
object whose lifetime is shorter than the lifetime of the constructed object}} \
-                                                              // cfg-warning 
{{stack memory associated with local temporary object escapes to the field 'p2' 
which will dangle}}
+                                                              // cfg-warning 
{{stack memory associated with temporary object escapes to the field 'p2' which 
will dangle}}
   DanglingGslPtrField(double) : p(MyIntOwner{}) {}  // expected-warning 
{{initializing pointer member 'p' to point to a temporary object whose lifetime 
is shorter than the lifetime of the constructed object}} \
-                                                    // cfg-warning {{stack 
memory associated with local temporary object escapes to the field 'p' which 
will dangle}}
+                                                    // cfg-warning {{stack 
memory associated with temporary object escapes to the field 'p' which will 
dangle}}
   DanglingGslPtrField(MyIntOwner io) : p(io) {} // cfg-warning {{stack memory 
associated with parameter 'io' escapes to the field 'p' which will dangle}}
   DanglingGslPtrField(MyLongOwnerWithConversion lo) : p2(lo) {} // cfg-warning 
{{stack memory associated with parameter 'lo' escapes to the field 'p2' which 
will dangle}}
 };
@@ -120,19 +120,19 @@ MyLongPointerFromConversion 
daglingGslPtrFromLocalOwnerConv() {
 
 MyIntPointer danglingGslPtrFromTemporary() {
   return MyIntOwner{}; // expected-warning {{returning address of local 
temporary object}} \
-                       // cfg-warning {{stack memory associated with local 
temporary object is returned}} cfg-note {{returned here}}
+                       // cfg-warning {{stack memory associated with temporary 
object is returned}} cfg-note {{returned here}}
 }
 
 MyIntOwner makeTempOwner();
 
 MyIntPointer danglingGslPtrFromTemporary2() {
   return makeTempOwner(); // expected-warning {{returning address of local 
temporary object}} \
-                          // cfg-warning {{stack memory associated with local 
temporary object is returned}} cfg-note {{returned here}}
+                          // cfg-warning {{stack memory associated with 
temporary object is returned}} cfg-note {{returned here}}
 }
 
 MyLongPointerFromConversion danglingGslPtrFromTemporaryConv() {
   return MyLongOwnerWithConversion{}; // expected-warning {{returning address 
of local temporary object}} \
-                                      // cfg-warning {{stack memory associated 
with local temporary object is returned}} cfg-note {{returned here}}
+                                      // cfg-warning {{stack memory associated 
with temporary object is returned}} cfg-note {{returned here}}
 }
 
 int *noFalsePositive(MyIntOwner &o) {
@@ -145,32 +145,32 @@ MyLongPointerFromConversion global2;
 
 void initLocalGslPtrWithTempOwner() {
   MyIntPointer p = MyIntOwner{}; // expected-warning {{object backing the 
pointer will be destroyed at the end of the full-expression}} \
-                                 // cfg-warning {{local temporary object does 
not live long enough}} cfg-note {{destroyed here}}
+                                 // cfg-warning {{temporary object does not 
live long enough}} cfg-note {{destroyed here}}
   use(p);                        // cfg-note {{later used here}}
 
   MyIntPointer pp = p = MyIntOwner{}; // expected-warning {{object backing the 
pointer 'p' will be}} \
-                                      // cfg-warning {{local temporary object 
does not live long enough}} cfg-note {{destroyed here}}
+                                      // cfg-warning {{temporary object does 
not live long enough}} cfg-note {{destroyed here}}
   use(p, pp);                         // cfg-note {{later used here}}
 
   p = MyIntOwner{}; // expected-warning {{object backing the pointer 'p' }} \
-                    // cfg-warning {{local temporary object does not live long 
enough}} cfg-note {{destroyed here}}
+                    // cfg-warning {{temporary object does not live long 
enough}} cfg-note {{destroyed here}}
   use(p);           // cfg-note {{later used here}}
 
   pp = p; // no warning
   use(p, pp);
 
   global = MyIntOwner{}; // expected-warning {{object backing the pointer 
'global' }} \
-                         // cfg-warning {{local temporary object does not live 
long enough}} cfg-note {{destroyed here}}
+                         // cfg-warning {{temporary object does not live long 
enough}} cfg-note {{destroyed here}}
   use(global);           // cfg-note {{later used here}}
 
   MyLongPointerFromConversion p2 = MyLongOwnerWithConversion{}; // 
expected-warning {{object backing the pointer will be destroyed at the end of 
the full-expression}} \
-                                                                // cfg-warning 
{{local temporary object does not live long enough}} cfg-note {{destroyed here}}
+                                                                // cfg-warning 
{{temporary object does not live long enough}} cfg-note {{destroyed here}}
   use(p2);                                                      // cfg-note 
{{later used here}}
 
   p2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the 
pointer 'p2' }} \
-                                    // cfg-warning {{local temporary object 
does not live long enough}} cfg-note {{destroyed here}}
+                                    // cfg-warning {{temporary object does not 
live long enough}} cfg-note {{destroyed here}}
   global2 = MyLongOwnerWithConversion{};  // expected-warning {{object backing 
the pointer 'global2' }} \
-                                          // cfg-warning {{local temporary 
object does not live long enough}} cfg-note {{destroyed here}}
+                                          // cfg-warning {{temporary object 
does not live long enough}} cfg-note {{destroyed here}}
   use(global2, p2);                       // cfg-note 2 {{later used here}}
 }
 
@@ -180,7 +180,7 @@ struct LifetimeBoundCtor {
 };
 
 auto lifetimebound_make_unique_single_param() {
-  return std::make_unique<LifetimeBoundCtor>(MyIntOwner{}); // tu-warning 
{{stack memory associated with local temporary object is returned}} tu-note 
{{returned here}}
+  return std::make_unique<LifetimeBoundCtor>(MyIntOwner{}); // tu-warning 
{{stack memory associated with temporary object is returned}} tu-note 
{{returned here}}
 }
 
 
@@ -193,24 +193,24 @@ struct Unannotated {
 
 void modelIterators() {
   std::vector<int>::iterator it = std::vector<int>().begin(); // 
expected-warning {{object backing the pointer will be destroyed at the end of 
the full-expression}} \
-                                                              // cfg-warning 
{{local temporary object does not live long enough}} cfg-note {{destroyed 
here}} \
-                                                              // cfg-note 
{{expression aliases the storage of local temporary object}}
+                                                              // cfg-warning 
{{temporary object does not live long enough}} cfg-note {{destroyed here}} \
+                                                              // cfg-note 
{{expression aliases the storage of temporary object}}
   (void)it; // cfg-note {{later used here}}
 }
 
 std::vector<int>::iterator modelIteratorReturn() {
   return std::vector<int>().begin(); // expected-warning {{returning address 
of local temporary object}} \
-                                     // cfg-warning {{stack memory associated 
with local temporary object is returned}} cfg-note {{returned here}}
+                                     // cfg-warning {{stack memory associated 
with temporary object is returned}} cfg-note {{returned here}}
 }
 
 const int *modelFreeFunctions() {
   return std::data(std::vector<int>()); // expected-warning {{returning 
address of local temporary object}} \
-                                        // cfg-warning {{stack memory 
associated with local temporary object is returned}} cfg-note {{returned here}}
+                                        // cfg-warning {{stack memory 
associated with temporary object is returned}} cfg-note {{returned here}}
 }
 
 int &modelAnyCast() {
   return std::any_cast<int&>(std::any{}); // expected-warning {{returning 
reference to local temporary object}} \
-                                          // cfg-warning {{stack memory 
associated with local temporary object is returned}} cfg-note {{returned here}}
+                                          // cfg-warning {{stack memory 
associated with temporary object is returned}} cfg-note {{returned here}}
 }
 
 int modelAnyCast2() {
@@ -242,13 +242,13 @@ int &danglingRawPtrFromLocal3() {
 // GH100384
 std::string_view containerWithAnnotatedElements() {
   std::string_view c1 = std::vector<std::string>().at(0); // expected-warning 
{{object backing the pointer will be destroyed at the end of the 
full-expression}} \
-                                                          // cfg-warning 
{{local temporary object does not live long enough}} cfg-note {{destroyed 
here}} \
-                                                          // cfg-note 
{{expression aliases the storage of local temporary object}}
+                                                          // cfg-warning 
{{temporary object does not live long enough}} cfg-note {{destroyed here}} \
+                                                          // cfg-note 
{{expression aliases the storage of temporary object}}
   use(c1);                                                // cfg-note {{later 
used here}}
 
   c1 = std::vector<std::string>().at(0); // expected-warning {{object backing 
the pointer}} \
-                                         // cfg-warning {{local temporary 
object does not live long enough}} cfg-note {{destroyed here}} \
-                                         // cfg-note {{expression aliases the 
storage of local temporary object}}
+                                         // cfg-warning {{temporary object 
does not live long enough}} cfg-note {{destroyed here}} \
+                                         // cfg-note {{expression aliases the 
storage of temporary object}}
   use(c1);                               // cfg-note {{later used here}}
 
   // no warning on constructing from gsl-pointer
@@ -280,58 +280,58 @@ std::string_view localOptional(int i) {
 
 const char *danglingRawPtrFromTemp() {
   return std::basic_string<char>().c_str(); // expected-warning {{returning 
address of local temporary object}} \
-                                            // cfg-warning {{stack memory 
associated with local temporary object is returned}} cfg-note {{returned here}}
+                                            // cfg-warning {{stack memory 
associated with temporary object is returned}} cfg-note {{returned here}}
 }
 
 std::unique_ptr<int> getUniquePtr();
 
 int *danglingUniquePtrFromTemp() {
   return getUniquePtr().get(); // expected-warning {{returning address of 
local temporary object}} \
-                               // cfg-warning {{stack memory associated with 
local temporary object is returned}} cfg-note {{returned here}}
+                               // cfg-warning {{stack memory associated with 
temporary object is returned}} cfg-note {{returned here}}
 }
 
 int *danglingUniquePtrFromTemp2() {
   return std::unique_ptr<int>().get(); // expected-warning {{returning address 
of local temporary object}} \
-                                       // cfg-warning {{stack memory 
associated with local temporary object is returned}} cfg-note {{returned here}}
+                                       // cfg-warning {{stack memory 
associated with temporary object is returned}} cfg-note {{returned here}}
 }
 
 const int& danglingRefToOptionalFromTemp3() {
   return std::optional<int>().value(); // expected-warning {{returning 
reference to local temporary object}} \
-                                       // cfg-warning {{stack memory 
associated with local temporary object is returned}} cfg-note {{returned here}}
+                                       // cfg-warning {{stack memory 
associated with temporary object is returned}} cfg-note {{returned here}}
 }
 
 std::optional<std::string> getTempOptStr();
 
 std::string_view danglingRefToOptionalFromTemp4() {
   return getTempOptStr().value(); // expected-warning {{returning address of 
local temporary object}} \
-                                  // cfg-warning {{stack memory associated 
with local temporary object is returned}} cfg-note {{returned here}}
+                                  // cfg-warning {{stack memory associated 
with temporary object is returned}} cfg-note {{returned here}}
 }
 
 void danglingReferenceFromTempOwner() {
   int &&r = *std::optional<int>();          // expected-warning {{object 
backing the pointer will be destroyed at the end of the full-expression}} \
-                                            // cfg-warning {{local temporary 
object does not live long enough}} cfg-note {{destroyed here}} \
-                                            // cfg-note {{expression aliases 
the storage of local temporary object}}
+                                            // cfg-warning {{temporary object 
does not live long enough}} cfg-note {{destroyed here}} \
+                                            // cfg-note {{expression aliases 
the storage of temporary object}}
   // https://github.com/llvm/llvm-project/issues/175893
   int &&r2 = *std::optional<int>(5);        // expected-warning {{object 
backing the pointer will be destroyed at the end of the full-expression}} \
-                                              // cfg-warning {{local temporary 
object does not live long enough}} cfg-note {{destroyed here}} \
-                                              // cfg-note {{expression aliases 
the storage of local temporary object}}
+                                              // cfg-warning {{temporary 
object does not live long enough}} cfg-note {{destroyed here}} \
+                                              // cfg-note {{expression aliases 
the storage of temporary object}}
 
   // https://github.com/llvm/llvm-project/issues/175893
   int &&r3 = std::optional<int>(5).value(); // expected-warning {{object 
backing the pointer will be destroyed at the end of the full-expression}} \
-                                              // cfg-warning {{local temporary 
object does not live long enough}} cfg-note {{destroyed here}} \
-                                              // cfg-note {{expression aliases 
the storage of local temporary object}}
+                                              // cfg-warning {{temporary 
object does not live long enough}} cfg-note {{destroyed here}} \
+                                              // cfg-note {{expression aliases 
the storage of temporary object}}
 
   const int &r4 = std::vector<int>().at(3); // expected-warning {{object 
backing the pointer will be destroyed at the end of the full-expression}} \
-                                            // cfg-warning {{local temporary 
object does not live long enough}} cfg-note {{destroyed here}} \
-                                            // cfg-note {{expression aliases 
the storage of local temporary object}}
+                                            // cfg-warning {{temporary object 
does not live long enough}} cfg-note {{destroyed here}} \
+                                            // cfg-note {{expression aliases 
the storage of temporary object}}
   int &&r5 = std::vector<int>().at(3);      // expected-warning {{object 
backing the pointer will be destroyed at the end of the full-expression}} \
-         ...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/203573
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to