
#11312: GHC inlining primitive string literals can affect program output -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect result | Unknown/Multiple at runtime | Test Case: Blocked By: | Blocking: Related Tickets: #11292 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): To collect some of the comments you've made in #8472 and #11292, is this what you want to be done? 1. Introduce a new `String#` type, and make primitive string literals their values, e.g., `"foo"# :: String#`. 2. Allow top-level `String#`s, e.g., {{{#!hs a::Addr# = "foo"# }}} but not top-level `String#` computations, which would entail: * Modify the test `isUnLiftedType ty` in `SetLevels.lvlMFE`, which stops unlifted things getting floated to top level. * Similarly `Simplify.bindingOk`. * Make `CmmLint` check the new invariant. * The STG->Cmm code generator would need to generate some suitable `CmmData` stuff. 3. Introduce primitive operations that manipulate `String#`s (e.g., a Haskell equivalent of `strcmp`) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11312#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler