Internal linkage type clarification


There is a bit of confusion about the specification of the internal linkage type verses its implementation across different versions of LLVM. Please see the trac ticket [ New alias handling not compatible with LLVM 3.4 (#9929) · Issues · Glasgow Haskell Compiler / GHC · GitLab ]; clarification as to the proper behavior would be much appreciated.

Thanks much,

What has happened is that globalopt has proven that it is impossible for another module to reason about the existence of ‘foo$def’ and did the following:

  • remove the alias
  • rename the data to have the alias’ name
  • give the data the same linkage as what the alias previously had

AFAICT, LLVM is functioning properly.