Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#10251 closed bug (fixed)

Bad rule generated in pathological cases

Reported by: simonpj Owned by:
Priority: normal Milestone: 7.10.2
Component: Compiler Version: 7.10.1
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case: deSugar/should_compile/T10251
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:

Description (last modified by simonpj)

George reports: I am also seeing this on ghc 7.10.1, not sure if this is another instance of this bug (#9160):

cabal install bitmap
[ 3 of 10] Compiling Data.Bitmap.IO ( Data/Bitmap/IO.hs, dist/build/Data/Bitmap/IO.o )

Data/Bitmap/IO.hs:1248:1: Warning:
    SPECIALISE pragma for non-overloaded function ‘myPlusPtr’

Data/Bitmap/IO.hs:1249:1: Warning:
    SPECIALISE pragma for non-overloaded function ‘myPlusPtr’

ghc: panic! (the 'impossible' happened)
    (GHC version 7.10.1 for x86_64-apple-darwin):
        Template variable unbound in rewrite rule
    $fPixelComponentFloat3_X2Rc
    [$fPixelComponentFloat3_X2Rc]
    [$fPixelComponentFloat3_X2Rc]
    []
    []

But it's not #9160 at all. So I'm making a new ticket.

Change History (5)

comment:1 Changed 3 years ago by simonpj

Description: modified (diff)

Slyfox says I've distilled it a bit to a selfcontained test:

-- sf 9160 # cat B.hs 
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -O2 #-}
module B (bug) where

data D = D
data E = E

class Storable a where
    poke2 :: a -> E
instance Storable D where
    poke2 = poke2 -- undefined

class Foo a where
instance Foo D where

class (Foo t, Storable t) => FooStorable t where

instance FooStorable D where
    {-# SPECIALIZE instance FooStorable D #-}

{-# SPECIALIZE bug :: D -> E #-}

bug
  :: FooStorable t
  => t
  -> E
bug = poke2
{-
sf 9160 # ghc -c -fforce-recomp -Wall B.hs 

B.hs:5:10: Warning: Defined but not used: data constructor ‘D’

B.hs:6:10: Warning: Defined but not used: data constructor ‘E’
ghc: panic! (the 'impossible' happened)
  (GHC version 7.10.1 for x86_64-unknown-linux):
        Template variable unbound in rewrite rule
  $fFooStorableD_XU
  [$fFooStorableD_XU]
  [$fFooStorableD_XU]
  []
  []

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
-}

comment:2 Changed 3 years ago by Simon Peyton Jones <simonpj@…>

In cfb60421a43f23e75ead85d99cec207a156f9312/ghc:

Do not quantify over the function itself in a RULE

We were erroneously quantifying over the function when it
had a dictionary type. A bit pathological, but possible.

This fixes Trac #10251

comment:3 Changed 3 years ago by simonpj

Milestone: 7.10.2
Status: newmerge
Test Case: deSugar/should_compile/T10251

Very good, thanks for the report.

This is worth merging to 7.10, because it makes the bitmap library compile again

Simon

comment:4 Changed 3 years ago by thoughtpolice

Resolution: fixed
Status: mergeclosed

comment:5 Changed 3 years ago by simonpj

#10389 is another example.

Note: See TracTickets for help on using tickets.