> #3 from the tldr and #2 from the main post contradict each other, no?

I was out to lunch and didn't realize that I was tossing around two
macro names.  There's only one.

The name we liked was MOZ_ASSUME_UNREACHABLE; MOZ_ASSUME_NOT_REACHED
won't exist in a minute, after I push.  There's no difference between
them.

Sorry for the confusion!

On Fri, Jun 28, 2013 at 7:07 PM, Kyle Huey <m...@kylehuey.com> wrote:
> On Fri, Jun 28, 2013 at 7:04 PM, Justin Lebar <justin.le...@gmail.com>
> wrote:
>>
>> tl;dr - Changes from bug 820686:
>>
>>  1. We renamed MOZ_NOT_REACHED to MOZ_ASSUME_UNREACHABLE.
>>  2. In Gecko, please use MOZ_CRASH instead of MOZ_NOT_REACHED unless you
>> care
>>     about code size or perf.
>>  3. In JS, we removed JS_NOT_REACHED in favor of MOZ_ASSUME_UNREACHABLE.
>>  4. Don't put code after MOZ_CRASH() or MOZ_ASSUME_UNREACHABLE(); it just
>> gives
>>     a false sense of security.
>>
>> Dear all,
>>
>> Assuming bug 820686 sticks, we've made the following changes to the
>> MOZ_NOT_REACHED macro.
>>
>> 1) MOZ_NOT_REACHED is now called MOZ_ASSUME_UNREACHABLE.  It still does
>> the
>> same thing it used to: It informs the compiler that the given line cannot
>> be
>> reached.  If execution does reach that line, the program's behavior is
>> undefined.  (The program will likely crash, but maybe not.)
>>
>> 2) JS_NOT_REACHED is now replaced by MOZ_NOT_REACHED.  There's no change
>> in
>> behavior.
>>
>> 3) In Gecko, we replaced all MOZ_NOT_REACHED's with MOZ_CRASH.  This /is/
>> a
>> change in behavior: We replaced undefined behavior (whatever the compiler
>> felt
>> like doing) with defined behavior (a crash).
>>
>> I hope this change sets a precedent that Gecko hackers should use
>> MOZ_ASSUME_UNREACHABLE() only where they care about code size or
>> performance.
>> In general, I think it's better to have defined behavior, which you can
>> get
>> with MOZ_CRASH() (crash in all builds) or MOZ_ASSERT(false) (crash in
>> debug
>> builds only).
>>
>> For example, the new precedent I hope to set is that we should use
>> MOZ_CRASH()
>> or MOZ_ASSERT(false) in the default branch of a switch statement, except
>> where
>> we care about size or perf.  Adding in even a small chance of undefined
>> behavior when we don't care about size or perf is just a premature
>> optimization, IMO.
>>
>> JS hackers can continue using MOZ_ASSUME_UNREACHABLE as they have been.
>>
>> 4) We removed code which comes after MOZ_CRASH() AND
>> MOZ_ASSUME_UNREACHABLE().
>> Code like
>>
>>   MOZ_ASSUME_UNREACHABLE();
>>   return false;
>>
>> just gives us a false sense of security; there is no guarantee that the
>> |return
>> false| will be hit.  It's not necessary to add a return statement to
>> placate
>> the compiler; all of the compilers we care about understand that
>> MOZ_ASSUME_UNREACHABLE() and MOZ_CRASH() are noreturn.
>>
>> Happy hacking,
>> -Justin
>> _______________________________________________
>> dev-platform mailing list
>> dev-platform@lists.mozilla.org
>> https://lists.mozilla.org/listinfo/dev-platform
>
>
> #3 from the tldr and #2 from the main post contradict each other, no?
>
> - Kyle
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to