-no-link doesn't remove Link nodes from ModuleGraph
The correct implementation of -no-link is to not construct a build plan/module graph which contains link nodes.
What currently happens is the build graph contains the link node (as evidenced by the 8 steps of the build plan) but the last step is just skipped.. which could be quite confusing.
[1 of 8] Compiling GHCi.UI.Info ( ghc/GHCi/UI/Info.hs, _new/stage1/ghc/build/GHCi/UI/Info.o, _new/stage1/ghc/build/GHCi/UI/Info.dyn_o )
[2 of 8] Compiling GHCi.UI.Monad ( ghc/GHCi/UI/Monad.hs, _new/stage1/ghc/build/GHCi/UI/Monad.o, _new/stage1/ghc/build/GHCi/UI/Monad.dyn_o )
[3 of 8] Compiling GHCi.UI.Tags ( ghc/GHCi/UI/Tags.hs, _new/stage1/ghc/build/GHCi/UI/Tags.o, _new/stage1/ghc/build/GHCi/UI/Tags.dyn_o )
[4 of 8] Compiling GHCi.Util ( ghc/GHCi/Util.hs, _new/stage1/ghc/build/GHCi/Util.o, _new/stage1/ghc/build/GHCi/Util.dyn_o )
[5 of 8] Compiling GHCi.Leak ( ghc/GHCi/Leak.hs, _new/stage1/ghc/build/GHCi/Leak.o, _new/stage1/ghc/build/GHCi/Leak.dyn_o )
[6 of 8] Compiling GHCi.UI ( ghc/GHCi/UI.hs, _new/stage1/ghc/build/GHCi/UI.o, _new/stage1/ghc/build/GHCi/UI.dyn_o )
[7 of 8] Compiling Main ( ghc/Main.hs, _new/stage1/ghc/build/Main.o, _new/stage1/ghc/build/Main.dyn_o )