[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