On Jan 29, 2007, "Manuel López-Ibáñez" <[EMAIL PROTECTED]> wrote:

> * You can add a return 0 or an exit(1) at the end of the function or
> in a default label. Since in your case the code is unreachable, the
> optimiser may remove it or it will never be executed.

But this would generate additional code for no useful purpose.
See Ralf Baechle's posting with Subject: False ‘noreturn’ function
does return warnings.

/me thinks it would make sense for us to add a __builtin_unreachable()
that would indicate to GCC that no further action is needed from that
point on.  A command-line flag could then tell whether GCC should
generate abort() for such cases, or take a more general "undefined
behavior" approach without generating additional code to that end.

Meanwhile, there's __builtin_trap() already, and Ralf might use that
even to remove the asm volatile, and Paweł could use it in a default:
label.  It's still worse than a __builtin_assume(e == X || e == Y),
but it's probably much simpler to implement.  But then,
__builtin_unreachable() might very well be implemented as
__builtin_assume(0).

-- 
Alexandre Oliva         http://www.lsd.ic.unicamp.br/~oliva/
FSF Latin America Board Member         http://www.fsfla.org/
Red Hat Compiler Engineer   [EMAIL PROTECTED], gcc.gnu.org}
Free Software Evangelist  [EMAIL PROTECTED], gnu.org}

Reply via email to