On 10 July 2017 at 16:08, Eric Engestrom <eric.engest...@imgtec.com> wrote: > No implementation of unreachable() should allow code execution to > keep going past it. > > We can discuss whether we should have a dead loop, abort(), or do > something else, but the current "meh, let's just keep going" is > just wrong. > > Cc: mesa-sta...@lists.freedesktop.org > Signed-off-by: Eric Engestrom <eric.engest...@imgtec.com> > --- > src/util/macros.h | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/src/util/macros.h b/src/util/macros.h > index a10f1de814..16682bf6e8 100644 > --- a/src/util/macros.h > +++ b/src/util/macros.h > @@ -84,7 +84,11 @@ do { \ > __assume(0); \ > } while (0) > #else > -#define unreachable(str) assert(!str) > +#define unreachable(str) \ > +do { \ > + assert(!str); \ > + while(1); \ > +} while (0) > #endif Strictly speaking the current solution follows what the builtin does - pretty much anything is possible. In release builds the assert gets purged and we end up at the mercy of the compiler.
Simple test showed varying behaviour - wrong case statement picked (-O0), straight crash (-O1), semi-dead loop followed by a crash (-O2, -O3). I think we'd want to stick with the current solution, but either way is fine with me. -Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev