Thread (8 messages) flat view 8 messages, 3 authors, 2016-06-16

Re: definition for _attribute() in remote.c

From: Philip Oakley <hidden>
Date: 2016-06-16 02:18:59

From: "Jeff King" <redacted>
On Mon, Apr 25, 2016 at 10:02:38PM +0100, Philip Oakley wrote:
quoted
I'm looking at getting Git for Windows to compile via Visual Studio
(https://github.com/git-for-windows/git/pull/256).

However the use of __attribute() in remote.c at L1662
(https://github.com/git-for-windows/git/blob/master/remote.c#L1662) has 
got
me confused in that I can't see how the regular definition of 
__attribute()
is #included in this case. A definition is given in
git\compat\regex\regex_internal.h but doesn't appear to be on remote.c's
include path.

The line was introduced by 3a429d0 (remote.c: report specific errors from
branch_get_upstream, 2015-05-21) which appears to be later than the 
previous
MSVC testers had looked at.
It should be handled in git-compat-util.h, which is included by cache.h,
which is included by remote.c.

There we have:

 #ifndef __GNUC__
 #ifndef __attribute__
 #define __attribute__(x)
 #endif
 #endif

which should make it a noop on compilers which don't know about it. Is
VS (or another file) setting __GNUC__?
It's not the __attribute__ definition (a Gnu C ism), rather its the 
__attribute variant, which has a definition in regex_internal.h, and is used 
in the regex code. It's that one that's used in remote.c that I can't fathom 
(i.e. how it worked in normally)

regex_internal.h#L160-164
#ifdef __GNUC__
# define __attribute(arg) __attribute__ (arg)
#else
# define __attribute(arg)
#endif

thus when the compilation get to remote.c#L1662 it fails to find that 
definition.

Should that line use the gnu extension name?

--
Philip 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help