|
Message-Id: <C6CDEAF1-7C7E-4A22-89F6-42869C281225@gmail.com> Date: Mon, 29 Aug 2016 20:05:00 -0400 From: Assaf Gordon <assafgordon@...il.com> To: musl@...ts.openwall.com Subject: assert_fail without Noreturn Hello, It seems "assert_fail()" does not have a "noreturn" attribute - it was removed in this commit: commit 2c1f8fd5da3306fd7c8a2267467e44eb61f12dd4 Author: rofl0r <retnyg@....net> Date: Tue Jan 1 07:59:11 2013 +0100 __assert_fail(): remove _Noreturn, to get proper stack traces for _Noreturn functions, gcc generates code that trashes the stack frame, and so it makes it impossible to inspect the causes of an assert error in gdb. abort() is not affected (i have not yet investigated why). However, in recent GCC versions (at least 5.2.0) this causes a compiler warning (or error with -Werror). A contrived example: $ cat 2.c #include <assert.h> #include <stdio.h> FILE* foo (int i) { FILE *f; if (i>0) f = fopen("foo.bar","r"); else assert(!"error"); return f; } $ musl-gcc -O2 -Wall -Wextra -c 2.c 2.c: In function ‘foo’: 2.c:12:11: error: ‘f’ may be used uninitialized in this function [-Werror=maybe-uninitialized] return f; ^ cc1: some warnings being treated as errors Using 'gcc' instead of 'musl-gcc' shows no warnings. The compiler is: $ musl-gcc -v Using built-in specs. Reading specs from /usr/local/musl/lib/musl-gcc.specs rename spec cpp_options to old_cpp_options COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/5.2.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../gcc-5.2.0/configure --enable-languages=c,c++ Thread model: posix gcc version 5.2.0 (GCC) Using musk-libc version 1.1.15 from tarball. Perhaps putting "_Noreturn" in "assert_fail" can be reconsidered ? Or perhaps there's another way to avoid this warning ? Thanks, - assaf
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.