Macaulay2 / M2

The primary source code repository for Macaulay2, a system for computing in commutative algebra, algebraic geometry and related fields.
https://macaulay2.com
343 stars 229 forks source link

minimalBetti crash #2108

Open mahrud opened 3 years ago

mahrud commented 3 years ago

This crash is occurring on the github workflow that builds brew bottles and is blocking it. The crash itself is in the minimalBetti example but I could also reproduce it myself on Linux:

[mahrud@noether build]$ ./M2
Macaulay2, version 1.17.2.1
with packages: ConwayPolynomials, Elimination, IntegralClosure, InverseSystems,
               LLLBases, MinimalPrimes, PrimaryDecomposition, ReesAlgebra,
               Saturation, TangentCone

i1 : R = ZZ/3[x]; minimalBetti ideal x
-- SIGSEGV
-* stack trace, pid: 1917263
 0# stack_trace(std::ostream&, bool) at ../../Macaulay2/bin/main.cpp:124
 1# segv_handler at ../../Macaulay2/bin/main.cpp:240
 2# 0x00007F1FB4BA5860 in /lib64/libc.so.6
 3# free in /lib64/libc.so.6
 4# __gnu_cxx::new_allocator<int>::deallocate(int*, unsigned long) at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/ext/new_allocator.h:138
 5# std::allocator_traits<std::allocator<int> >::deallocate(std::allocator<int>&, int*, unsigned long) at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/alloc_traits.h:492
 6# std::_Vector_base<int, std::allocator<int> >::_M_deallocate(int*, unsigned long) at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_vector.h:355
 7# std::_Vector_base<int, std::allocator<int> >::~_Vector_base() at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_vector.h:335
 8# std::vector<int, std::allocator<int> >::~vector() at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_vector.h:683
 9# ResF4toM2Interface::from_M2_vec(ResPolyRing const&, FreeModule const*, vecterm*, poly&) at ../../Macaulay2/e/schreyer-resolution/res-f4-m2-interface.cpp:250
