================
@@ -47,6 +47,26 @@ namespace usage_ok {
     q = A(); // expected-warning {{object backing the pointer q will be 
destroyed at the end of the full-expression}}
     r = A(1); // expected-warning {{object backing the pointer r will be 
destroyed at the end of the full-expression}}
   }
+
+  struct FieldCheck {
+    struct Set {
+      int a;
+    };
+    struct Pair {
+      const int& a;
+      int b;
+      Set c;
+    };
+    Pair p;  
+    FieldCheck(const int a): p(a){}
+    Pair& getPairR() [[clang::lifetimebound]] { return p; }
+    Pair* getPairP() [[clang::lifetimebound]] { return &p; }
+  };
+  void test_field_access() {
+    const int& a = FieldCheck{0}.getPairR().a; // expected-warning {{temporary 
bound to local reference 'a' will be destroyed at the end of the 
full-expression}}
+    const int& b = FieldCheck{0}.getPairP()->b; // expected-warning 
{{temporary bound to local reference 'b' will be destroyed at the end of the 
full-expression}}
+    const int& c = FieldCheck{0}.getPairP()->c.a; // expected-warning 
{{temporary bound to local reference 'c' will be destroyed at the end of the 
full-expression}}
----------------
usx95 wrote:

Done.

https://github.com/llvm/llvm-project/pull/100197
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to