[clang] [LifetimeSafety] Add suggestion and inference for implicit this (PR #176703)
Kashika Akhouri via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 22 23:14:10 PST 2026
================
@@ -161,33 +167,52 @@ static View return_view_static(View a) { // expected-warning {{parameter in int
return a; // expected-note {{param returned here}}
}
-//===----------------------------------------------------------------------===//
-// FIXME Test Cases
-//===----------------------------------------------------------------------===//
+const ReturnThis& ReturnThis::get() const {
+ return *this; // expected-note {{param returned here}}
+}
struct ReturnsSelf {
- const ReturnsSelf& get() const {
- return *this;
+ ReturnsSelf() {}
+ ~ReturnsSelf() {}
+ const ReturnsSelf& get() const { // expected-warning {{implicit this in intra-TU function should be marked [[clang::lifetimebound]]}}.
+ return *this; // expected-note {{param returned here}}
}
};
+struct ReturnThisAnnotated {
+ const ReturnThisAnnotated& get() [[clang::lifetimebound]] { return *this; }
+};
+
struct ViewProvider {
+ ViewProvider() {}
+ ViewProvider(int d) : data(d) {}
+ ~ViewProvider() {}
MyObj data;
- View getView() const {
- return data;
+ View getView() const { // expected-warning {{implicit this in intra-TU function should be marked [[clang::lifetimebound]]}}.
+ return data; // expected-note {{param returned here}}
}
};
-// FIXME: Fails to generate lifetime suggestions for the implicit 'this' parameter, as this feature is not yet implemented.
-void test_get_on_temporary() {
- const ReturnsSelf& s_ref = ReturnsSelf().get();
- (void)s_ref;
+View return_view_field(const ViewProvider& v) { // expected-warning {{parameter in intra-TU function should be marked [[clang::lifetimebound]]}}.
+ return v.data; // expected-note {{param returned here}}
+}
+
+void test_get_on_temporary_pointer() {
+ const ReturnsSelf* s_ref = &ReturnsSelf().get(); // expected-warning {{object whose reference is captured does not live long enough}}.
+ // expected-note at -1 {{destroyed here}}
+ (void)s_ref; // expected-note {{later used here}}
+}
+
+void test_get_on_temporary_ref() {
----------------
kashika0112 wrote:
This should be safe right?
https://github.com/llvm/llvm-project/pull/176703
More information about the cfe-commits
mailing list