10# createF4Res(Matrix const*, int, int) at ../../Macaulay2/e/schreyer-resolution/res-f4-computation.cpp:143
11# ResolutionComputation::choose_res(Matrix const*, char, int, char, int, int, int) at ../../Macaulay2/e/comp-res.cpp:136
12# IM2_res_make at ../../Macaulay2/e/interface/groebner.cpp:122
13# interface_rawResolution at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interface.dd:3604
14# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
15# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
16# evaluate_applyFCE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:742
17# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:895
18# method1 at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:668
19# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:891
20# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:897
21# method1234 at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:734
22# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1306
23# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
24# evaluate_storeInHashTable at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:61
25# assignelemfun at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:133
26# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1373
27# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
28# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1411
29# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
30# evaluate_storeInHashTable at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:61
31# assignelemfun at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:133
32# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1373
33# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
34# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1358
35# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
36# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1329
37# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
38# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1411
39# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
40# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:522
41# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:572
42# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1293
43# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
44# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1357
45# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
46# evaluate_applyFCCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:823
47# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:562
48# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1293
49# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
50# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1401
51# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
52# evaluate_applyFCCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:832
53# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:562
54# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1293
55# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
56# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1329
57# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
58# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1396
59# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
60# scan_1 at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:1918
61# scan_4 at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2218
62# scan_5 at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2228
63# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
64# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
65# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1357
66# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
67# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1404
68# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
69# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:522
70# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:894
71# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
72# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
73# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
74# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
75# evaluate_applyES at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:882
76# method1234p at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:784
77# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1301
78# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
79# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
80# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:894
81# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
82# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
83# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
84# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
85# evaluate_applyFCCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:779
86# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:562
87# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1304
88# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
89# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:522
90# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:894
91# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
92# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
93# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
94# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
95# evaluate_applyES at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:882
96# method1234p at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:781
97# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1301
98# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
99# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
100# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:894
101# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
102# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
103# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
104# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
105# evaluate_applyFCCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:779
106# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:562
107# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1304
108# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
109# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1398
110# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
111# evaluate_applyFCCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:832
112# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:562
113# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1293
114# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
115# evaluate_evalSequence at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:420
116# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1417
117# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
118# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:678
119# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1304
120# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
121# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1329
122# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
123# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1411
124# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
125# evaluate_applyFCE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:742
126# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:895
127# applyEOE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:704
128# method1234o at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:768
129# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1301
130# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
131# evaluate_applyFCE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:742
132# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:895
133# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
134# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
135# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
136# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
137# evaluate_applyFCCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:779
138# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:562
139# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1304
140# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
141# evaluate_applyFCE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:742
142# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:895
143# applyEOE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:704
144# method1234o at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:768
145# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1301
146# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
147# evaluate_applyFCE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:742
148# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:895
149# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
150# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
151# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
152# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
153# evaluate_applyFCCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:779
154# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:562
155# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1304
156# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
157# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1357
158# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
159# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1329
160# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
161# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1396
162# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
163# evaluate_applyFCE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:742
164# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:895
165# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
166# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
167# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
168# evaluate_applyFCS at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:465
169# evaluate_applyES at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:882
170# method1234p at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors5.d:797
171# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1301
172# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
173# evaluate_applyFCE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:742
174# evaluate_applyEE at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:895
175# iteratedApply at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/actors3.d:2285
176# evaluate_applyFCC at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:662
177# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1304
178# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
179# evaluate_evalexcept at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1437
180# readeval4(parse_TokenFile_struct*, char, parse_Dictionary_struct*, char, char, char) at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:178
181# readeval3(parse_TokenFile_struct*, char, parse_DictionaryClosure_struct*, char, char, char) at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:270
182# loadprint(M2_string_struct*, parse_DictionaryClosure_struct*, char) at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:343
183# commandInterpreter_2(tagged_union*) at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:458
184# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
185# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
186# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1329
187# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
188# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1407
189# evaluate_eval at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1257
190# evaluate_evalexcept at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1437
191# readeval4(parse_TokenFile_struct*, char, parse_Dictionary_struct*, char, char, char) at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:178
192# readeval3(parse_TokenFile_struct*, char, parse_DictionaryClosure_struct*, char, char, char) at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:270
193# readeval(parse_TokenFile_struct*, char, char) at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:282
194# interp_process at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interp.dd:606
195# interpFunc(ArgCell*) at ../../Macaulay2/bin/main.cpp:193
196# ThreadTask::run(SupervisorThread*) at ../../Macaulay2/system/supervisor.cpp:377
197# SupervisorThread::threadEntryPoint() at ../../Macaulay2/system/supervisor.cpp:426
198# SupervisorThread::threadEntryPoint(void*) at ../../Macaulay2/system/supervisor.hpp:100
199# GC_inner_start_routine in /home/linuxbrew/.linuxbrew/opt/bdw-gc/lib/libgc.so.1
200# GC_call_with_stack_base in /home/linuxbrew/.linuxbrew/opt/bdw-gc/lib/libgc.so.1
201# start_thread in /lib64/libpthread.so.0
202# __clone in /lib64/libc.so.6
-- end stack trace *-

cc: @mikestillman seems to be related to the changes in e/schreyer-resolution.

jkyang92 commented 3 years ago

I think I figured some version of this out, although I have a slightly different crash. For some reason there's a definition of the class poly in both e/f4/f4-types.hpp and e/schreyer-resolution/res-poly-ring.hpp. It seems c++ doesn't allow this in general, but in some cases we get lucky and the linker finds the right functions to call.

mikestillman commented 3 years ago

good catch!

jkyang92 commented 3 years ago

As a remark, I think we should start putting stuff in namespaces. Obviously that's not a quick fix, but if f4-types.hpp and res-poly-ring.hpp were in different namespaces, we wouldn't have seen this issue. Also, just grepping around there are a few other instances of duplicate class names. We have two instances of poly, and one instance of POLY, two instances of poly_struct, two instances of spair_sorter as well as class names like tableau and tableau2.

For things that are local to a file, we should really be putting them in unnamed namespaces https://en.cppreference.com/w/cpp/language/namespace#Unnamed_namespaces

DanGrayson commented 3 years ago

I think I figured some version of this out, although I have a slightly different crash. For some reason there's a definition of the class poly in both e/f4/f4-types.hpp and e/schreyer-resolution/res-poly-ring.hpp. It seems c++ doesn't allow this in general, but in some cases we get lucky and the linker finds the right functions to call.

I don't see how this can be a problem, without the linker giving a duplicate symbol definition error.

jkyang92 commented 3 years ago

I think I figured some version of this out, although I have a slightly different crash. For some reason there's a definition of the class poly in both e/f4/f4-types.hpp and e/schreyer-resolution/res-poly-ring.hpp. It seems c++ doesn't allow this in general, but in some cases we get lucky and the linker finds the right functions to call.

I don't see how this can be a problem, without the linker giving a duplicate symbol definition error.

You're allowed to define something twice in c++ (think inline member functions in headers) so long as the definitions are exactly identical. In theory the code would work if the two instances of poly were exactly identical. The linker isn't going to go through the effort to figure out if your things are identical.

DanGrayson commented 3 years ago

I think the linker checks the length, at least, which is almost certainly going to differ. Have you actually found any duplicate symbols? If so, which ones?

DanGrayson commented 3 years ago

I found some:

gallium$ nm -o f4/res-f4.o schreyer-resolution/res-f4.o | grep ' T .*poly'
f4/res-f4.o: 0000000000002db0 T __ZN16poly_constructor12pushBackTermEPi
f4/res-f4.o: 0000000000002c80 T __ZN16poly_constructor15appendMonicTermEPi
f4/res-f4.o: 0000000000002ed0 T __ZN16poly_constructor7setPolyER4poly
schreyer-resolution/res-f4.o: 0000000000002eb0 T __ZN16poly_constructor12pushBackTermEPi
schreyer-resolution/res-f4.o: 0000000000002d80 T __ZN16poly_constructor15appendMonicTermEPi
schreyer-resolution/res-f4.o: 0000000000002fd0 T __ZN16poly_constructor7setPolyER4poly

Do their contents differ?

jkyang92 commented 3 years ago

So the symptoms I got was that I was debugging in schreyer-resolution/res-f4-computation.cpp, and stepping into the constructor for poly, I ended up in f4/f4-types.hpp instead of schreyer-resolution/res-poly-ring.hpp.

In this case, the two classes have different contents, and thus different constructors, leading to chaos.

mikestillman commented 3 years ago

I should be the one to fix this.

I'm surprised we haven't run into this problem in the past. This is a serious bug, I think, so much so, that it should never have run. Perhaps in optimized mode it is being inlined, so it is not an issue in that case? But I run all the tests in debug mode too, and haven't found an issue either...

mikestillman commented 3 years ago

I think for a quick fix I will rename some of these classes. @DanGrayson What branch should I make these changes off of? This is not for 1.18, right? So development...?

@jkyang92 I agree that name spaces should be used throughout and consistently. Suggestions? Right now there is very little namespace use, and what is being used isn't so awesome. If you or @mahrud think about this, I want also to be part of the discussion about what is the best way to do this.

jkyang92 commented 3 years ago

I'm not an expert on this stuff, but I'd put everything at least into a M2 (or M2Engine) namespace. Then subdirectories should probably get a sub-namespace. The major exception is interface, where it seems the headers are C compatible, so we can't really namespace that. And then any file local classes in .cpp files should probably go in a unnamed namespace.

DanGrayson commented 3 years ago

I think for a quick fix I will rename some of these classes. @DanGrayson What branch should I make these changes off of? This is not for 1.18, right? So development...?

Yes, release-1.18-branch is just for building 1.18.

mikestillman commented 3 years ago

@jkyang92 @mahrud I am working on fixing these naming issues.

mikestillman commented 3 years ago

I found some:

gallium$ nm -o f4/res-f4.o schreyer-resolution/res-f4.o | grep ' T .*poly'
f4/res-f4.o: 0000000000002db0 T __ZN16poly_constructor12pushBackTermEPi
f4/res-f4.o: 0000000000002c80 T __ZN16poly_constructor15appendMonicTermEPi
f4/res-f4.o: 0000000000002ed0 T __ZN16poly_constructor7setPolyER4poly
schreyer-resolution/res-f4.o: 0000000000002eb0 T __ZN16poly_constructor12pushBackTermEPi
schreyer-resolution/res-f4.o: 0000000000002d80 T __ZN16poly_constructor15appendMonicTermEPi
schreyer-resolution/res-f4.o: 0000000000002fd0 T __ZN16poly_constructor7setPolyER4poly

Do their contents differ?

@DanGrayson I think you have stale .o files around: those files were moved from f4/ to schreyer-resolution/

mikestillman commented 3 years ago
R = ZZ/3[x]; minimalBetti ideal x

@mahrud Which linux and compiler did this crash occur on? I can't recreate it, but I am on a mission to track down all of these spurious crashes, like this one, and the monomial ideal one!

mahrud commented 3 years ago

Fedora 32, kernel 5.10.17 if that matters, clang 11.1, compiled with cmake on a Debug build.

mahrud commented 3 years ago

It also happened here, on Ubuntu 20.04.2 with brew's GNU 11.1.0, compiled with cmake on a Release build.

mahrud commented 3 years ago

Unfortunately, it's still crashing for me. The stack trace is slightly different though:

```m2
i1 : R = ZZ/3[x]; minimalBetti ideal x
-- SIGSEGV
-* stack trace, pid: 2374755
 0# stack_trace(std::ostream&, bool) at ../../Macaulay2/bin/main.cpp:124
 1# segv_handler at ../../Macaulay2/bin/main.cpp:240
 2# 0x00007FBBD1DA4860 in /lib64/libc.so.6
 3# void __gnu_cxx::new_allocator<void const*>::construct<void const*, void const*>(void const**, void const*&&) at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/ext/new_allocator.h:150
 4# void std::allocator_traits<std::allocator<void const*> >::construct<void const*, void const*>(std::allocator<void const*>&, void const**, void const*&&) at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/alloc_traits.h:516
 5# void const*& std::vector<void const*, std::allocator<void const*> >::emplace_back<void const*>(void const*&&) at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/vector.tcc:115
 6# std::vector<void const*, std::allocator<void const*> >::push_back(void const*&&) at /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/bits/stl_vector.h:1204
 7# memt::Arena::alloc(unsigned long) at /home/linuxbrew/.linuxbrew/opt/memtailor/include/memtailor/Arena.h:299
 8# std::pair<int*, int*> memt::Arena::allocArrayNoCon<int>(unsigned long) at /home/linuxbrew/.linuxbrew/opt/memtailor/include/memtailor/Arena.h:338
 9# ResMonomialSorter::setMonoms() at ../../Macaulay2/e/schreyer-resolution/res-monomial-sorter.hpp:93
10# ResMonomialSorter::ordered() at ../../Macaulay2/e/schreyer-resolution/res-monomial-sorter.hpp:101
11# check_poly(ResPolyRing const&, ResPolynomial const&, ResSchreyerOrder const&) at ../../Macaulay2/e/schreyer-resolution/res-poly-ring.cpp:72
12# SchreyerFrame::insertLevelOne(int*, int, ResPolynomial&) at ../../Macaulay2/e/schreyer-resolution/res-schreyer-frame.cpp:601
13# createF4Res(Matrix const*, int, int) at ../../Macaulay2/e/schreyer-resolution/res-f4-computation.cpp:161
14# ResolutionComputation::choose_res(Matrix const*, char, int, char, int, int, int) at ../../Macaulay2/e/comp-res.cpp:136
15# IM2_res_make at ../../Macaulay2/e/interface/groebner.cpp:122
16# interface_rawResolution at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/interface.dd:3604
17# evaluate_evalraw at /home/mahrud/Projects/M2/M2/M2/Macaulay2/d/evaluate.d:1297
mahrud commented 3 years ago

Two things:

ii6 : end ../../Macaulay2/m2/res.m2:417:28:(1):[23]: --entering debugger (type help to see debugger commands) ../../Macaulay2/m2/res.m2:417:28-417:34: --source code: W.RawComputation = value log;

mikestillman commented 3 years ago

thanks @mahrud ! that sounds helpful, and might help me track down the problem. But still, it is computing a GB of ideal(x)....!

mahrud commented 3 years ago

I think the error in (2) above is irrelevant, but kind of curious. What is ResMonomialSorter::ordered supposed to do? I had added a cout line with S.ordered() and apparently doing that twice causes that error. Is it supposed to change something?

mikestillman commented 3 years ago

@mahrud I have some questions. I was able to reproduce this bug on min-betti-crash branch, in debug mode, on ubuntu 21.04.

  1. Have you seen this crash on a release build?
  2. When you create memtailor's brew build, is it done in debug mode? (my guess: no, it isn't, and it shouldn't be).
  3. Are we setting MEMT_DEBUG in M2, if we are building M2 in debug mode?

The class for an "Arena" has extra debug fields in it, in debug mode. I am suspecting that these are not in the actual Arena class, as it was compiled with optimization. But if we are including the include file after setting MEMT_DEBUG, this would be a problem... We are not using Arena's in too many places yet, but minimalBetti is one of them.

Anyway, your answers will let me know if my hypothesis is wrong ...!

mahrud commented 3 years ago
  1. Only on github brew builds here.
  2. No. Here is a sample compilation line:
    2021-06-02T18:39:35.6701356Z /home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/shims/linux/super/g++-11  -I/tmp/memtailor-20210602-6310-1rq0iy9/src -O3 -DNDEBUG -DPACKAGE_NAME=\"memtailor\" -DPACKAGE_TARNAME=\"memtailor\" -DPACKAGE_VERSION=\"1.0\" "-DPACKAGE_STRING=\"memtailor 1.0\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"memtailor\" -DVERSION=\"1.0\" -std=gnu++14 -MD -MT CMakeFiles/memtailor.dir/src/memtailor/MemoryBlocks.cpp.o -MF CMakeFiles/memtailor.dir/src/memtailor/MemoryBlocks.cpp.o.d -o CMakeFiles/memtailor.dir/src/memtailor/MemoryBlocks.cpp.o -c /tmp/memtailor-20210602-6310-1rq0iy9/src/memtailor/MemoryBlocks.cpp
  3. If we build M2 in Debug mode, the mode is passed onto the libraries we build as well, including memtailor, and memtailor's cmake file sets MEMT_DEBUG when built in debug mode.
mikestillman commented 3 years ago

@mahrud So if we are not building memtailor ourselves (in optimization mode), then setting MEMT_DEBUG in M2 before including files from memtailor, seems to be an error. Do you agree?

mahrud commented 3 years ago

Oh, I see what you mean, I thought only memtailor's CMakeFile was setting MEMT_DEBUG, but it is being set by M2 as well: https://github.com/Macaulay2/M2/blob/b5b9b18ccb0dbf4daeeefc69290f6f18331134ef/M2/cmake/configure.cmake#L208-L211 I'll try without this ...

mikestillman commented 3 years ago

I'm actually not sure how we should handle this. Whether we set MEMT_DEBUG seems to depend on whether we are building memtailor in debug mode or not.

@mahrud @DanGrayson what do you think is a good way to handle this?

If I make the changes to refactor mathic, memtailor, mathicgb into e, these issues go away :). (I have a branch already to submit for this too).

mikestillman commented 3 years ago

Oh, I see what you mean, I thought only memtailor's CMakeFile was setting MEMT_DEBUG, but it is being set by M2 as well: https://github.com/Macaulay2/M2/blob/b5b9b18ccb0dbf4daeeefc69290f6f18331134ef/M2/cmake/configure.cmake#L208-L211

I'll try without this ...

The trouble is, in M2 we need to know whether MEMT_DEBUG was set or not when compiling memtailor (same will probably be true of the other 2 libraries as well).

mahrud commented 3 years ago

The crash went away when I recompiled M2 without setting MEMT_DEBUG, but this doesn't explain the crash on github brew builds ... maybe that was really Jay's crash and not mine? I'll re-try build the bottles from your branch.

I'm actually not sure how we should handle this. Whether we set MEMT_DEBUG seems to depend on whether we are building memtailor in debug mode or not.

Perhaps we should force debug builds to build those three libraries. Alternatively, we could change how MEMT_DEBUG affects Arena in this way. In particular, are there things like this for Mathic and Mathicgb as well?

If I make the changes to refactor mathic, memtailor, mathicgb into e, these issues go away :). (I have a branch already to submit for this too).

Do you specifically want the directory structure to look like, for instance Macaulay2/e/memtailor/src/memtailor/Arena.cpp? If so, then moving the location of those three submodules would make sense. CMake can also import other CMake projects as a subproject (rather than an external project, which it currently does), which would make handling this simple. I can make this change on your branch before or after you make a PR if you'd like.

Alternatively, you could add a relative symlink so for instance Macaulay2/e/memtailor/Arena.cpp works.

mahrud commented 3 years ago

We'll see how https://github.com/Macaulay2/homebrew-tap/pull/80 goes.

DanGrayson commented 3 years ago

I'm actually not sure how we should handle this. Whether we set MEMT_DEBUG seems to depend on whether we are building memtailor in debug mode or not.

@mahrud @DanGrayson what do you think is a good way to handle this?

I'm not sure I understand the issue, but whether MEMT_DEBUG is defined should affect memtailor only, and only be done when memtailor is being built.

mikestillman commented 3 years ago

I'm not sure I understand the issue, but whether MEMT_DEBUG is defined should affect memtailor only, and only be done when memtailor is being built.

Why is that? The trouble is that in a header file (in memtailor), a struct changes size (it has an extra set of fields) if MEMT_DEBUG is set. If it is compiled with MEMT_DEBUG not set, but then we use the header file with it set, then that is a problem.

DanGrayson commented 3 years ago

Because the information is flowing the wrong direction -- users of a library shouldn't need to know the options that were used when compiling the library. Instead, the library should record the needed info in the installed include files, for the convenience of the user. Add a new include file called memtailor_options.h that contains one of the following two lines:

#define MEMT_DEBUG 1
#undef MEMT_DEBUG
mahrud commented 3 years ago

The debug flag issue still needs to be fixed.