# [PATCH 6/6] compat/nedmalloc: Fix compiler warnings on linux

5 messages from 2013-04-27 to 2013-04-29. Participants: Ramsay Jones, Junio C Hamano, Jonathan Nieder.
Thread: https://gitlist.dev/t/33642

## Ramsay Jones, 2013-04-27 18:46

Subject: [PATCH 6/6] compat/nedmalloc: Fix compiler warnings on linux
Message-ID: <517C1CF9.2080903@ramsay1.demon.co.uk>
URL: https://gitlist.dev/e/517C1CF9.2080903%40ramsay1.demon.co.uk

```

On linux, when the build variable USE_NED_ALLOCATOR is set, gcc
issues the following warnings:

    In file included from compat/nedmalloc/nedmalloc.c:63:
    .../malloc.c.h: In function 'mmap_resize':
    .../malloc.c.h:3762: warning: implicit declaration of function 'mremap'
    .../malloc.c.h: In function 'sys_trim':
    .../malloc.c.h:4195: warning: comparison between pointer and integer

The warnings are caused by the <sys/mman.h> header not enabling the
(conditional) declaration of the mremap() function.  The declaration
can be enabled by defining the _GNU_SOURCE symbol prior to including
certain system header files. In particular, it may not be sufficient
to simply define _GNU_SOURCE just prior to including the <sys/mman.h>
header. (e.g. defining the symbol after including <sys/types.h> will
be completely ineffective.)

In order to suppress the warnings, we define the _GNU_SOURCE symbol
at the start of the malloc.c.h header file.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
 compat/nedmalloc/malloc.c.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/compat/nedmalloc/malloc.c.h b/compat/nedmalloc/malloc.c.h
index fdcca82..5a44dea 100644
--- a/compat/nedmalloc/malloc.c.h
+++ b/compat/nedmalloc/malloc.c.h
@@ -484,6 +484,10 @@ MAX_RELEASE_CHECK_RATE   default: 4095 unless not HAVE_MMAP
 #define DLMALLOC_VERSION 20804
 #endif /* DLMALLOC_VERSION */
 
+#if defined(linux)
+#define _GNU_SOURCE 1
+#endif
+
 #ifndef WIN32
 #ifdef _WIN32
 #define WIN32 1
-- 
1.8.2

```

## Junio C Hamano, 2013-04-28 19:25

Subject: Re: [PATCH 6/6] compat/nedmalloc: Fix compiler warnings on linux
Message-ID: <7v7gjmqwxn.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7v7gjmqwxn.fsf%40alter.siamese.dyndns.org
In-Reply-To: <517C1CF9.2080903@ramsay1.demon.co.uk>

```
Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:

> On linux, when the build variable USE_NED_ALLOCATOR is set, gcc
> issues the following warnings:
>
>     In file included from compat/nedmalloc/nedmalloc.c:63:
>     .../malloc.c.h: In function 'mmap_resize':
>     .../malloc.c.h:3762: warning: implicit declaration of function 'mremap'
>     .../malloc.c.h: In function 'sys_trim':
>     .../malloc.c.h:4195: warning: comparison between pointer and integer
>
> The warnings are caused by the <sys/mman.h> header not enabling the
> (conditional) declaration of the mremap() function.  The declaration
> can be enabled by defining the _GNU_SOURCE symbol prior to including
> certain system header files. In particular, it may not be sufficient
> to simply define _GNU_SOURCE just prior to including the <sys/mman.h>
> header. (e.g. defining the symbol after including <sys/types.h> will
> be completely ineffective.)
>
> In order to suppress the warnings, we define the _GNU_SOURCE symbol
> at the start of the malloc.c.h header file.
>
> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
> ---

Hmmmm, is this even worth worrying about?  I somehow thought this
was only meant to replace malloc on non GNU systems...

>  compat/nedmalloc/malloc.c.h | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/compat/nedmalloc/malloc.c.h b/compat/nedmalloc/malloc.c.h
> index fdcca82..5a44dea 100644
> --- a/compat/nedmalloc/malloc.c.h
> +++ b/compat/nedmalloc/malloc.c.h
> @@ -484,6 +484,10 @@ MAX_RELEASE_CHECK_RATE   default: 4095 unless not HAVE_MMAP
>  #define DLMALLOC_VERSION 20804
>  #endif /* DLMALLOC_VERSION */
>  
> +#if defined(linux)
> +#define _GNU_SOURCE 1
> +#endif
> +
>  #ifndef WIN32
>  #ifdef _WIN32
>  #define WIN32 1

```

## Jonathan Nieder, 2013-04-29 05:06

Subject: Re: [PATCH 6/6] compat/nedmalloc: Fix compiler warnings on linux
Message-ID: <20130429050616.GB8031@elie.Belkin>
URL: https://gitlist.dev/e/20130429050616.GB8031%40elie.Belkin
In-Reply-To: <517C1CF9.2080903@ramsay1.demon.co.uk>

```
Hi,

Ramsay Jones wrote:

> --- a/compat/nedmalloc/malloc.c.h
> +++ b/compat/nedmalloc/malloc.c.h
> @@ -484,6 +484,10 @@ MAX_RELEASE_CHECK_RATE   default: 4095 unless not HAVE_MMAP
>  #define DLMALLOC_VERSION 20804
>  #endif /* DLMALLOC_VERSION */
> 
> +#if defined(linux)
> +#define _GNU_SOURCE 1
> +#endif

If we want to do this, I'd suggest defining _GNU_SOURCE
unconditionally.  Other platforms using glibc would benefit from it,
too, and other platforms not using glibc shouldn't care.

Alternatively it could make sense to see if the latest version from
Niall Douglas[1] works, which includes the following:

	#ifndef HAVE_MREMAP
	#ifdef linux
	#define HAVE_MREMAP 1
	#ifndef _GNU_SOURCE
	#define _GNU_SOURCE /* Turns on mremap() definition */
	#endif
	#else   /* linux */
	#define HAVE_MREMAP 0
	#endif  /* linux */
	#endif  /* HAVE_MREMAP */

It looks equally wrong there, but since it comes from upstream we
could just punt to him if anyone runs into problems. ;-)

My two cents,
Jonathan

[1] http://www.nedprod.com/programs/portable/nedmalloc/

```

## Ramsay Jones, 2013-04-29 23:01

Subject: Re: [PATCH 6/6] compat/nedmalloc: Fix compiler warnings on linux
Message-ID: <517EFBB5.9040502@ramsay1.demon.co.uk>
URL: https://gitlist.dev/e/517EFBB5.9040502%40ramsay1.demon.co.uk
In-Reply-To: <7v7gjmqwxn.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano wrote:
> Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:
> 
>> On linux, when the build variable USE_NED_ALLOCATOR is set, gcc
>> issues the following warnings:
>>
>>     In file included from compat/nedmalloc/nedmalloc.c:63:
>>     .../malloc.c.h: In function 'mmap_resize':
>>     .../malloc.c.h:3762: warning: implicit declaration of function 'mremap'
>>     .../malloc.c.h: In function 'sys_trim':
>>     .../malloc.c.h:4195: warning: comparison between pointer and integer
>>
>> The warnings are caused by the <sys/mman.h> header not enabling the
>> (conditional) declaration of the mremap() function.  The declaration
>> can be enabled by defining the _GNU_SOURCE symbol prior to including
>> certain system header files. In particular, it may not be sufficient
>> to simply define _GNU_SOURCE just prior to including the <sys/mman.h>
>> header. (e.g. defining the symbol after including <sys/types.h> will
>> be completely ineffective.)
>>
>> In order to suppress the warnings, we define the _GNU_SOURCE symbol
>> at the start of the malloc.c.h header file.
>>
>> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
>> ---
> 
> Hmmmm, is this even worth worrying about?  I somehow thought this
> was only meant to replace malloc on non GNU systems...

Maybe not. I certainly won't be using it on Linux. But I wanted to
test the previous patch on Linux and it didn't compile cleanly, so ...
(It passed all tests BTW).

ATB,
Ramsay Jones

```

## Ramsay Jones, 2013-04-29 23:09

Subject: Re: [PATCH 6/6] compat/nedmalloc: Fix compiler warnings on linux
Message-ID: <517EFD9B.4020608@ramsay1.demon.co.uk>
URL: https://gitlist.dev/e/517EFD9B.4020608%40ramsay1.demon.co.uk
In-Reply-To: <20130429050616.GB8031@elie.Belkin>

```
Jonathan Nieder wrote:
> Hi,
> 
> Ramsay Jones wrote:
> 
>> --- a/compat/nedmalloc/malloc.c.h
>> +++ b/compat/nedmalloc/malloc.c.h
>> @@ -484,6 +484,10 @@ MAX_RELEASE_CHECK_RATE   default: 4095 unless not HAVE_MMAP
>>  #define DLMALLOC_VERSION 20804
>>  #endif /* DLMALLOC_VERSION */
>>
>> +#if defined(linux)
>> +#define _GNU_SOURCE 1
>> +#endif
> 
> If we want to do this, I'd suggest defining _GNU_SOURCE
> unconditionally.  Other platforms using glibc would benefit from it,
> too, and other platforms not using glibc shouldn't care.

My original version was unconditional, then I came over all
conservative ... :-D

Actually, in order to reduce the chance of future breakage, it
should really be placed at the beginning of the translation unit
(i.e. at the start of nedmalloc.c, before *any* #includes).

ATB,
Ramsay Jones

```
