[GHC] #9122: Make Lint check for bad uses of `unsafeCoerce`

GHC ghc-devs at haskell.org
Tue Feb 10 11:19:48 UTC 2015


#9122: Make Lint check for bad uses of `unsafeCoerce`
-------------------------------------+-------------------------------------
        Reporter:  simonpj           |                   Owner:  qnikst
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  Compiler          |                 Version:  7.8.2
      Resolution:                    |                Keywords:  newcomer
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  None/Unknown      |  Unknown/Multiple
      Blocked By:                    |               Test Case:
 Related Tickets:                    |                Blocking:
                                     |  Differential Revisions:  Phab:D637
-------------------------------------+-------------------------------------
Description changed by simonpj:

Old description:

> I think it would be a great idea for Core Lint to check for uses of
> `unsafeCoerce` that don't obey the rules.  It won't catch all cases, of
> course, but it would have caught #9035. Specficially, look for:
>  * Coercions between lifted and unboxed types
>  * Coercion between unboxed types of different sizes
>  * Coercion between unboxed ints and floats.
>
> Would anyone like to make a patch for this?  Anything that can be checked
> by Core Lint, should be checked!
>
> I'm afraid I don't know where to look for the reason for the int/float
> difficulty.  I'd write a tiny function that exhibits the unsafe
> conversion and look the code it generates.
>
> Simon

New description:

 I think it would be a great idea for Core Lint to check for uses of
 `unsafeCoerce` that don't obey the rules.  It won't catch all cases, of
 course, but it would have caught #9035. Specficially, look for:
  * Coercions between lifted and unboxed types
  * Coercion between unboxed types of different sizes
  * Coercion between unboxed ints and floats.

 Would anyone like to make a patch for this?  Anything that can be checked
 by Core Lint, should be checked!

 I'm afraid I don't know where to look for the reason for the int/float
 difficulty.  I'd write a tiny function that exhibits the unsafe conversion
 and look the code it generates.

 Wiki design page [wiki:BadUnsafeCoercions]

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9122#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list