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