Hi Jakub! Just one item, quickly:
On 2024-10-25T10:19:58+0200, Jakub Jelinek <ja...@redhat.com> wrote: > We have currently 3 different definitions of gcc_assert macro, one used most > of the time (unless --disable-checking) which evaluates the condition at > runtime and also checks it at runtime, then one for --disable-checking GCC > 4.5+ > which looks like > ((void)(UNLIKELY (!(EXPR)) ? __builtin_unreachable (), 0 : 0)) > and a fallback one > ((void)(0 && (EXPR))) > Now, the last one actually doesn't evaluate any of the side-effects in the > argument, just quiets up unused var/parameter warnings. > I've tried to replace the middle definition with > ({ [[assume (EXPR)]]; (void) 0; }) > for compilers which support assume attribute and statement expressions > (surprisingly quite a few spots use gcc_assert inside of comma expressions), > but ran into PR117287, so for now such a change isn't being proposed. > [...] I've attempted to do > x86_64-linux bootstrap with --disable-checking and gcc_assert changed to the > ((void)(0 && (EXPR))) > version when --disable-checking. That version ran into spurious middle-end > warnings > ../../gcc/../include/libiberty.h:733:36: error: argument to ‘alloca’ is too > large [-Werror=alloca-larger-than=] > ../../gcc/tree-ssa-reassoc.cc:5659:20: note: in expansion of macro > ‘XALLOCAVEC’ > int op_num = ops.length (); > int op_normal_num = op_num; > gcc_assert (op_num > 0); > int stmt_num = op_num - 1; > gimple **stmts = XALLOCAVEC (gimple *, stmt_num); > where we have gcc_assert exactly to work-around middle-end warnings. See last year's <https://inbox.sourceware.org/87h6o3z7lr....@euler.schwinge.homeip.net> "Fix false positive for -Walloc-size-larger-than, part II [PR79132]". Grüße Thomas > Guess I'd need to also disable -Werror for this experiment, which actually > isn't a problem with unmodified system.h, because even for > --disable-checking we use the __builtin_unreachable at least in > stage2/stage3 and so the warnings aren't emitted, and even if it used > [[assume ()]]; it would work too because in stage2/stage3 we could again > rely on assume and statement expression support.