[GHC] #11158: Combine exprIsTrivial and cpe_ExprIsTrivial
GHC
ghc-devs at haskell.org
Thu Oct 13 02:45:19 UTC 2016
#11158: Combine exprIsTrivial and cpe_ExprIsTrivial
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: task | Status: infoneeded
Priority: highest | Milestone: 8.2.1
Component: Compiler | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1656
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by nomeata):
* keywords: newcomer =>
* status: patch => infoneeded
* cc: ezyang (added)
Comment:
Ok, here is some insight.
The problem is related to trivial bindings – whether they are literals or
nullary data cons. The latter are easy to produce, so here is what I did:
I first broke `cpe_ExprIsLiteral`, by adding this as a new first clause
{{{
cpe_ExprIsTrivial (Var v) | isDataConWorkId v = False
}}}
Then I compiled the smallest possible program (with `-dcore-lint -dstg-
lint`)
{{{#!hs
main = return ()
}}}
and it crashes. Here the output with `+RTS -Dg`:
{{{
cap 0: initialised
allocated 1 megablock(s) at 0x4200000000
allocated 1 megablock(s) at 0x4200100000
----------------------------------------------------------
Gen Max Mut-list Blocks Large Live Slop
Blocks Bytes Objects
----------------------------------------------------------
0 0 0 1 0 0 4096
1 0 0 1 0 0 4096
----------------------------------------------------------
0 8192
----------------------------------------------------------
cap 0: starting GC
GC (gen 1, using 1 thread(s))
Memory inventory:
gen 0 blocks : 11 blocks ( 0.0 MB)
gen 1 blocks : 2 blocks ( 0.0 MB)
nursery : 256 blocks ( 1.0 MB)
retainer : 0 blocks ( 0.0 MB)
arena blocks : 0 blocks ( 0.0 MB)
exec : 0 blocks ( 0.0 MB)
GC free pool : 0 blocks ( 0.0 MB)
free : 235 blocks ( 0.9 MB)
total : 504 blocks ( 2.0 MB)
cap 0: GC working
scavenging static objects
T11158: internal error: evacuate(static): strange closure type 38956
(GHC version 8.1.20161012 for x86_64_unknown_linux)
Please report this as a GHC bug:
http://www.haskell.org/ghc/reportabug
Abgebrochen
}}}
So some pointer from the set of static objects is broken by this change.
We are in a slightly better position than above because we no longer need
to use ghc-the-library to trigger the crash. But still, the problem could
be anywhere in the libraries.
Here is the backtrace:
{{{
(gdb) bt
#0 __GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:58
#1 0x00007ffff70dd40a in __GI_abort () at abort.c:89
#2 0x00000000006d041a in rtsFatalInternalErrorFn (s=0x7525c0
"evacuate(static): strange closure type %d", ap=0x7fffffffdbf8) at
rts/RtsMessages.c:182
#3 0x00000000006d004c in barf (s=0x7525c0 "evacuate(static): strange
closure type %d") at rts/RtsMessages.c:46
#4 0x00000000006f2cc3 in evacuate (p=0x986158) at rts/sm/Evac.c:562
#5 0x0000000000717f18 in scavenge_static () at rts/sm/Scav.c:1764
#6 0x00000000007184d9 in scavenge_loop () at rts/sm/Scav.c:2088
#7 0x00000000006ee6a4 in scavenge_until_all_done () at rts/sm/GC.c:1001
#8 0x00000000006ed6cc in GarbageCollect (collect_gen=1,
do_heap_census=rtsFalse, gc_type=0, cap=0x9d0d80 <MainCapability>) at
rts/sm/GC.c:404
#9 0x00000000006dc686 in scheduleDoGC (pcap=0x7fffffffdf10,
task=0x9e9ce0, force_major=rtsTrue) at rts/Schedule.c:1821
#10 0x00000000006dd1a5 in exitScheduler (wait_foreign=rtsFalse) at
rts/Schedule.c:2636
#11 0x00000000006d09c2 in hs_exit_ (wait_foreign=rtsFalse) at
rts/RtsStartup.c:326
#12 0x00000000006d0b7a in shutdownHaskellAndExit (n=0, fastExit=0) at
rts/RtsStartup.c:483
#13 0x00000000006e5312 in hs_main (argc=1, argv=0x7fffffffe178,
main_closure=0x97d670, rts_config=...) at rts/RtsMain.c:91
#14 0x0000000000404226 in main ()
}}}
But at this time of day, I will not dig in deeper. Edward, does this
analysis provide any insight to you?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11158#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list