Skip to content
  • Edward Z. Yang's avatar
    Fix #15594 (--abi-hash with Backpack sometimes fails) · 13ff0b7c
    Edward Z. Yang authored
    Summary:
    For holes, its necessary to "see through" the instantiation
    of the hole to get accurate family instance dependencies.
    For example, if B imports <A>, and <A> is instantiated with
    F, we must grab and include all of the dep_finsts from
    F to have an accurate transitive dep_finsts list.
    
    However, we MUST NOT do this for regular modules.
    First, for efficiency reasons, doing this
    bloats the the dep_finsts list, because we *already* had
    those modules in the list (it wasn't a hole module, after
    all). But there's a second, more important correctness
    consideration: we perform module renaming when running
    --abi-hash.  In this case, GHC's contract to the user is that
    it will NOT go and read out interfaces of any dependencies
    (https://github.com/haskell/cabal/issues/3633);
    
     the point of
    --abi-hash is just to get a hash of the on-disk interfaces
    for this *specific* package.  If we go off and tug on the
    interface for /everything/ in dep_finsts, we're gonna have a
    bad time.  (It's safe to do do this for hole modules, though,
    because the hmap for --abi-hash is always trivial, so the
    interface we request is local.  Though, maybe we ought
    not to do it in this case either...)
    
    Signed-off-by: default avatarEdward Z. Yang <ezyang@fb.com>
    
    Test Plan: validate
    
    Reviewers: alexbiehl, goldfire, bgamari
    
    Subscribers: ppk, shlevy, rwbarton, carter
    
    GHC Trac Issues: #15594
    
    Differential Revision: https://phabricator.haskell.org/D5123
    13ff0b7c