[GHC] #12415: Fancy BinIface encoding for tuples is broken for constraint tuples
GHC
ghc-devs at haskell.org
Wed Jul 20 17:28:08 UTC 2016
#12415: Fancy BinIface encoding for tuples is broken for constraint tuples
-------------------------------------+-------------------------------------
Reporter: bgamari | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: #12357 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Description changed by bgamari:
@@ -5,4 +5,22 @@
- ffc21506894c7887d3620423aaf86bc6113a1071. The problem is very similar to
- the one which prevented us from encoding tuple type representations in
- #12357 (see ticket:12357#comment:31). By unwiring constraint tuples it
- becomes harder to identify them for special handling during serialization.
+ ffc21506894c7887d3620423aaf86bc6113a1071. Namely, `putName` now panics
+ when given a constraint tuple,
+ {{{#!hs
+ putTupleName_ :: BinHandle -> TyCon -> TupleSort -> Word32 -> IO ()
+ putTupleName_ bh tc tup_sort thing_tag
+ = -- ASSERT(arity < 2^(30 :: Int))
+ put_ bh (0x80000000 .|. (sort_tag `shiftL` 28) .|. (thing_tag `shiftL`
+ 26) .|. arity)
+ where
+ (sort_tag, arity) = case tup_sort of
+ BoxedTuple -> (0, fromIntegral (tyConArity tc))
+ UnboxedTuple -> (1, fromIntegral (tyConArity tc `div` 2))
+ -- See Note [Unboxed tuple RuntimeRep vars] in TyCon
+ ConstraintTuple -> pprPanic "putTupleName:ConstraintTuple" (ppr tc)
+ }}}
+ While this currently doesn't break anything, this is only because the
+ clever encoding isn't used for constraint tuples.
+
+ I believe the problem is very similar to the one which prevented us from
+ encoding tuple type representations in #12357 (see
+ ticket:12357#comment:31). By unwiring constraint tuples it becomes harder
+ to identify them for special handling during serialization.
New description:
We have a special way of encoding tuple-related names in the interface
file symbol table. See `Note [Symbol table representation of names]`.
However, it was broken for constraint tuples by
ffc21506894c7887d3620423aaf86bc6113a1071. Namely, `putName` now panics
when given a constraint tuple,
{{{#!hs
putTupleName_ :: BinHandle -> TyCon -> TupleSort -> Word32 -> IO ()
putTupleName_ bh tc tup_sort thing_tag
= -- ASSERT(arity < 2^(30 :: Int))
put_ bh (0x80000000 .|. (sort_tag `shiftL` 28) .|. (thing_tag `shiftL`
26) .|. arity)
where
(sort_tag, arity) = case tup_sort of
BoxedTuple -> (0, fromIntegral (tyConArity tc))
UnboxedTuple -> (1, fromIntegral (tyConArity tc `div` 2))
-- See Note [Unboxed tuple RuntimeRep vars] in TyCon
ConstraintTuple -> pprPanic "putTupleName:ConstraintTuple" (ppr tc)
}}}
While this currently doesn't break anything, this is only because the
clever encoding isn't used for constraint tuples.
I believe the problem is very similar to the one which prevented us from
encoding tuple type representations in #12357 (see
ticket:12357#comment:31). By unwiring constraint tuples it becomes harder
to identify them for special handling during serialization.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12415#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list