There is a compiler bug in VS2015 that results in SSE instructions being
emitted when they shouldn't be. Since Firefox still needs to remain
compatible with ancient hardware that doesn't support SSE, this is causing
crashes on Firefox built with VS2015 (see bug 1265615).
The good news is glandium found a pretty minimal reproduce case and
reported the bug to Microsoft.
The bad news is the issue still reproduces in the latest pre-release
version of the Visual C++ toolchain.
The worse news is we'll have to revert to building Firefox 48 (current
Aurora) and 49 (current central) with VS2013. Bugs 1270664 and 1270714
track. Aurora will likely land soon. Central might take a few days, as I
believe VS2013 is a bit broken on central at the moment.
This is really a bummer because a lot of you have taken the time to upgrade
to VS2015 and we got some really nice PGO build time wins out of the
transition (Windows PGO builds were just as fast as Linux PGO builds in
automation). But, stability is stability.
I'll try to stand up automation to ensure central remains buildable with
VS2015. This will add extra work and strain on automation and likely make
writing C++ that remains compatible with multiple Visual Studio versions
slightly harder. This is unfortunate, but I think necessary since people
will want to use VS2015 for development.
FWIW, the crashes we've seen so far are from incorrectly emitted movss
instructions. This instruction is part of the original SSE instruction set,
which was initially unveiled by Intel on the Pentium 3 in 1999 and later by
AMD on the Duron and Athlon XP in 2000-2001. I'm not sure why we still need
Firefox to run on processors manufactured in the 90s. By comparison, Chrome
has required SSE2 (Intel support since Pentium 4 in 2001 and AMD support
since Opteron and Athlon 64 in 2003) since Chrome 35, which was released in
mid 2014 (https://bugs.chromium.org/p/chromium/issues/detail?id=348761
Since we've dropped support for OS X <10.9 and are talking about dropping
Windows XP support, I'd urge us to consider dropping support for processors
without SSE instructions as well. I believe our continued insistence to
support these ancient platforms hinders our developer productivity and
sacrifices product quality by not allowing us to take advantage of modern
technologies. I believe this puts us at a competitive disadvantage compared
to other browser vendors. </soapbox_mini_rant>