Commit 36811bfd authored by Ben Gamari's avatar Ben Gamari 🐢

AsmCodeGen: Ensure LLVM .line directives are sorted

Apparently some Clang 3.6 expects these to be sorted.

Patch due to Peter Wortmann.

Fixes #10687.
parent 59883ae3
...@@ -82,6 +82,7 @@ import qualified Stream ...@@ -82,6 +82,7 @@ import qualified Stream
import Data.List import Data.List
import Data.Maybe import Data.Maybe
import Data.Ord ( comparing )
import Control.Exception import Control.Exception
#if __GLASGOW_HASKELL__ < 709 #if __GLASGOW_HASKELL__ < 709
import Control.Applicative (Applicative(..)) import Control.Applicative (Applicative(..))
...@@ -428,12 +429,15 @@ cmmNativeGens dflags this_mod modLoc ncgImpl h dbgMap us ...@@ -428,12 +429,15 @@ cmmNativeGens dflags this_mod modLoc ncgImpl h dbgMap us
cmmNativeGen dflags this_mod modLoc ncgImpl us fileIds dbgMap cmmNativeGen dflags this_mod modLoc ncgImpl us fileIds dbgMap
cmm count cmm count
let newFileIds = fileIds' `minusUFM` fileIds -- Generate .file directives for every new file that has been
-- used. Note that it is important that we generate these in
-- ascending order, as Clang's 3.6 assembler complains.
let newFileIds = sortBy (comparing snd) $ eltsUFM $ fileIds' `minusUFM` fileIds
pprDecl (f,n) = ptext (sLit "\t.file ") <> ppr n <+> pprDecl (f,n) = ptext (sLit "\t.file ") <> ppr n <+>
doubleQuotes (ftext f) doubleQuotes (ftext f)
emitNativeCode dflags h $ vcat $ emitNativeCode dflags h $ vcat $
map pprDecl (eltsUFM newFileIds) ++ map pprDecl newFileIds ++
map (pprNatCmmDecl ncgImpl) native map (pprNatCmmDecl ncgImpl) native
-- force evaluation all this stuff to avoid space leaks -- force evaluation all this stuff to avoid space leaks
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment