[GHC] #8182: Parser.y.pp needs special treatment with -fcmm-sink
GHC
ghc-devs at haskell.org
Tue Aug 27 14:39:42 UTC 2013
#8182: Parser.y.pp needs special treatment with -fcmm-sink
------------------------------------+-------------------------------------
Reporter: thoughtpolice | Owner: thoughtpolice
Type: bug | Status: new
Priority: highest | Milestone: 7.8.1
Component: Build System | Version: 7.7
Keywords: | Operating System: Unknown/Multiple
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+-------------------------------------
This bug is really more of a reminder, but it's critical for the 7.8.1
release.
Right now, `Parser.y.pp` uses a very weird hack to pass `-fcmm-sink` to
the compiler. Here's the relevant comment:
{{{
-- CPP tricks because we want the directives in the output of the
-- first CPP pass.
--
-- Clang note, 6/17/2013 by aseipp: It is *extremely* important (for
-- some reason) that there be a line of whitespace between the two
-- definitions here, and the subsequent use of __IF_GHC_77__ - this
-- seems to be a bug in clang or something, where having the line of
-- whitespace will make the preprocessor correctly format the rendered
-- lines in the 'two step' CPP pass. No, this is not a joke.
#define __IF_GHC_77__ #if __GLASGOW_HASKELL__ >= 707
#define __ENDIF__ #endif
__IF_GHC_77__
-- Required on x86 to avoid the register allocator running out of
-- stack slots when compiling this module with -fPIC -dynamic.
{-# OPTIONS_GHC -fcmm-sink #-}
__ENDIF__
}}}
This is because the parser is first preprocessed before being run with GHC
(which again preprocesses,) so we want the resulting `#ifdef` in the final
`.hs` file.
Things to note:
* We really shouldn't be doing this, it's amazingly fragile. I think the
correct thing to do is to ensure the build system correctly passes `-fcmm-
sink` during the stage[2,3] build.
* `./configure.ac` needs to check to see if the bootstrapping compiler
is `ghc >= 7.7` (or `7.8`) and if it is, ''also'' pass `-fcmm-sink` during
the stage1 build.
* This hack needs to be removed once we can rely on >= 7.8 for
bootstrap. Probably something like the hypothetical 7.12-7.14 timeframe.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8182>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list