[PATCH v1 2/2] auxdisplay: charlcd: Provide a forward declaration

Andy Shevchenko posted 2 patches 1 year, 10 months ago
[PATCH v1 2/2] auxdisplay: charlcd: Provide a forward declaration
Posted by Andy Shevchenko 1 year, 10 months ago
While there is no compilation error, strictly speaking compiler
should know about used types beforehand. Provide a forward decration
for struct charlcd_ops before using it in struct charlcd.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/auxdisplay/charlcd.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/auxdisplay/charlcd.h b/drivers/auxdisplay/charlcd.h
index eed80063a6d2..4d4287209d04 100644
--- a/drivers/auxdisplay/charlcd.h
+++ b/drivers/auxdisplay/charlcd.h
@@ -36,6 +36,8 @@ enum charlcd_lines {
 	CHARLCD_LINES_2,
 };
 
+struct charlcd_ops;
+
 struct charlcd {
 	const struct charlcd_ops *ops;
 	const unsigned char *char_conv;	/* Optional */
-- 
2.43.0.rc1.1.gbec44491f096
Re: [PATCH v1 2/2] auxdisplay: charlcd: Provide a forward declaration
Posted by Geert Uytterhoeven 1 year, 10 months ago
Hi Andy,

On Tue, Apr 9, 2024 at 6:15 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
> While there is no compilation error, strictly speaking compiler
> should know about used types beforehand. Provide a forward decoration

declaration

> for struct charlcd_ops before using it in struct charlcd.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> --- a/drivers/auxdisplay/charlcd.h
> +++ b/drivers/auxdisplay/charlcd.h
> @@ -36,6 +36,8 @@ enum charlcd_lines {
>         CHARLCD_LINES_2,
>  };
>
> +struct charlcd_ops;
> +
>  struct charlcd {
>         const struct charlcd_ops *ops;

No forward declaration is needed at this point, as ops is a _pointer_ to
the structure.

>         const unsigned char *char_conv; /* Optional */

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Re: [PATCH v1 2/2] auxdisplay: charlcd: Provide a forward declaration
Posted by Andy Shevchenko 1 year, 10 months ago
On Thu, Apr 11, 2024 at 09:30:31AM +0200, Geert Uytterhoeven wrote:
> On Tue, Apr 9, 2024 at 6:15 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> > While there is no compilation error, strictly speaking compiler
> > should know about used types beforehand. Provide a forward decoration
> 
> declaration

Thanks, I updated locally. Please, see my answer below.

> > for struct charlcd_ops before using it in struct charlcd.

...

> > +struct charlcd_ops;
> > +
> >  struct charlcd {
> >         const struct charlcd_ops *ops;
> 
> No forward declaration is needed at this point, as ops is a _pointer_ to
> the structure.

The same way as in all other cases. We may drop all of them, but strictly
speaking (as I mentioned in the commit message) this is a good practice.

I.o.w. a forward declaration of custom data types is used for _pointers_.

> >         const unsigned char *char_conv; /* Optional */

-- 
With Best Regards,
Andy Shevchenko


Re: [PATCH v1 2/2] auxdisplay: charlcd: Provide a forward declaration
Posted by Andy Shevchenko 1 year, 9 months ago
On Thu, Apr 11, 2024 at 01:30:25PM +0300, Andy Shevchenko wrote:
> On Thu, Apr 11, 2024 at 09:30:31AM +0200, Geert Uytterhoeven wrote:
> > On Tue, Apr 9, 2024 at 6:15 PM Andy Shevchenko
> > <andriy.shevchenko@linux.intel.com> wrote:
> > > While there is no compilation error, strictly speaking compiler
> > > should know about used types beforehand. Provide a forward decoration
> > 
> > declaration
> 
> Thanks, I updated locally. Please, see my answer below.
> 
> > > for struct charlcd_ops before using it in struct charlcd.

...

> > > +struct charlcd_ops;
> > > +
> > >  struct charlcd {
> > >         const struct charlcd_ops *ops;
> > 
> > No forward declaration is needed at this point, as ops is a _pointer_ to
> > the structure.
> 
> The same way as in all other cases. We may drop all of them, but strictly
> speaking (as I mentioned in the commit message) this is a good practice.
> 
> I.o.w. a forward declaration of custom data types is used for _pointers_.
> 
> > >         const unsigned char *char_conv; /* Optional */

Hmm, so what's the conclusion?

-- 
With Best Regards,
Andy Shevchenko


Re: [PATCH v1 2/2] auxdisplay: charlcd: Provide a forward declaration
Posted by Andy Shevchenko 1 year, 9 months ago
On Tue, Apr 23, 2024 at 07:35:02PM +0300, Andy Shevchenko wrote:
> On Thu, Apr 11, 2024 at 01:30:25PM +0300, Andy Shevchenko wrote:
> > On Thu, Apr 11, 2024 at 09:30:31AM +0200, Geert Uytterhoeven wrote:
> > > On Tue, Apr 9, 2024 at 6:15 PM Andy Shevchenko
> > > <andriy.shevchenko@linux.intel.com> wrote:
> > > > While there is no compilation error, strictly speaking compiler
> > > > should know about used types beforehand. Provide a forward decoration
> > > 
> > > declaration
> > 
> > Thanks, I updated locally. Please, see my answer below.
> > 
> > > > for struct charlcd_ops before using it in struct charlcd.

...

> > > > +struct charlcd_ops;
> > > > +
> > > >  struct charlcd {
> > > >         const struct charlcd_ops *ops;
> > > 
> > > No forward declaration is needed at this point, as ops is a _pointer_ to
> > > the structure.
> > 
> > The same way as in all other cases. We may drop all of them, but strictly
> > speaking (as I mentioned in the commit message) this is a good practice.
> > 
> > I.o.w. a forward declaration of custom data types is used for _pointers_.
> > 
> > > >         const unsigned char *char_conv; /* Optional */
> 
> Hmm, so what's the conclusion?

I'm going to apply this. Share you objections if any,

-- 
With Best Regards,
Andy Shevchenko