[GHC] #13838: -Wdeferred-type-errors; ghc: panic!; VoidRep; ((() -> ()) :: *) ~# (IO Any :: *)

GHC ghc-devs at haskell.org
Sat Jun 17 00:59:40 UTC 2017


#13838: -Wdeferred-type-errors; ghc: panic!; VoidRep; ((() -> ()) :: *) ~# (IO Any
:: *)
-------------------------------------+-------------------------------------
           Reporter:  harry          |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.0.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Compile-time
  Unknown/Multiple                   |  crash or panic
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 My Compiler told me to report this so here you go:

 {{{
 [1 of 1] Compiling Main             ( ghc_bug.hs, interpreted )

 ghc_bug.hs:3:1: warning: [-Wdeferred-type-errors]
     * Couldn't match expected type `IO t0' with actual type `() -> ()'
     * Probable cause: `main' is applied to too few arguments
       In the expression: main
       When checking the type of the IO action `main'

 ghc_bug.hs:3:8: warning: [-Wdeferred-type-errors]
     * Couldn't match expected type `() -> () -> ()'
                   with actual type `()'
     * The function `()' is applied to one argument,
       but its type `()' has none
       In the expression: () ()
       In an equation for `main': main = () ()
 ghc: panic! (the 'impossible' happened)
   (GHC version 8.0.1 for x86_64-unknown-linux):
         corePrepPgm
   [False] cobox_r1a0 = typeError
                          @ 'VoidRep
                          @ ((() -> ()) :: *) ~# (IO Any :: *)
                          "ghc_bug.hs:3:1: error:\n\
                          \    * Couldn't match expected type `IO t0' with
 actual type `() -> ()'\n\
                          \    * Probable cause: `main' is applied to too
 few arguments\n\
                          \      In the expression: main\n\
                          \      When checking the type of the IO action
 `main'\n\
                          \(deferred type error)"#

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

 }}}

 {{{#!hs
 main :: () -> ()
 main = () ()
 }}}

 which that in "ghc_bug.hs" "ghc ghc_bug.hs -fdefer-type-errors -dcore-lint
 -v" gives me the following:

 {{{
 Glasgow Haskell Compiler, Version 8.0.1, stage 2 booted by GHC version
 7.10.3
 Using binary package database:
 /usr/lib/ghc-8.0.1/package.conf.d/package.cache
 Using binary package database:
 /home/harry/.ghc/x86_64-linux-8.0.1/package.conf.d/package.cache
 loading package database /usr/lib/ghc-8.0.1/package.conf.d
 loading package database
 /home/harry/.ghc/x86_64-linux-8.0.1/package.conf.d
 wired-in package ghc-prim mapped to ghc-prim-0.5.0.0
 wired-in package integer-gmp mapped to integer-gmp-1.0.0.1
 wired-in package base mapped to base-4.9.0.0
 wired-in package rts mapped to rts
 wired-in package template-haskell mapped to template-haskell-2.11.0.0
 wired-in package ghc mapped to ghc-8.0.1
 wired-in package dph-seq not found.
 wired-in package dph-par not found.
 Hsc static flags:
 loading package database /usr/lib/ghc-8.0.1/package.conf.d
 loading package database
 /home/harry/.ghc/x86_64-linux-8.0.1/package.conf.d
 wired-in package ghc-prim mapped to ghc-prim-0.5.0.0
 wired-in package integer-gmp mapped to integer-gmp-1.0.0.1
 wired-in package base mapped to base-4.9.0.0
 wired-in package rts mapped to rts-1.0
 wired-in package template-haskell mapped to template-haskell-2.11.0.0
 wired-in package ghc mapped to ghc-8.0.1
 wired-in package dph-seq not found.
 wired-in package dph-par not found.
 *** Chasing dependencies:
 Chasing modules from: *ghc_bug.hs
 !!! Chasing dependencies: finished in 0.42 milliseconds, allocated 0.211
 megabytes
 Stable obj: []
 Stable BCO: []
 Ready for upsweep
   [NONREC
       ModSummary {
         ms_hs_date = ****-**-** **:**:**.********** ***
         ms_mod = Main,
         ms_textual_imps = [(Nothing, Prelude)]
         ms_srcimps = []
       }]
 *** Deleting temp files:
 Deleting:
 compile: input file ghc_bug.hs
 *** Checking old interface for Main:
 [1 of 1] Compiling Main             ( ghc_bug.hs, ghc_bug.o )
 *** Parser [Main]:
 !!! Parser [Main]: finished in 0.14 milliseconds, allocated 0.089
 megabytes
 *** Renamer/typechecker [Main]:
 !!! Renamer/typechecker [Main]: finished in 28.70 milliseconds, allocated
 14.769 megabytes
 *** Desugar [Main]:
 Result size of Desugar (after optimization)
   = {terms: 19, types: 52, coercions: 4}
 *** Core Linted result of Desugar (after optimization):
 *** Core Lint errors : in result of Desugar (after optimization) ***
 <no location info>: warning:
     [RHS of cobox_aOD :: ((() -> ()) :: *) ~# (IO Any :: *)]
     The type of this binder is primitive: cobox_aOD
     Binder's type: ((() -> ()) :: *) ~# (IO Any :: *)
 *** Offending Program ***
 main :: () -> ()
 [LclIdX, Str=DmdType]
 main =
   case typeError
         @ 'VoidRep
         @ (() :: *) ~# ((() -> () -> ()) :: *)
         "ghc_bug.hs:2:8: error:\n\
         \    * Couldn't match expected type `() -> () -> ()'\n\
         \                  with actual type `()'\n\
         \    * The function `()' is applied to one argument,\n\
         \      but its type `()' has none\n\
         \      In the expression: () ()\n\
         \      In an equation for `main': main = () ()\n\
         \(deferred type error)"#
   of cobox_aOE { __DEFAULT ->
   (()
   `cast` (Sub cobox_aOE :: (() :: *) ~R# ((() -> () -> ()) :: *)))
     ()
   }

 $trModule :: Module
 [LclIdX, Str=DmdType]
 $trModule = Module (TrNameS "main"#) (TrNameS "Main"#)

 cobox_aOD :: ((() -> ()) :: *) ~# (IO Any :: *)
 [LclId[CoVarId], Str=DmdType]
 cobox_aOD =
   typeError
     @ 'VoidRep
     @ ((() -> ()) :: *) ~# (IO Any :: *)
     "ghc_bug.hs:2:1: error:\n\
     \    * Couldn't match expected type `IO t0' with actual type `() ->
 ()'\n\
     \    * Probable cause: `main' is applied to too few arguments\n\
     \      In the expression: main\n\
     \      When checking the type of the IO action `main'\n\
     \(deferred type error)"#

 main :: IO Any
 [LclIdX, Str=DmdType]
 main =
   runMainIO
     @ Any
     (main
     `cast` (Sub cobox_aOD :: ((() -> ()) :: *) ~R# (IO Any :: *)))

 *** End of Offense ***


 <no location info>: error:
 Compilation had errors


 *** Deleting temp files:
 Deleting:
 *** Deleting temp dirs:
 Deleting:

 }}}

 and gcc version is:
 gcc version 7.1.1 20170516 (GCC)

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


More information about the ghc-tickets mailing list