#5665: Duplicate asm symbols for record fields when TH is used in the module
-----------------------------------+----------------------------------------
    Reporter:  mikhail.vorozhtsov  |        Owner:  simonpj     
        Type:  bug                 |       Status:  new         
    Priority:  normal              |    Milestone:              
   Component:  Compiler            |      Version:  7.3         
    Keywords:                      |     Testcase:              
   Blockedby:                      |   Difficulty:              
          Os:  Unknown/Multiple    |     Blocking:              
Architecture:  Unknown/Multiple    |      Failure:  None/Unknown
-----------------------------------+----------------------------------------

Comment(by simonpj@…):

 commit ac11b1f14c3d0d507cf11eade1855ffc440d3b7b
 {{{
 Author: Simon Peyton Jones <[email protected]>
 Date:   Tue Nov 29 15:49:24 2011 +0000

     Refactor (again) the treatment of record-selector bindings

     We were generating them from the tcg_tcs field of the TcGblEnv,
     but that goes badly wrong when there are top-level Template
     Haskell splices, because the tcg_tcs field grows successively.
     If we generate record-selector binds for all the TyCons in the
     accumulated list, we generate them multiple times for TyCons
     earlier in the program.  This what was happening in Trac #5665:
       data T = T { x :: Int }
       $(f 4)  -- Top level splice
       ..more code..
     Here the record selector bindings for T were being generated
     twice.

     Better instead to generate the record-selector bindings in
     TcTyClsDecls, right where the new TyCons are being declared (as indeed
     they were some time ago).  This pushed me into doing some refactoring:
     instead of returning the record bindings, tcTyAndClassDecls adds them
     to the tcg_binds field of the TcGblEnv.  I think the result is a bit
     nicer, and it has the additional merit of working.

  compiler/typecheck/TcBinds.lhs      |   66
 +++++++++++++++++++++--------------
  compiler/typecheck/TcDeriv.lhs      |    2 +-
  compiler/typecheck/TcInstDcls.lhs   |   20 ++++++-----
  compiler/typecheck/TcRnDriver.lhs   |   36 +++++--------------
  compiler/typecheck/TcRnMonad.lhs    |   15 +++++---
  compiler/typecheck/TcTyClsDecls.lhs |   34 ++++++++++-------
  6 files changed, 91 insertions(+), 82 deletions(-)
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5665#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to