-ddump-cmm doesn't escape non-ascii/non-printable characters
For instance, the string literal "\102\232\13\0Hello, world!\n\178\14\89\179\1\176\4\205\128\49\192\195"
came out of ghc --make -ddump-cmm hell.hs | less looking like:
cUz_str:
I8[] "fè^M<C0><80>Hello, world!
²^NY³^A°^DÍ<U+0080>1ÀÃ"
(with LANG=un_US.UTF-8 and a UTF-8 capable terminal; this value gets passed to unpackCStringUtf8#)
I also have to wonder what the point of using UTF-8 when the original string literal only contains characters in the range ['0'..'\255'] is...
The full program was:
`/x-haskell # LANGUAGE ForeignFunctionInterface # import Foreign.Ptr import Foreign.C.String
foreign import ccall "dynamic" mkFun :: FunPtr (IO ()) -> IO ()
code :: String code = "\102\232\13\0Hello, world!\n\178\14\89\179\1\176\4\205\128\49\192\195"
main :: IO () main = withCString code (mkFun . castPtrToFunPtr) `
Note: this doesn't seem to actually work :-(. Oh, right, I'm only setting the lowest 8 bits of each register. That explains that...
Trac metadata
Trac field | Value |
---|---|
Version | 6.6.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | Unknown |
Architecture | Unknown |