This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [c++] switch ( enum ) vs. default statment.


On Tue, Feb 06, 2007 at 04:44:50PM -0200, Alexandre Oliva 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).

The Linux/MIPS BUG() macro uses a break 512 instruction while
__builtin_trap() generates a plain break that is break 0 instruction.
Aside of that __builtin_trap() would be fine ...

  Ralf


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]