Pedantic fix for Apple clang
v2 cover Pedantic fix for Apple clang
Following up on my previous series bb/pedantic for gcc, this is a fix for pedantic compilation under MacOS 10.13.6 (High Sierra) with the command line tools of Xcode Version 9.4.1 (9F2000).
Changes against v1:
- [1/2]: include cache.h in packfile.h.
- [2/2]: drop it. Christian Couder is going to include this in the next version of the cc/remote-odb topic.
Beat Bolli (1):
packfile: drop a repeated enum declaration
packfile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Signature · 1 line
2.18.0
PATCH v2 1/1 packfile: ensure that enum object_type is defined
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.
--- packfile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
packfile.h +1 -1
@@ -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 ;/* * Generate the filename to be used for a pack file with checksum "sha1" and
Signature · 1 line
2.18.0
Re: [PATCH v2] packfile: ensure that enum object_type is defined
Quoted 10 lines · Beat Bolli
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.
Quoted 8 lines
Drop the belated declaration of enum
object_typeand includecache.hinstead to make sure the enum is defined.Helped-by Jonathan Nieder <[email protected]>Signed-off-by Beat Bolli <[email protected]>--- 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.
By the way, not about this patch:
[...]
packfile.h line 9
Quoted 12 lines
+++
b/packfile.hpackfile.h +1
-1@@ -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