summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2014-08-18 21:44:25 -0500
committerAustin Seipp <austin@well-typed.com>2014-08-18 23:26:19 -0500
commitbbd031134a571c1020945b2548e3fc4795b5047a (patch)
tree854e8b0828580955e7e130bbc5fa1fde115b93b7 /configure.ac
parentd9a20573f473cc7389004470999b8a318aa6b3f2 (diff)
downloadhaskell-bbd031134a571c1020945b2548e3fc4795b5047a.tar.gz
Bug #9439: Ensure that stage 0 compiler isn't affected
Summary: Bug #9439 will cause miscompilation of GHC's LLVM backend. Here we ensure that an affected compiler isn't used to bootstrap. Test Plan: Attempt to bootstrap GHC with an affected stage 0 compiler. Reviewers: rwbarton, austin Reviewed By: austin Subscribers: simonmar, relrod, ezyang, carter Differential Revision: https://phabricator.haskell.org/D159
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac50
1 files changed, 50 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index a065b31255..1c72cfa3c2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -189,6 +189,56 @@ AC_SUBST([WithGhc])
dnl ** Without optimization some INLINE trickery fails for GHCi
SRC_CC_OPTS="-O"
+dnl ** Bug 9439: Some GHC 7.8 releases had broken LLVM code generator.
+dnl Unfortunately we don't know whether the user is going to request a
+dnl build with the LLVM backend as this is only given in build.mk.
+dnl
+dnl Instead, we try to do as much work as possible here, checking
+dnl whether -fllvm is the stage 0 compiler's default. If so we
+dnl fail. If not, we check whether -fllvm is affected explicitly and
+dnl if so set a flag. The build system will later check this flag
+dnl after the desired build flags are known.
+AC_MSG_CHECKING(whether bootstrap compiler is affected by bug 9439)
+echo "main = putStrLn \"%function\"" > conftestghc.hs
+
+# Check whether LLVM backend is default for this platform
+${WithGhc} conftestghc.hs 2>&1 >/dev/null
+res=`./conftestghc`
+if test "x$res" == "x%object"
+then
+ AC_MSG_RESULT(yes)
+ echo "Buggy bootstrap compiler"
+ echo ""
+ echo "The stage 0 compiler $WithGhc is affected by GHC Bug \#9439"
+ echo "and therefore will miscompile the LLVM backend if -fllvm is"
+ echo "used."
+ echo
+ echo "Please use another bootstrap compiler"
+ exit 1
+fi
+
+# -fllvm is not the default, but set a flag so the Makefile can check
+# -for it in the build flags later on
+${WithGhc} -fforce-recomp -fllvm conftestghc.hs 2>&1 >/dev/null
+if test $? == 0
+then
+ res=`./conftestghc`
+ if test "x$res" == "x%object"
+ then
+ AC_MSG_RESULT(yes)
+ GHC_LLVM_AFFECTED_BY_9439=1
+ elif test "x$res" == "x%function"
+ then
+ AC_MSG_RESULT(no)
+ GHC_LLVM_AFFECTED_BY_9439=0
+ else
+ AC_MSG_WARN(unexpected output $res)
+ fi
+else
+ AC_MSG_RESULT(failed to compile, assuming no)
+fi
+AC_SUBST([GHC_LLVM_AFFECTED_BY_9439])
+
dnl--------------------------------------------------------------------
dnl * Choose host(/target/build) platform
dnl--------------------------------------------------------------------