From 4db6218ae78b0140db3a2b865c1d82e9e057a0b0 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 6 Aug 2024 17:36:25 +0100 Subject: [PATCH] src/get.c: Disable false GCC warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCC 14.2.1 doesn't seem to be able to analyze this stack frame code correctly. When compiling augeas with --enable-compile-warnings=error that causes the build to fail with the errors below. Disable the error around this code. In file included from /usr/include/string.h:548, from ../gnulib/lib/string.h:41, from internal.h:31, from get.c:30: In function ‘memset’, inlined from ‘push_frame’ at get.c:1095:5: /usr/include/bits/string_fortified.h:59:10: error: ‘__builtin_memset’ offset [0, 31] is out of the bounds [0, 0] [-Werror=array-bounds=] 59 | return __builtin___memset_chk (__dest, __ch, __len, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 | __glibc_objsize0 (__dest)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ If you disable -Warray-bounds only then you get this instead: In file included from /usr/include/string.h:548, from ../gnulib/lib/string.h:41, from internal.h:31, from get.c:30: In function ‘memset’, inlined from ‘push_frame’ at get.c:1100:5: /usr/include/bits/string_fortified.h:59:10: error: ‘__builtin_memset’ writing 32 bytes into a region of size 0 overflows the destination [-Werror=stringop-overflow=] 59 | return __builtin___memset_chk (__dest, __ch, __len, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 | __glibc_objsize0 (__dest)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ In function ‘push_frame’: cc1: note: destination object is likely at address zero Signed-off-by: Richard W.M. Jones --- src/get.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/get.c b/src/get.c index 94b9ba24c..76a3c0cbf 100644 --- a/src/get.c +++ b/src/get.c @@ -1092,7 +1092,14 @@ static struct frame *push_frame(struct rec_state *state, struct lens *lens) { state->fused += 1; struct frame *top = top_frame(state); + /* GCC 14.2.1 cannot analyze this correctly, so it breaks with + * -Werror. Until this is fixed in GCC, disable the warning. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" +#pragma GCC diagnostic ignored "-Wstringop-overflow" MEMZERO(top, 1); +#pragma GCC diagnostic pop top->lens = lens; return top; error: