public inbox for linux-gpio@vger.kernel.org
 help / color / mirror / Atom feed
* build warning in libgpiod rust bindings with rust 1.83
@ 2024-12-20 16:25 Bartosz Golaszewski
  2024-12-21  2:01 ` Kent Gibson
  0 siblings, 1 reply; 3+ messages in thread
From: Bartosz Golaszewski @ 2024-12-20 16:25 UTC (permalink / raw)
  To: Viresh Kumar; +Cc: open list:GPIO SUBSYSTEM, Erik Schilling, Kent Gibson

Hi Viresh et al,

I noticed the following warning when building libgpiod rust bindings
with rust 1.83:

warning: elided lifetime has a name
  --> libgpiod/src/line_request.rs:234:26
   |
231 |     pub fn read_edge_events<'a>(
   |                             -- lifetime `'a` declared here
...
234 |     ) -> Result<request::Events> {
   |                          ^^^^^^ this elided lifetime gets resolved as `'a`
   |
   = note: `#[warn(elided_named_lifetimes)]` on by default

Could you please take a look as I have no idea what that means?

Best regards
Bartosz

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: build warning in libgpiod rust bindings with rust 1.83
  2024-12-20 16:25 build warning in libgpiod rust bindings with rust 1.83 Bartosz Golaszewski
@ 2024-12-21  2:01 ` Kent Gibson
  2025-01-02  7:42   ` Erik Schilling
  0 siblings, 1 reply; 3+ messages in thread
From: Kent Gibson @ 2024-12-21  2:01 UTC (permalink / raw)
  To: Bartosz Golaszewski
  Cc: Viresh Kumar, open list:GPIO SUBSYSTEM, Erik Schilling

On Fri, Dec 20, 2024 at 05:25:16PM +0100, Bartosz Golaszewski wrote:
> Hi Viresh et al,
>
> I noticed the following warning when building libgpiod rust bindings
> with rust 1.83:
>
> warning: elided lifetime has a name
>   --> libgpiod/src/line_request.rs:234:26
>    |
> 231 |     pub fn read_edge_events<'a>(
>    |                             -- lifetime `'a` declared here
> ...
> 234 |     ) -> Result<request::Events> {
>    |                          ^^^^^^ this elided lifetime gets resolved as `'a`
>    |
>    = note: `#[warn(elided_named_lifetimes)]` on by default
>
> Could you please take a look as I have no idea what that means?
>

clippy is complaining that the lifetime of the returned object is implicit.

Try:

--- a/bindings/rust/libgpiod/src/line_request.rs
+++ b/bindings/rust/libgpiod/src/line_request.rs
@@ -231,7 +231,7 @@ impl Request {
     pub fn read_edge_events<'a>(
         &'a self,
         buffer: &'a mut request::Buffer,
-    ) -> Result<request::Events> {
+    ) -> Result<request::Events<'a>> {
         buffer.read_edge_events(self)
     }
 }

to make it explicit.

Cheers,
Kent.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: build warning in libgpiod rust bindings with rust 1.83
  2024-12-21  2:01 ` Kent Gibson
@ 2025-01-02  7:42   ` Erik Schilling
  0 siblings, 0 replies; 3+ messages in thread
From: Erik Schilling @ 2025-01-02  7:42 UTC (permalink / raw)
  To: Kent Gibson, Bartosz Golaszewski; +Cc: Viresh Kumar, open list:GPIO SUBSYSTEM

Sorry! I was mostly offline over the holidays.

On Sat Dec 21, 2024 at 3:01 AM CET, Kent Gibson wrote:
> On Fri, Dec 20, 2024 at 05:25:16PM +0100, Bartosz Golaszewski wrote:
> > Hi Viresh et al,
> >
> > I noticed the following warning when building libgpiod rust bindings
> > with rust 1.83:
> >
> > warning: elided lifetime has a name
> >   --> libgpiod/src/line_request.rs:234:26
> >    |
> > 231 |     pub fn read_edge_events<'a>(
> >    |                             -- lifetime `'a` declared here
> > ...
> > 234 |     ) -> Result<request::Events> {
> >    |                          ^^^^^^ this elided lifetime gets resolved as `'a`
> >    |
> >    = note: `#[warn(elided_named_lifetimes)]` on by default
> >
> > Could you please take a look as I have no idea what that means?
> >
>
> clippy is complaining that the lifetime of the returned object is implicit.
>
> Try:
>
> --- a/bindings/rust/libgpiod/src/line_request.rs
> +++ b/bindings/rust/libgpiod/src/line_request.rs
> @@ -231,7 +231,7 @@ impl Request {
>      pub fn read_edge_events<'a>(
>          &'a self,
>          buffer: &'a mut request::Buffer,
> -    ) -> Result<request::Events> {
> +    ) -> Result<request::Events<'a>> {
>          buffer.read_edge_events(self)
>      }
>  }
>
> to make it explicit.

Thats overall correct. Though this is an actual compiler warning and not
coming from clippy.

But looking in a bit more detail I think the 'a on &self is wrong:

--- a/bindings/rust/libgpiod/src/line_request.rs
+++ b/bindings/rust/libgpiod/src/line_request.rs
@@ -230,7 +230,7 @@ impl Request {
     /// This function will block if no event was queued for the line.
     pub fn read_edge_events<'a>(
-        &'a self,
+        &self,
         buffer: &'a mut request::Buffer,
-    ) -> Result<request::Events> {
+    ) -> Result<request::Events<'a>> {
         buffer.read_edge_events(self)
     }

The lifetime is needed because the returned event reference is linked
to the lifetime of the buffer. With the &'a self the compiler will add a
<'a> to the return value.

But there is no dependency on the Request reference that extends longer
than this function call. Instead we want to explicitly break up the tie
to the &self and tie it to the buffer instead!

Sent a patch: https://lore.kernel.org/r/20250102-lifetime-fix-v1-1-313a6bc806c4@linaro.org/

- Erik


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-01-02  7:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-20 16:25 build warning in libgpiod rust bindings with rust 1.83 Bartosz Golaszewski
2024-12-21  2:01 ` Kent Gibson
2025-01-02  7:42   ` Erik Schilling

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox