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
@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