dnl This Source Code Form is subject to the terms of the Mozilla Public dnl License, v. 2.0. If a copy of the MPL was not distributed with this dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. dnl Check if the compiler is gcc and has PR49911. If so dnl disable vrp. AC_DEFUN([MOZ_GCC_PR49911], [ if test "$GNU_CC"; then AC_MSG_CHECKING(for gcc PR49911) ac_have_gcc_pr49911="no" AC_LANG_SAVE AC_LANG_CPLUSPLUS _SAVE_CXXFLAGS=$CXXFLAGS CXXFLAGS="-O2" AC_TRY_RUN([ extern "C" void abort(void); typedef enum { eax, ecx, edx, ebx, esp, ebp, esi, edi } RegisterID; union StateRemat { RegisterID reg_; int offset_; }; static StateRemat FromRegister(RegisterID reg) { StateRemat sr; sr.reg_ = reg; return sr; } static StateRemat FromAddress3(int address) { StateRemat sr; sr.offset_ = address; if (address < 46 && address >= 0) { abort(); } return sr; } struct FrameState { StateRemat dataRematInfo2(bool y, int z) { if (y) return FromRegister(RegisterID(1)); return FromAddress3(z); } }; FrameState frame; StateRemat x; __attribute__((noinline)) void jsop_setelem(bool y, int z) { x = frame.dataRematInfo2(y, z); } int main(void) { jsop_setelem(0, 47); } ], true, ac_have_gcc_pr49911="yes", true) CXXFLAGS="$_SAVE_CXXFLAGS" AC_LANG_RESTORE if test "$ac_have_gcc_pr49911" = "yes"; then AC_MSG_RESULT(yes) CFLAGS="$CFLAGS -fno-tree-vrp" CXXFLAGS="$CXXFLAGS -fno-tree-vrp" else AC_MSG_RESULT(no) fi fi ])