https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110249
--- Comment #4 from David Brown <david at westcontrol dot com> --- Yes, __builtin_assume_aligned is the best way to write things in this particular case (and optimises fine for -O1 and -O2). It is also clearer in the source code (IMHO), as it shows the programmer's intention better. I am just a little concerned that optimisation hints provided by the programmer via __builtin_unreachable are getting lost at -O2. When the compiler knows that something cannot happen - whether by __builtin_unreachable or by other code analysis - it can often use that information to generate more efficient code. If that information can be used for better code at -O1, but is lost at -O2, then something is wrong in the way that information is collected or passed on inside the compiler. Any case of -O1 generating more efficient code than -O2 is a sign of a problem or limitation. So I am not particularly bothered about this one piece of code - I am reporting the issue because it might be an indication of a wider problem.