https://sourceware.org/bugzilla/show_bug.cgi?id=28614
Bug ID: 28614
Summary: [AArch64] opcodes/aarch64-*:
-Werror=maybe-uninitialized hit unless assertations
are enabled
Product: binutils
Version: 2.38 (HEAD)
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: binutils
Assignee: unassigned at sourceware dot org
Reporter: pexu at sourceware dot mail.kapsi.fi
Target Milestone: ---
Created attachment 13802
--> https://sourceware.org/bugzilla/attachment.cgi?id=13802&action=edit
Use `abort ()' instead of `assert (0)'
Hi.
A recent SME patch set for AArch64 that touches several opcodes/aarch64-* files
uses the following pattern (with variations) in many places:
int output;
switch (input)
{
case /* ... */:
output = /* ... */;
break;
default:
assert (0);
}
action (output);
Unless assert expands (i.e. is enabled) to something non-returning (or
unreachable) at least GCC11 diagnoses output as potentially uninitialized
variable at call site (and rightfully so) leading to a compile error.
So, `assert (0)' should be replaced by something else that is always expanded.
Attaching a patch that simply replaces all `assert (0)' with `abort ()'. This
includes generated code. Given that `abort ()' ``results in the abnormal
termination of the process'' the patch also removes all preceding assertation
that always fire -- This and how unreachable code should be treated is of
course up to debate, so the patch is simply a suggestion (but it does compile).
Exluding gdb there are very few locations that use `assert (0)'. Gold uses
gold_unreachable and gnulib/import/verify.h does not appear to provide any
public interface that would provide a system agnostic __builtin_unreachable. I
presume the latter would generate more optimal code than abort.
--
You are receiving this mail because:
You are on the CC list for the bug.