On Mon, Apr 28, 2014 at 11:05:06AM +0200, Richard Biener wrote: > On Fri, Apr 25, 2014 at 5:35 PM, Martin Jambor <mjam...@suse.cz> wrote: > > Hi, > > > > the patch below might be useful for testcase preparation and debugging > > compiler bugs such as PR 60965. When > > -ftrap-on-impossible-devirtualization is supplied on the command line, > > it makes the devirtualization produce __builtin_trap instead of > > __builtin_unreachable when it comes to the conclusion that there is no > > legal target of a virtual call. > > > > Apart from dealing with our bugs, it may be even useful to debug > > compiled programs when a user triggers some sort of illegal > > devirtualization, typically by missing a type check somewhere. > > Currently the compiled program might simply take a wrong branch, with > > the patch it will abort. > > > > Bootstrapped and tested (with the option on) on x86_64-linux, I have > > also successfully LTO built Firefox with it. If I add some > > documentation, would like to see this in trunk? > > It's useful for debugging, so yes. Not sure about the option name though. > Maybe we should have a generic -ftrap-on-unreachable flag instead > and handle all __builtin_unreachable () like that (for example by > folding or by simply make __builtin_unreachable () alias to __builtin_trap > ()).
-fsanitize=unreachable should already do that. With -fsanitize=unreachable -fsanitize-undefined-trap-on-error it should fold __builtin_unreachable () to __builtin_trap (), otherwise to __ubsan_handle_builtin_unreachable () call. So, from this POV, the new option is redundant. Jakub