Commit b0d53a83 authored by Nicolas Trangez's avatar Nicolas Trangez Committed by Ben Gamari

Turn `__GLASGOW_HASKELL_LLVM__` into an integer again

In GHC < 8.0.1, the value of `__GLASGOW_HASKELL_LLVM__`, exposed
through the preprocessor when compiled with `-fllvm`, was an integer
value, encoded according to some rules specified in the user guide.

Due to an oversight, in GHC 8.0.1 the value of this define became a
tuple, exposed as e.g. `(3, 7)`. This was an unintended regression.

This patch turns the value of the `__GLASGOW_HASKELL_LLVM__` definition
into a single integer again, but changes the formatting of said number
slightly. Before, any LLVM version where the major or minor component >=
10 would cause ambiguous values for `__GLASGOW_HASKELL_LLVM__`. With
this patch, the value is in line with `__GLASGOW_HASKELL__`, adding a
padding `0` in-between major and minor component if applicable (we
assume no minors >= 100 will ever exist).

The documentation in the user guide is updated accordingly, and a
reference is made in the 8.0.2 release notes.

Test Plan: validate

Reviewers: bgamari, erikd

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2552

GHC Trac Issues: #12628
parent 0014fa56
......@@ -2099,8 +2099,12 @@ getBackendDefs :: DynFlags -> IO [String]
getBackendDefs dflags | hscTarget dflags == HscLlvm = do
llvmVer <- figureLlvmVersion dflags
return $ case llvmVer of
Just n -> [ "-D__GLASGOW_HASKELL_LLVM__="++show n ]
Just n -> [ "-D__GLASGOW_HASKELL_LLVM__=" ++ format n ]
_ -> []
where
format (major, minor)
| minor >= 100 = error "getBackendDefs: Unsupported minor version"
| otherwise = show $ (100 * major + minor :: Int) -- Contract is Int
getBackendDefs _ =
return []
......
......@@ -40,6 +40,12 @@ Compiler
defaulting to decimal, hexadecimal if the address starts with `0x`, and
octal if the address starts with `0`.
- Due to an oversight in GHC 8.0.1, the value of the preprocessor macro
``__GLASGOW_HASKELL_LLVM__``, which exposes the LLVM version used by GHC, was
no longer an integer. This value is now turned into an integer again, but the
formatting is changed to be in line with ``__GLASGOW_HASKELL__``
(:ghc-ticket:`12628`).
Runtime system
~~~~~~~~~~~~~~
......
......@@ -291,7 +291,9 @@ defined by your local GHC installation, the following trick is useful:
Only defined when ``-fllvm`` is specified. When GHC is using version
``x.y.z`` of LLVM, the value of ``__GLASGOW_HASKELL_LLVM__`` is the
integer xy.
integer xyy (if y is a single digit, then a leading zero
is added, so for example when using version 3.7 of LLVM,
``__GLASGOW_HASKELL_LLVM__==307``).
``__PARALLEL_HASKELL__``
.. index::
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment