Skip to contentSkip to conversation

Pedantic fix for Apple clang

PATCH New Beat Bolli 2 participants 3 messages Jul 25, 2018 – Jul 26, 2018

lore
Share & tools
lore

Beat Bolli

author
#0 lore raw

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
author
#1 lore raw

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
index 51383774ec72..28318c5c7c42 100644
@@ -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
Reviewed-by on v2 1/1
#2 lore raw

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_type and include cache.h instead to make sure the enum is defined.

---
 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.h

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;

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