From: Jonathan Gray Date: Tue, 4 Aug 2020 08:48:34 +0000 (+1000) Subject: util: fix build with clang 10 on mips64 X-Git-Tag: upstream/22.3.5~12242 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0536b691338f2759b850f9ec94634033a5d1f9e1;p=platform%2Fupstream%2Fmesa.git util: fix build with clang 10 on mips64 On mips64, the compiler does not allow use of non-zero argument with __builtin_frame_address(). However, the returned frame address is only used when PIPE_ARCH_X86 is defined. The compile error can be avoided by making #ifdef PIPE_ARCH_X86 cover the getting of frame address too. The argument checking of __builtin_frame_address() has been present as a debug assert in clang 8. In clang 10, there is a proper runtime check for the argument. This is why the build has not failed before. Fixes: dc94a0506f1 ("gallium: Do not add -Wframe-address option for gcc <= 4.4.") from Visa Hankala Signed-off-by: Jonathan Gray Reviewed-by: Ilia Mirkin Part-of: --- diff --git a/src/util/u_debug_stack.c b/src/util/u_debug_stack.c index 01f69e1..86bfb2f 100644 --- a/src/util/u_debug_stack.c +++ b/src/util/u_debug_stack.c @@ -199,7 +199,6 @@ debug_backtrace_capture(struct debug_stack_frame *backtrace, unsigned start_frame, unsigned nr_frames) { - const void **frame_pointer = NULL; unsigned i = 0; if (!nr_frames) { @@ -250,21 +249,21 @@ debug_backtrace_capture(struct debug_stack_frame *backtrace, } #endif +#ifdef PIPE_ARCH_X86 #if defined(PIPE_CC_GCC) && (PIPE_CC_GCC_VERSION > 404) || defined(__clang__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wframe-address" - frame_pointer = ((const void **)__builtin_frame_address(1)); + const void **frame_pointer = ((const void **)__builtin_frame_address(1)); #pragma GCC diagnostic pop -#elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86) +#elif defined(PIPE_CC_MSVC) __asm { mov frame_pointer, ebp } - frame_pointer = (const void **)frame_pointer[0]; + const void **frame_pointer = (const void **)frame_pointer[0]; #else - frame_pointer = NULL; + const void **frame_pointer = NULL; #endif -#ifdef PIPE_ARCH_X86 while (nr_frames) { const void **next_frame_pointer; @@ -287,8 +286,6 @@ debug_backtrace_capture(struct debug_stack_frame *backtrace, frame_pointer = next_frame_pointer; } -#else - (void) frame_pointer; #endif while (nr_frames) {