Beat Bolli wrote:
> When compiling under Apple LLVM version 9.1.0 (clang-902.0.39.2) with
> "make DEVELOPER=1 DEVOPTS=pedantic", the compiler says
>
> error: redeclaration of already-defined enum 'object_type' is a GNU
> extension [-Werror,-Wgnu-redeclared-enum]
>
> According to https://en.cppreference.com/w/c/language/declarations
> (section "Redeclaration"), a repeated declaration after the definition
> is only legal for structs and unions, but not for enums.
>
> Drop the belated declaration of enum object_type and include cache.h
> instead to make sure the enum is defined.
>
> Helped-by: Jonathan Nieder
> Signed-off-by: Beat Bolli
> ---
> packfile.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Thanks! I had run into this using clang on Linux, too, but hadn't
spent the time to track it down and write a patch.
Running
git grep -e 'enum [^ ]*;'
doesn't find any other instances of this error. Thanks for fixing it.
Reviewed-by: Jonathan Nieder
By the way, not about this patch:
[...]
> +++ b/packfile.h
> @@ -1,12 +1,12 @@
> #ifndef PACKFILE_H
> #define PACKFILE_H
>
> +#include "cache.h"
> #include "oidset.h"
>
> /* in object-store.h */
> struct packed_git;
> struct object_info;
> -enum object_type;
This '/* in object-store.h */' comment can easily go stale since
nothing enforces that it stays accurate. I don't think it's a useful
comment to have anyway, since it's straightforward to grep for where
the struct is defined. I think we should remove the comment.
Thanks,
Jonathan