Re: [PATCH v2 09/13] scripts: kernel-doc: parse next structs/unions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Fri, 29 Sep 2017 12:29:31 -0300
Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx> escreveu:

> Em Thu, 28 Sep 2017 18:28:32 +0200
> Markus Heiser <markus.heiser@xxxxxxxxxxx> escreveu:
> 
> > Hi Mauro,
> >   
> > > Am 27.09.2017 um 23:10 schrieb Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx>:  
> 
> > > +It is possible to document nested structs unions, like::
> > > +
> > > +      /**
> > > +       * struct nested_foobar - a struct with nested unions and structs
> > > +       * @arg1: - first argument of anonymous union/anonymous struct
> > > +       * @arg2: - second argument of anonymous union/anonymous struct
> > > +       * @arg3: - third argument of anonymous union/anonymous struct
> > > +       * @arg4: - fourth argument of anonymous union/anonymous struct
> > > +       * @bar.st1.arg1 - first argument of struct st1 on union bar
> > > +       * @bar.st1.arg2 - second argument of struct st1 on union bar
> > > +       * @bar.st2.arg1 - first argument of struct st2 on union bar
> > > +       * @bar.st2.arg2 - second argument of struct st2 on union bar    
> > 
> > Sorry, this example is totally broken --> below I attached a more
> > elaborate example. 
> > 
> > /* parse-SNIP: my_struct */
> > /**
> > * struct my_struct - a struct with nested unions and structs
> > * @arg1: first argument of anonymous union/anonymous struct
> > * @arg2: second argument of anonymous union/anonymous struct
> > * @arg3: third argument of anonymous union/anonymous struct
> > * @arg4: fourth argument of anonymous union/anonymous struct
> > * @bar.st1.arg1: first argument of struct st1 on union bar
> > * @bar.st1.arg2: second argument of struct st1 on union bar
> > * @bar.st2.arg1: first argument of struct st2 on union bar
> > * @bar.st2.arg2: second argument of struct st2 on union bar
> > * @bar.st3.arg2: second argument of struct st3 on union bar
> > */
> > struct my_struct {
> >    /* Anonymous union/struct*/
> >    union {
> > 	struct {
> > 	    __u8 arg1 : 1;
> > 	    __u8 arg2 : 3;
> > 	};
> >        struct {
> >            int arg1;
> >            int arg2;
> >        };  
> 
> I added a:
> 
> 	#define __u8 char
> 
> In order to compile the above. As reported by gcc 7, this is broken:
> 
> test2.h:22:16: error: duplicate member ‘arg1’
>             int arg1;
>                 ^~~~
> test2.h:23:16: error: duplicate member ‘arg2’
>             int arg2;
>                 ^~~~
> 
> You can't have two symbols with the same name on different anonymous
> structs.

I guess the enclosed nested struct covers all weirdness that we want
to be covered, and it does compile without errors/warnings.

Regards,
Mauro

- 

/* Test code to test nested structs */

/**
 * struct my_struct - a struct with nested unions and structs
 * @arg1: first argument of anonymous union/anonymous struct
 * @arg2: second argument of anonymous union/anonymous struct
 * @arg1b: first argument of anonymous union/anonymous struct
 * @arg2b: second argument of anonymous union/anonymous struct
 * @arg3: third argument of anonymous union/anonymous struct
 * @arg4: fourth argument of anonymous union/anonymous struct
 * @bar.st1.arg1: first argument of struct st1 on union bar
 * @bar.st1.arg2: second argument of struct st1 on union bar
 * @bar.st2.arg1: first argument of struct st2 on union bar
 * @bar.st2.arg2: second argument of struct st2 on union bar
 * @bar.st3.arg2: second argument of struct st3 on union bar
 * @f1: nested function on anonimous union/struct
 * @bar.st2.f2: nested function on named union/struct
 */
struct my_struct {
   /* Anonymous union/struct*/
   union {
	struct {
	    char arg1 : 1;
	    char arg2 : 3;
	};
       struct {
           int arg1b;
           int arg2b;
       };
       struct {
           void *arg3;
           int arg4;
           int (*f1)(char foo, int bar);
       };
   };
   union {
       struct {
           int arg1;
           int arg2;
       } st1;           /* bar.st1 is undocumented, cause a warning */
       struct {
           void *arg1;  /* bar.st3.arg1 is undocumented, cause a warning */
	    int arg2;
          int (*f2)(char foo, int bar); /* bar.st3.fn2 is undocumented, cause a warning */
       } st2, st3;
       int (*f3)(char foo, int bar); /* f3 is undocumented, cause a warning */
   } bar;               /* bar is undocumented, cause a warning */

   /* private: */
   int undoc_privat;    /* is undocumented but private, no warning */

   /* public: */
   int undoc_public;    /* is undocumented, cause a warning */
};

--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux