Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

attempt to codegen function before inference pass is done #5502

Closed
vtjnash opened this issue Jan 24, 2014 · 5 comments
Closed

attempt to codegen function before inference pass is done #5502

vtjnash opened this issue Jan 24, 2014 · 5 comments
Labels
bug Indicates an unexpected problem or unintended behavior compiler:codegen Generation of LLVM IR and native code GC Garbage collector

Comments

@vtjnash
Copy link
Member

vtjnash commented Jan 24, 2014

kudos to @loladiro of making this stack trace pretty

@JeffBezanson why is jl_gc_collect pretending that it can call itself recursively? (no I don't have a testcase to reproduce, but perhaps a call to gc() inside a finalizer method could incur sufficient havoc)

codegen.cpp
 385 static Function *to_function(jl_lambda_info_t *li, bool cstyle)
 386 {
 387     JL_SIGATOMIC_BEGIN();
 388     assert(!li->inInference); <-- assertion failure occurs here
Process:         julia-readline [7060]
Path:            /Volumes/VOLUME/Users/*/Documents/*/julia
Identifier:      julia-readline
Version:         ???
Code Type:       X86-64 (Native)
Parent Process:  bash [3601]
Responsible:     Terminal [3588]
User ID:         501

Date/Time:       2014-01-23 23:42:57.575 -0500
OS Version:      Mac OS X 10.9 (13A603)
Report Version:  11
Anonymous UUID:  DF4BF7CE-A2B0-4260-6C7E-968232437AEA

Sleep/Wake UUID: FD451AD0-F017-46CE-BFBB-228719A07BFF

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes: 0x0000000000000001, 0x0000000000000000

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libjulia.dylib                  0x0000000107dca6a0 abort + 32
1   libjulia.dylib                  0x0000000107dca671 __assert_rtn + 81
2   libjulia.dylib                  0x0000000107342919 to_function(_jl_lambda_info_t*, bool) + 361
3   libjulia.dylib                  0x000000010734279f jl_compile + 31
4   libjulia.dylib                  0x000000010733ebdc jl_trampoline + 140
5   libjulia.dylib                  0x0000000107388246 run_finalizer + 534
6   libjulia.dylib                  0x0000000107387214 run_finalizers + 180
7   libjulia.dylib                  0x0000000107386cec jl_gc_collect + 2092
8   libjulia.dylib                  0x000000010738774b allocobj + 331
9   libjulia.dylib                  0x0000000107375c29 jl_alloc_tuple + 41
10  libjulia.dylib                  0x000000010733701a intersect_union + 74
11  libjulia.dylib                  0x00000001073308e9 jl_type_intersect + 505
12  libjulia.dylib                  0x0000000107336d64 intersect_typevar + 196
13  libjulia.dylib                  0x00000001073307d6 jl_type_intersect + 230
14  libjulia.dylib                  0x0000000107331775 jl_type_intersect + 4229
15  libjulia.dylib                  0x000000010732fdb2 jl_type_intersection_matching + 338
16  libjulia.dylib                  0x0000000107339272 lookup_match + 50
17  libjulia.dylib                  0x000000010733a5f8 ml_matches + 200
18  sys.dylib                       0x0000000109615f01 julia__methods1967 + 705 (.reflection.jl:80)
19  sys.dylib                       0x0000000109616044 julia__methods196710489 + 36
20  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
21  sys.dylib                       0x0000000109615d3a julia__methods1967 + 250 (.reflection.jl:97)
22  sys.dylib                       0x0000000109616044 julia__methods196710489 + 36
23  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
24  sys.dylib                       0x0000000109615d3a julia__methods1967 + 250 (.reflection.jl:97)
25  sys.dylib                       0x00000001096235aa julia_abstract_call_gf2018 + 2538 (.inference.jl:590)
26  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
27  sys.dylib                       0x000000010962000e julia_abstract_call2008 + 846 (.inference.jl:713)
28  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
29  sys.dylib                       0x000000010960d96e julia_abstract_eval_call1895 + 1518 (.inference.jl:814)
30  sys.dylib                       0x000000010960c9ed julia_abstract_eval1893 + 861 (.inference.jl:889)
31  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
32  sys.dylib                       0x0000000109611466 julia_abstract_eval_arg1921 + 118 (.inference.jl:770)
33  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
34  sys.dylib                       0x000000010960d599 julia_abstract_eval_call1895 + 537 (.inference.jl:782)
35  sys.dylib                       0x000000010960c9ed julia_abstract_eval1893 + 861 (.inference.jl:889)
36  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
37  sys.dylib                       0x0000000109611466 julia_abstract_eval_arg1921 + 118 (.inference.jl:770)
38  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
39  sys.dylib                       0x000000010960d599 julia_abstract_eval_call1895 + 537 (.inference.jl:782)
40  sys.dylib                       0x000000010960c9ed julia_abstract_eval1893 + 861 (.inference.jl:889)
41  sys.dylib                       0x000000010961df09 julia_abstract_interpret1991 + 185 (.inference.jl:1004)
42  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
43  sys.dylib                       0x0000000109618265 julia_typeinf1970 + 8373 (.inference.jl:1299)
44  sys.dylib                       0x000000010961a4a1 julia_typeinf197010491 + 33
45  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
46  sys.dylib                       0x0000000109633b64 julia_inlineable2068 + 5540 (.inference.jl:1900)
47  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
48  sys.dylib                       0x0000000109631600 julia_inlining_pass2066 + 4736 (.inference.jl:2229)
49  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
50  sys.dylib                       0x00000001096308de julia_inlining_pass2066 + 1374 (.inference.jl:2167)
51  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
52  sys.dylib                       0x00000001096194bc julia_typeinf1970 + 13068 (.inference.jl:1422)
53  sys.dylib                       0x000000010961a4a1 julia_typeinf197010491 + 33
54  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
55  sys.dylib                       0x0000000109623be4 julia_abstract_call_gf2018 + 4132 (.inference.jl:640)
56  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
57  sys.dylib                       0x000000010962000e julia_abstract_call2008 + 846 (.inference.jl:713)
58  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
59  sys.dylib                       0x000000010960d96e julia_abstract_eval_call1895 + 1518 (.inference.jl:814)
60  sys.dylib                       0x000000010960c9ed julia_abstract_eval1893 + 861 (.inference.jl:889)
61  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
62  sys.dylib                       0x0000000109611466 julia_abstract_eval_arg1921 + 118 (.inference.jl:770)
63  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
64  sys.dylib                       0x0000000109618d8e julia_typeinf1970 + 11230 (.inference.jl:1364)
65  sys.dylib                       0x000000010961a4a1 julia_typeinf197010491 + 33
66  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
67  sys.dylib                       0x0000000109616178 julia_typeinf_ext1969 + 184 (.inference.jl:1132)
68  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
69  libjulia.dylib                  0x000000010733a1af cache_method + 3519
70  libjulia.dylib                  0x000000010733878f jl_mt_assoc_by_type + 559
71  libjulia.dylib                  0x0000000107338eb9 jl_apply_generic + 185
72  ???                             0x0000000113abaf8a 0 + 4624985994
73  libjulia.dylib                  0x0000000107388246 run_finalizer + 534
74  libjulia.dylib                  0x0000000107387214 run_finalizers + 180
75  libjulia.dylib                  0x0000000107386cec jl_gc_collect + 2092
76  libjulia.dylib                  0x000000010738774b allocobj + 331
77  libjulia.dylib                  0x0000000107375c29 jl_alloc_tuple + 41
78  libjulia.dylib                  0x0000000107331653 jl_type_intersect + 3939
79  libjulia.dylib                  0x000000010732fdb2 jl_type_intersection_matching + 338
80  libjulia.dylib                  0x0000000107339272 lookup_match + 50
81  libjulia.dylib                  0x000000010733a5f8 ml_matches + 200
82  sys.dylib                       0x0000000109615f01 julia__methods1967 + 705 (.reflection.jl:80)
83  sys.dylib                       0x0000000109616044 julia__methods196710489 + 36
84  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
85  sys.dylib                       0x0000000109615d3a julia__methods1967 + 250 (.reflection.jl:97)
86  sys.dylib                       0x0000000109616044 julia__methods196710489 + 36
87  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
88  sys.dylib                       0x0000000109615d3a julia__methods1967 + 250 (.reflection.jl:97)
89  sys.dylib                       0x0000000109616044 julia__methods196710489 + 36
90  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
91  sys.dylib                       0x0000000109615d3a julia__methods1967 + 250 (.reflection.jl:97)
92  sys.dylib                       0x00000001096335e0 julia_inlineable2068 + 4128 (.inference.jl:1846)
93  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
94  sys.dylib                       0x0000000109631600 julia_inlining_pass2066 + 4736 (.inference.jl:2229)
95  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
96  sys.dylib                       0x00000001096308de julia_inlining_pass2066 + 1374 (.inference.jl:2167)
97  libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
98  sys.dylib                       0x00000001096194bc julia_typeinf1970 + 13068 (.inference.jl:1422)
99  sys.dylib                       0x000000010961a4a1 julia_typeinf197010491 + 33
100 libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
101 sys.dylib                       0x0000000109616178 julia_typeinf_ext1969 + 184 (.inference.jl:1132)
102 libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
103 libjulia.dylib                  0x0000000107337549 jl_type_infer + 105
104 libjulia.dylib                  0x000000010733ebd4 jl_trampoline + 132
105 libjulia.dylib                  0x0000000107388246 run_finalizer + 534
106 libjulia.dylib                  0x0000000107387214 run_finalizers + 180
107 libjulia.dylib                  0x00000001073785ee uv_atexit_hook + 350
108 sys.dylib                       0x00000001095f3ab2 julia__start1712 + 2626 (.client.jl:434)
109 sys.dylib                       0x00000001095f3b46 julia__start17129807 + 6
110 libjulia.dylib                  0x0000000107338ee5 jl_apply_generic + 229
111 julia                           0x00000001072da1f3 true_main + 227
112 libjulia.dylib                  0x00000001073797e5 julia_trampoline + 149
113 julia                           0x00000001072da5be main + 110
114 julia                           0x00000001072d9b24 start + 52
@JeffBezanson
Copy link
Member

I believe it ought to be possible to invoke the GC recursively inside the finalization phase. The actual bug here is that we tried to generate code for a function that inference is currently running on which, as the assertion says, is supposed to be avoided.

@Keno
Copy link
Member

Keno commented Jan 24, 2014

The simplest fix seems to be to not run the finalizer if inference is currently running on it.

@vtjnash
Copy link
Member Author

vtjnash commented Jan 24, 2014

I don't think run_finalizers fully takes into account that it may not be the only copy of run_finalizers running on a given object. Although, agreed that that wasn't what caused the crash this time.

@tkelman tkelman added compiler:codegen Generation of LLVM IR and native code GC Garbage collector labels Jul 2, 2015
@tkelman
Copy link
Contributor

tkelman commented Jul 21, 2015

Hm, this may be the fault of #11991, but I just hit this assertion failure !li->inInference on shutdown, finishing make testall1 on win64 at 50a1068

@vtjnash
Copy link
Member Author

vtjnash commented Mar 25, 2016

this recursion is disallowed now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Indicates an unexpected problem or unintended behavior compiler:codegen Generation of LLVM IR and native code GC Garbage collector
Projects
None yet
Development

No branches or pull requests

4 participants