Hi Patrick, > The C standard does not allow for typedef redefinitions, even if they > map to the same underlying type. In order to avoid including the > "jsmn.h" in "json.h" and thus exposing jsmn's internals, we have exactly > such a forward-declaring typedef in "json.h". If enforcing the GNU99 C > standard, clang may generate a warning about this non-standard > construct. > > Fix the issue by using a simple `struct jsmntok` forward declaration > instead of using a typedef. > > Signed-off-by: Patrick Steinhardt <p...@pks.im>
Tested-by: Daniel Axtens <d...@axtens.net> # clang build test for emu target only With this patch, clang can compile master again. Thanks Patrick! Regards, Daniel > --- > > Sorry for the late response, didn't notice at first that this directly > impacts code I wrote. I don't have Clang available on my computer and > GCC seems to lack the equivalent option for this, so I wasn't able to > reproduce the warning. Below patch should fix the issue, though, as we > simply avoid using a typedef for the forward declaration. > > grub-core/lib/json/json.h | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/grub-core/lib/json/json.h b/grub-core/lib/json/json.h > index d9f99454d..2e2b0bd07 100644 > --- a/grub-core/lib/json/json.h > +++ b/grub-core/lib/json/json.h > @@ -36,13 +36,14 @@ enum grub_json_type > }; > typedef enum grub_json_type grub_json_type_t; > > -typedef struct jsmntok jsmntok_t; > +/* Forward-declaration to avoid including "jsmn.h" */ > +struct jsmntok; > > struct grub_json > { > - jsmntok_t *tokens; > - char *string; > - grub_size_t idx; > + struct jsmntok *tokens; > + char *string; > + grub_size_t idx; > }; > typedef struct grub_json grub_json_t; > > -- > 2.26.2 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel