[Mesa-dev] [PATCH mesa] util: enforce unreachable() semantic

Eric Engestrom eric.engestrom at imgtec.com
Mon Jul 10 16:09:36 UTC 2017


On Monday, 2017-07-10 17:02:48 +0100, Emil Velikov wrote:
> On 10 July 2017 at 16:08, Eric Engestrom <eric.engestrom at 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-stable at lists.freedesktop.org
> > Signed-off-by: Eric Engestrom <eric.engestrom at 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.

Hmm, you're right actually, I misremembered that.
Withdrawing the patch, as no such guarantee exist in other
implementations either. "anything can happen" is the point here.

> 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


More information about the mesa-dev mailing list