Use 0/1 instead of YES/NO as `__GLASGOW_HASKELL_TH__` macro value
authorHerbert Valerio Riedel <hvr@gnu.org>
Thu, 31 Dec 2015 20:02:50 +0000 (21:02 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Thu, 31 Dec 2015 20:08:25 +0000 (21:08 +0100)
Using `YES`/`NO` causes all sorts of problems as CPP doesn't work on
symbolic tokens but rather on scalar values.

A use like

   #if __GLASGOW_HASKELL_TH__==YES
   {-# LANGUAGE TemplateHaskell #-}
   #endif

doesn't do what one may naively expect, and neither does

   #if __GLASGOW_HASKELL_TH__
   {-# LANGUAGE TemplateHaskell #-}
   #endif

*unless* `YES` happens to evaluate to a non-zero scalar.

`__GLASGOW_HASKELL_TH__ was originally introduced via D396 / #9734.

Fixes #11322

Reviewed By: austin

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

compiler/main/DriverPipeline.hs
docs/users_guide/8.0.1-notes.rst
docs/users_guide/phases.rst

index d3038bc..a6a5e1d 100644 (file)
@@ -2024,9 +2024,9 @@ doCpp dflags raw input_fn output_fn = do
     backend_defs <- getBackendDefs dflags
 
 #ifdef GHCI
-    let th_defs = [ "-D__GLASGOW_HASKELL_TH__=YES" ]
+    let th_defs = [ "-D__GLASGOW_HASKELL_TH__=1" ]
 #else
-    let th_defs = [ "-D__GLASGOW_HASKELL_TH__=NO" ]
+    let th_defs = [ "-D__GLASGOW_HASKELL_TH__=0" ]
 #endif
     -- Default CPP defines in Haskell source
     ghcVersionH <- getGhcVersionPathName dflags
index 0aa221d..013b7b8 100644 (file)
@@ -288,6 +288,11 @@ Template Haskell
    without interpreter support). Also, ``-XTemplateHaskellQuotes`` is
    considered safe under Safe Haskell.
 
+-  The ``__GLASGOW_HASKELL_TH__`` CPP constant denoting support for
+   ``-XTemplateHaskell`` introduced in GHC 7.10.1 has been changed to
+   use the values ``1``/``0`` instead of the previous ``YES``/``NO``
+   values.
+
 -  Partial type signatures can now be used in splices, see
    :ref:`pts-where`.
 
index 1c48cfc..cc4244e 100644 (file)
@@ -328,8 +328,8 @@ defined by your local GHC installation, the following trick is useful:
     .. index::
        single: __GLASGOW_HASKELL_TH__
 
-    This is set to ``YES`` when the compiler supports Template Haskell,
-    and to ``NO`` when not. The latter is the case for a stage-1
+    This is set to ``1`` when the compiler supports Template Haskell,
+    and to ``0`` when not. The latter is the case for a stage-1
     compiler during bootstrapping, or on architectures where the
     interpreter is not available.