Sorry. I made a typo. Of course It's a runtime error.

Requirements:
 * uClibc-ng with disabled option "Enable SuSv2 LEGACY functions" (UCLIBC_SUSV2_LEGACY symbol).

Test progam:
$ cat test_valloc.c 
#include <stdlib.h>

int main(int argc, char *argv[])
{
void *p;

p = valloc(1);
if (p == NULL)
return EXIT_FAILURE;

free(p);

return EXIT_SUCCESS;
}

The program above compiles without problems because of declaration in "stdio.h", but it segfaults in runtime:
$ ./test_valloc 
Segmentation fault

Definition of valloc also depends from UCLIBC_SUSV2_LEGACY (libc/stdlib/Makefile.in):
CSRC-$(UCLIBC_SUSV2_LEGACY) += valloc.c

The patch transforms the issue to compile time error.

On Mon, Jul 24, 2017 at 11:29 PM, Waldemar Brodkorb <wbx@uclibc-ng.org> wrote:
Hi Eugene,
Eugene Yudin wrote,

> Hi,
>
> Current uClibc-ng have issue with several different valloc declarations.
>
> malloc.h:
> #ifdef __UCLIBC_SUSV2_LEGACY__
> /* Allocate SIZE bytes on a page boundary.  */
> extern __malloc_ptr_t valloc __MALLOC_P ((size_t __size)) __attribute_malloc__;
> #endif
>
> stdlib.h:
>  #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
>  /* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
>  extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
>  #endif
>
> The second declaration doesn't use the define __UCLIBC_SUSV2_LEGACY__.
> That leads to compile time problems.

Can you explain in which situations this leads to compile time
problems?

best regards
 Waldemar



--
С уважением,
Евгений Юдин