[Bug c++/79033] New: asan.c not compiling with make BOOT_CFLAGS='-O0' (or '-O1')
lkrupp at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jan 9 18:12:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79033
Bug ID: 79033
Summary: asan.c not compiling with make BOOT_CFLAGS='-O0' (or
'-O1')
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: lkrupp at gcc dot gnu.org
Target Milestone: ---
When building with:
make BOOT_CFLAGS='-O0' (or '-O1')
This command:
/home/louis/gcc_obj/./prev-gcc/xg++ -B/home/louis/gcc_obj/./prev-gcc/
-B/home/louis/gcc_inst/x86_64-pc-linux-gnu/bin/ -nostdinc++
-B/home/louis/gcc_obj/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs
-B/home/louis/gcc_obj/prev-x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs
-I/home/louis/gcc_obj/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu
-I/home/louis/gcc_obj/prev-x86_64-pc-linux-gnu/libstdc++-v3/include
-I/home/louis/gcc_trunk/libstdc++-v3/libsupc++
-L/home/louis/gcc_obj/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs
-L/home/louis/gcc_obj/prev-x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs
-fno-PIE -c -O1 -gtoggle -DIN_GCC -fno-exceptions -fno-rtti
-fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings
-Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic
-Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror -fno-common
-DHAVE_CONFIG_H -I. -I. -I../../gcc_trunk/gcc -I../../gcc_trunk/gcc/.
-I../../gcc_trunk/gcc/../include -I../../gcc_trunk/gcc/../libcpp/include
-I../../gcc_trunk/gcc/../libdecnumber -I../../gcc_trunk/gcc/../libdecnumber/bid
-I../libdecnumber -I../../gcc_trunk/gcc/../libbacktrace -o asan.o -MT asan.o
-MMD -MP -MF ./.deps/asan.TPo ../../gcc_trunk/gcc/asan.c
gets this error:
../../gcc_trunk/gcc/asan.c:1065:1: error: ‘%d’ directive output may be
truncated writing between 1 and 11 bytes into a region of size 10
[-Werror=format-truncation=]
asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
^~~~~~~~~~~~~~~~~~~~~~~~~~
../../gcc_trunk/gcc/asan.c:1065:1: note: using the range [1, -2147483648] for
directive argument
../../gcc_trunk/gcc/asan.c:1163:26: note: format output between 22 and 32 bytes
into a destination of size 30
use_after_return_class);
The problem is with this code:
1071 char buf[30];
...
1080 int use_after_return_class = -1;
...
1162 snprintf (buf, sizeof buf, "__asan_stack_malloc_%d",
1163 use_after_return_class);
If use_after_return_class is in fact a negative 10-digit number, buf would
overflow. With -O2, the compiler presumably knows more about the value of
use_after_return_class, and asan.c compiles without errors.
Changing buf to an array of length 31 makes the error go away, but I believe
the length should be 32 to leave room for the terminating null byte.
More information about the Gcc-bugs
mailing list