[GHC] #9142: LLVM 3.5.0 rejects aliases used by LLVM codegen

GHC ghc-devs at haskell.org
Fri Nov 21 21:31:51 UTC 2014


#9142: LLVM 3.5.0 rejects aliases  used by LLVM codegen
-------------------------------------+-------------------------------------
              Reporter:  bgamari     |            Owner:
                  Type:  bug         |           Status:  new
              Priority:  high        |        Milestone:  7.10.1
             Component:  Compiler    |          Version:  7.8.2
            Resolution:              |         Keywords:
      Operating System:              |     Architecture:  Unknown/Multiple
  Unknown/Multiple                   |       Difficulty:  Unknown
       Type of failure:              |       Blocked By:
  None/Unknown                       |  Related Tickets:
             Test Case:              |
              Blocking:  4213        |
Differential Revisions:  Phab:D155   |
-------------------------------------+-------------------------------------

Comment (by Herbert Valerio Riedel <hvr@…>):

 In [changeset:"e16a342d70b92fc8480793d3ec911853f0c31e44/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="e16a342d70b92fc8480793d3ec911853f0c31e44"
 llvmGen: Compatibility with LLVM 3.5 (re #9142)

 Due to changes in LLVM 3.5 aliases now may only refer to definitions.
 Previously to handle symbols defined outside of the current commpilation
 unit GHC would emit both an `external` declaration, as well as an alias
 pointing to it, e.g.,

     @stg_BCO_info = external global i8
     @stg_BCO_info$alias = alias private i8* @stg_BCO_info

 Where references to `stg_BCO_info` will use the alias
 `stg_BCO_info$alias`. This is not permitted under the new alias
 behavior, resulting in errors resembling,

     Alias must point to a definition
     i8* @"stg_BCO_info$alias"

 To fix this, we invert the naming relationship between aliases and
 definitions. That is, now the symbol definition takes the name
 `@stg_BCO_info$def` and references use the actual name, `@stg_BCO_info`.
 This means the external symbols can be handled by simply emitting an
 `external` declaration,

     @stg_BCO_info = external global i8

 Whereas in the case of a forward declaration we emit,

     @stg_BCO_info = alias private i8* @stg_BCO_info$def

 Reviewed By: austin

 Differential Revision: https://phabricator.haskell.org/D155
 }}}

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


More information about the ghc-tickets mailing list