-
Notifications
You must be signed in to change notification settings - Fork 569
Description
When I compile flex on ArchLinux:
./configure
make
I get the following warnings:
misc.c: In function 'allocate_array':
misc.c:148:8: warning: implicit declaration of function 'reallocarray'; did you mean 'reallocate_array'? [-Wimplicit-function-declaration]
mem = reallocarray(NULL, (size_t) size, element_size);
^~~~~~~~~~~~
reallocate_array
misc.c:148:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
mem = reallocarray(NULL, (size_t) size, element_size);
^
misc.c: In function 'reallocate_array':
misc.c:666:12: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
new_array = reallocarray(array, (size_t) size, element_size);
The real problem is the following Segmentation fault:
./stage1flex -o stage1scan.c ./scan.l
make[2]: *** [Makefile:1696: stage1scan.c] Segmentation fault (core dumped)
The backtrace is:
Program received signal SIGSEGV, Segmentation fault.
flexinit (argc=4, argv=0x7fffffffe6e8) at main.c:977
977 action_array[0] = '\0';
(gdb) bt
#0 flexinit (argc=4, argv=0x7fffffffe6e8) at main.c:977
#1 0x000055555558337f in flex_main (argc=4, argv=0x7fffffffe6e8) at main.c:168
#2 0x00007ffff76f5f6a in __libc_start_main () from /usr/lib/libc.so.6
#3 0x000055555556e4fa in _start ()
(gdb) print action_array
$1 = 0x557c52c0 <error: Cannot access memory at address 0x557c52c0>
After testing code, the problem comes from reallocarray().
I tried the following test program:
#include <stdlib.h>
int main(int argc, char **argv)
{
char *foo;
foo = reallocarray(NULL, (size_t) 2048, 1);
foo[0] = '\0';
return 0;
}
and it produces the same behavior.
After reading manuals, I resolve the problem (for my test program) adding -D_GNU_SOURCE to CFLAGS.
flex-2.6.4 has been packaged for Arch and I seen no patch about reallocarray(). I appears as a mystery for me...