-
Notifications
You must be signed in to change notification settings - Fork 2
/
Changes
12675 lines (9940 loc) · 513 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
OCaml 5.0
---------
- #10831: Multicore OCaml
(Enguerrand Decorne, Stephen Dolan, Tom Kelly, Sadiq Jaffer,
Anil Madhavapeddy, Sudha Parimala, KC Sivaramakrishnan,
Leo White, the Tarides multicore team,
review by Florian Angeletti, Damien Doligez, Xavier Leroy,
Guillaume Munch-Maccagnoni, Olivier Nicole, Nicolás Ojeda Bär,
Gabriel Scherer, the OCaml core development team, and many
other valued reviewers.)
### Language features:
### Runtime system:
- #11400: Runtime events counters fixes
Fixes mismatch between OCaml and C APIs, removes events from 4.x that
are not present in the 5.0 GC and adds some missing probes.
(Sadiq Jaffer, review by Gabriel Scherer, Florian Angeletti)
- #11368: Runtime events buffer size OCAMLRUNPARAMS fix
The runtime events buffer size can now be set via the 'e' OCAMLRUNPARAM.
This is previously mistakenly enabled/disabled tracing instead.
(Sadiq Jaffer, review by KC Sivaramakrishnan, David Allsopp, Damien Doligez)
- #11308: Add environment variable to preserve runtime_events after exit
If the environment variable OCAML_RUNTIME_EVENTS_PRESERVE exists then the
runtime will not remove the runtime events ring buffers at exit. This
makes tracing very short running programs more reliable.
(Sadiq Jaffer, review by KC Sivaramakrishnan)
- #10964: Ring-buffer based runtime tracing (runtime_events)
Runtime_events is a very low overhead runtime tracing system designed for
continuous monitoring of OCaml applications.
(Sadiq Jaffer, review by Anil Madhavapeddy, Enguerrand Decorne,
Richard Warburton, Gabriel Scherer, Sabine Schmaltz, Florian Angeletti,
Patrick Ferris, Tom Kelly)
* #10723: do not use `-flat-namespace` linking for macOS.
(Carlo Cabrera, review by Damien Doligez)
* #10863, #10933: Remove support for old, unprefixed C runtime function names
such as `alloc`. The new names prefixed with `caml_` must be used instead,
such as `caml_alloc`. Consequently, it is no longer needed to define
`CAML_NAME_SPACE` to avoid bringing unprefixed names into scope: this is now
the default behavior.
(Nicolás Ojeda Bär, review by Xavier Leroy)
- #10902: Do not register empty code fragments in natdynlink.
(David Allsopp, review by Xavier Leroy and Damien Doligez)
- #10965: `caml_fatal_error_hook`, GC timing hooks, and
`caml_scan_roots_hook` are now atomic variables. Restore GC timing
hooks in multicore.
(Guillaume Munch-Maccagnoni, review by Enguerrand Decorne, Xavier
Leroy, Gabriel Scherer, and KC Sivaramakrishnan)
- #11209: Add a public and thread-safe timing hook running at domain
termination, after this domain has stopped running any OCaml code:
`caml_domain_terminated_hook`. This can be useful for implementing
domain-local state in C.
(Guillaume Munch-Maccagnoni, review by Xavier Leroy and Gabriel
Scherer)
- #10875, #11731: Add option to allocate fiber stacks and sigaltstacks with
mmap(MAP_STACK) instead of malloc. This is exposed via a configure
--enable-mmap-map-stack option, and is enabled by default on OpenBSD where
it is mandatory.
(Anil Madhavapeddy, review by Gabriel Scherer, Tom Kelly,
Michael Hendricks and KC Sivaramakrishnan).
- #10950: Do not use mmap to allocate Caml_state.
In order to reduce virtual memory usage, we dynamically allocate
the domain_state structure.
(Enguerrand Decorne, KC Sivaramakrishnan and Tom Kelly,
review by Anil Madhavapeddy and Gabriel Scherer)
- #11010: Use strerror_r for reentrant error string conversion.
(Anil Madhavapeddy and Xavier Leroy, review by same and Edwin Török)
- #11002, #11066, #11086: Do not use Begin_roots/End_roots macros in
the runtime system. Also fix a missing root registration in the
implementation of Unix.write on Windows.
(Nicolás Ojeda Bär, Daniel Bünzli and Antonin Décimo,
review by Xavier Leroy and David Allsopp)
- #11022: Track GC work for all managed bigarray allocations
(Stephen Dolan, report by Andrew Hunter, review by Damien Doligez)
- #10802: Use 4.12 value macros and helpers in C code
(Antonin Décimo, review by Gabriel Scherer)
- #11105: Fix handling of fiber stack cache with multiple domains
(Jon Ludlam, KC Sivaramakrishnan and Tom Kelly)
- #11054: Respect user provided maximum stack space
Make sure the stack we initially request is sized accordingly to
the user provided settings. tmc/stack_space is also updated by
this PR in order to account for this change.
(Enguerrand Decorne, report by Jon Ludlam,
review by Tom Kelly, KC Sivaramakrishnan and Gabriel Scherer)
- #11238: Increase the default limit for the stack size to 128 Mi words,
i.e. 1 Gib for 64-bit platforms and 512 Mib for 32-bit platforms.
(Xavier Leroy, review by Sébastien Hinderer)
* #11295: An ISO C 2011 compliant compiler, including full support for atomic
types, is now required to build the OCaml runtime system.
(Xavier Leroy, review by David Allsopp and Sébastien Hinderer)
- #10915, #11039, #11057, #11095, #11190: Implement quality treatment for
asynchronous actions in multicore. Reimplement the old behaviour of
`caml_process_pending*` for multicore.
(Guillaume Munch-Maccagnoni, review by Sadiq Jaffer and Gabriel Scherer)
- #11303: Ensure that GC is not invoked from bounds check failures
(Stephen Dolan, review by Sadiq Jaffer and Xavier Leroy)
- #11304: Fix data race on Windows file descriptors
(Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Allsopp,
and Sadiq Jaffer)
* #11337: pass 'flags' metadata to root scanners, to optimize stack
scanning in the bytecode interpreter.
Changes the interface of user-provided root-scanning hooks.
(Gabriel Scherer, review by Xavier Leroy,
Guillaume Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly)
- #11144: Restore frame-pointers support for amd64
(Fabrice Buoro, review by Frederic Bour and KC Sivaramakrishnan)
* #11255: in the C interface, `&Field(v, i)` now has type `volatile value *`
instead of `value *` in OCaml 4. This makes the memory model
for mixed OCaml/C code better defined, but can cause warnings or type
errors in user C code.
(KC Sivaramakrishnan, review by Xavier Leroy, Gabriel Scherer and
Guillaume Munch-Maccagnoni, additional discussions with Stephen
Dolan and Luc Maranget)
- #5299, #4787, #11138, #11272, #11506: To help debugging, `Caml_state`
now dynamically checks that the domain lock is held, and fails
otherwise (with a fatal error at most entry points of the C API, or
systematically in debug mode). A new variable `Caml_state_opt` is
introduced, and is `NULL` when the domain lock is not held. This
allows to test from C code if the current thread holds the lock of
its domain.
(Guillaume Munch-Maccagnoni, review by Florian Angeletti, Damien
Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer)
- #11223: The serialization format of custom blocks changed in 4.08,
but the deserializer would still support the pre-4.08 format. OCaml
5.x removed support for this old format; provide a clear error message
in this case.
(Hugo Heuzard, review by Gabriel Scherer)
- #11504, #11522: Use static allocation in `caml_make_float_vect` in
no-flat-float-array mode, it's more efficient and avoids a a race condition
(Xavier Leroy, report by Guillaume Munch-Maccagnoni, review by David Allsopp)
- #11652: Fix benign off-by-one error in Windows implementation of caml_mem_map.
(David Allsopp, review by Gabriel Scherer)
- #11669, #11704: Fix construction of Effect.Unhandled exceptions in the
bytecode interpreter.
(David Allsopp and Xavier Leroy, report by Samuel Hym, review by Xavier Leroy
and Gabriel Scherer)
### Code generation and optimizations:
- #10972: ARM64 multicore support: OCaml & C stack separation;
dynamic stack size checks; fiber and effects support.
(Tom Kelly and Xavier Leroy, review by KC Sivaramakrishnan, Xavier Leroy
Guillaume Munch-Maccagnoni, Eduardo Rafael, Stephen Dolan and
Gabriel Scherer)
* #10845 Emit frametable size on amd64 BSD (OpenBSD, FreeBSD, NetBSD) systems
(emitted for Linux in #8805)
(Hannes Mehnert, review by Nicolás Ojeda Bär)
### Standard library:
- #10742: Use LXM as the pseudo-random number generator for module Random.
Add `Random.State.split` and `Random.split` to "split" a PRNG off
another PRNG.
(Xavier Leroy, review by Gabriel Scherer and Hugo Heuzard)
* #10867, #11345: Remove deprecated values: Array.create, Array.make_float,
Array.create_matrix, Bytes.uppercase, Bytes.lowercase, Bytes.capitalize,
Bytes.uncapitalize, Char.lowercase, Char.uppercase, Filename.temp_dir_name,
Int32.format, Int64.format, Nativeint.format, Format.bprintf, Format.kprintf,
Format.set_all_formatter_output_functions,
Format.get_all_formatter_output_functions,
Format.pp_set_all_formatter_output_functions,
Format.pp_get_all_formatter_output_functions, Format.pp_open_tag,
Format.pp_close_tag, Format.open_tag, Format.close_tag,
Format.formatter_tag_functions, Format.pp_set_formatter_tag_functions,
Format.pp_get_formatter_tag_functions, Format.set_formatter_tag_functions,
Format.get_formatter_tag_functions, Gc (mutability of the fields of type
Gc.control), Lazy.lazy_from_fun, Lazy.lazy_from_val, Lazy.lazy_is_val,
Obj.set_tag, Obj.truncate, Obj.final_tag, Obj.extension_constructor,
Obj.extension_name, Obj.extension_id, Scanf.stdib, Scanf.fscanf,
Scanf.kfscanf, Stdlib.( & ), Stdlib.( or ), String.set, String.copy,
String.fill, String.unsafe_set, String.unsafe_fill, String.uppercase,
String.lowercase, String.capitalize, String.uncapitalize, Thread.kill,
Thread.wait_write, Thread.wait_read, the whole ThreadUnix module, the
infix operator (.[]<-).
(Nicolás Ojeda Bär, review by Damien Doligez)
* #10896: Remove Stream, Genlex and Pervasives. Also remove legacy standalone
bigarray library (the Bigarray module is now part of the standard library).
(Nicolás Ojeda Bär, review by Kate Deplaix and Anil Madhavapeddy)
- #10921: Use getentropy, when available, to seed the generator during
`Random.self_init`
(Michael Hendricks, review by Gabriel Scherer, Xavier Leroy, and
Anil Madhavapeddy)
* #10924: Add deprecated attribute to Printexc.catch, Printf.kprintf and
Unix.SO_ERROR.
(Nicolás Ojeda Bär, review by Damien Doligez)
- #10986: Add Scanf.sscanf_opt, Scanf.bscanf_opt and Scanf.scanf_opt.
(Nicolás Ojeda Bär, review by Florian Angeletti and Gabriel Scherer)
* #11157: Rename "hash" in the "Hashtbl.SeededHashedType" signature to
"seeded_hash". This allows defining both seeded and unseeded hash functions in
the same module.
(Nicolás Ojeda Bär, review by Gabriel Scherer and Xavier Leroy)
- #8878: Add String.hash and String.seeded_hash.
(Tom Kelly, review by Alain Frisch and Nicolás Ojeda Bär)
### Other libraries:
* #9071, #9100, #10935: Reimplement `Thread.exit()` as raising the
exception `Thread.Exit`, and mark `Thread.exit` as deprecated.
The new implementation changes the behavior compared with
the OCaml 4 implementation. For example, the new implementation
causes `Fun.finally` finalizers to be run and catch-all exception
handlers to prevent termination.
(Jacques-Henri Jourdan and Xavier Leroy, review by Damien Doligez,
Guillaume Munch-Maccagnoni, Gabriel Scherer, and Enguerrand Decorne)
- #11034: Dynlink library, add a global lock to make dynlinking
thread-safe.
(Florian Angeletti, review by Gabriel Scherer)
- #11087: deprecate Thread.wait_timed_read, Thread.wait_timed_write,
Thread.select, Thread.wait_pid. The same functionality is available in the
Unix module.
(Nicolás Ojeda Bär, review by Anil Madhavapeddy)
- #11309, #11424, #11427, #11545: Add Domain.recommended_domain_count.
(Christiano Haesbaert, Konstantin Belousov, review by David Allsopp,
KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar)
- #11461, #11466: Fix gethostbyaddr for IPv6 arguments and make it domain-safe
(Olivier Nicole, Nicolás Ojeda Bär, David Allsopp and Xavier Leroy,
review by the same)
- #11479: Make Unix.symlink domain-safe on Windows
(Olivier Nicole, review by Xavier Leroy and David Allsopp)
### Tools:
* #11004: Litmus tests for checking the implementation of the
memory model.
(Luc Maranget, review by Gabriel Scherer and Xavier Leroy)
- #11024: Handle alerts in ocamldoc.
The alert `[@@alert deprecated]` is handled specifically and it's no longer
needed to duplicate the deprecated annotation (the alert for the compiler and
the tag for the documentation). Every other alerts also appear in the
documentation.
(Jules Aguillon, review by Florian Angeletti)
- #11065: Port the bytecode debugger to 5.0, adding support for effect handlers.
(Damien Doligez and @fabbing, review by @fabbing and Xavier Leroy)
- #11079: Add the -nobanners option to dumpobj.
(Sébastien Hinderer, review by Gabriel Scherer and Vincent Laviron)
- #11100: Fix ocamltest to make sure failed tests are not counted as
"unexpected error".
(Damien Doligez, review by Sébastien Hinderer)
- #11245: Merge the common code of ocamlcp and ocamloptp into a single module.
(David Allsopp, review by Sébastien Hinderer)
- #11382: OCamlmktop use a new initialization module "OCamlmktop_init" to
preserve backward-compatibility with user-module provided modules that install
toplevel printers.
(Florian Angeletti, review by Gabriel Scherer and David Allsopp)
### Manual and documentation:
- #11058: runtime/HACKING.adoc tips on debugging the runtime
(Gabriel Scherer, review by Enguerrand Decorne and Nicolás Ojeda Bär)
- #11093: Add an effect handlers tutorial
(KC Sivaramakrishnan, review by François Pottier, Gabriel Scherer, François
Bobot and Wiktor Kuchta)
- #11192: Better documentation for condition variables.
(François Pottier, review by Luc Maranget, Xavier Leroy, and Wiktor Kuchta)
- #11093: Add tutorials on parallelism features and the relaxed memory model
(KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapeddy, Gabriel
Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc Maranget, Fabrice
Buoro, Olivier Nicole, Guillaume Munch-Maccagnoni, Jacques-Henri Jourdan)
- #11640: Add Flambda commonly-used options to the ocamlopt manpage
(Amandine Nangah, review by David Allsopp, Florian Angeletti,
Sébastien Hinderer, and Vincent Laviron)
### Compiler user-interface and warnings:
- #9140, #11131: New command-line flag -nocwd to not include implicit
the current directory to the load path.
(Thomas Roglin, review by Gabriel Scherer and Nicolás Ojeda Bär)
- #11089: Add 'since <version>' information to compiler warnings.
(André Maroneze, review by Florian Angeletti and Gabriel Scherer)
- #10909: Disable warning 59 (assignment to immutable blocks) unless flambda
invariant checks are enabled.
(Vincent Laviron, review by Gabriel Scherer)
- #10981, #11276: Implement a -cmi-file option for ocamlc and ocamlopt.
(Sébastien Hinderer, review by Damien Doligez, Daniel Bünzli and
Florian Angeletti)
* #11049: Stop padding 1-digit compiler minor version numbers.
(So for instance OCaml 5.0 rather than 5.00)
(Sébastien Hinderer, review by David Allsopp, Florian Angeletti and
Xavier Leroy)
- #11184, #11670: Stop calling ranlib on created / installed libraries
(Sébastien Hinderer and Xavier Leroy, review by the same)
- #11253: Deprecate `ocaml script` and `ocamlnat` script where `script` has no
extension and is an implicit basename.
(David Allsopp, review by Florian Angeletti and Sébastien Hinderer)
### Internal/compiler-libs changes:
- #10878, #10909: restore flambda after the Multicore merge.
(Vincent Laviron, review by Gabriel Scherer and Xavier Leroy)
- #10864, #10888: restore afl-fuzz mode for sequential programs.
(Jan Midtgaard, review by Xavier Leroy and Gabriel Scherer)
- #11008, #11047: rework GC statistics in the Multicore runtime
(Gabriel Scherer, review by Enguerrand Decorne)
- #11058: basic debugging documentation in runtime/HACKING.adoc
(Gabriel Scherer, review by Enguerrand Decorne and Nicolás Ojeda Bär)
- #11199: Stop installing topdirs.cmi twice. The toplevel now reads topdirs.cmi
from +compiler-libs, as the debugger does.
(David Allsopp, review by Sébastien Hinderer)
- #11007, #11399: META files for the stdlib, compiler-libs and other libraries
(unix, dynlink, str, runtime_events, threads, ocamldoc) are now installed
along with the compiler.
(David Allsopp, Florian Angeletti, Nicolás Ojeda Bär and Sébastien Hinderer,
review by Daniel Bünzli, Kate Deplaix, Anil Madhavapeddy and Gabriel Scherer)
### Build system:
* #10893: Remove configuration options --disable-force-safe-string and
DEFAULT_STRING=unsafe as well as --enable-force-safe-string and
DEFAULT_STRING=safe which are now the default unconditionally.
(Kate Deplaix, review by Gabriel Scherer and David Allsopp)
- #11092: Build native-code compilers on OpenBSD/aarch64.
(Christopher Zimmermann, review by Anil Madhavapeddy)
- #11126: Build system: make it possible to choose which ocamldep
(and flags) to use when computing dependencies for the compiler.
Add a -no-slash option to ocamldep to let users override -slash.
(Sébastien Hinderer, review by David Allsopp)
- #11147: Factorize the stdlib-related compilation flags. Make it
possible to control them consistently through the STDLIBFLAGS
build variable. Make sure ocamldoc and ocamllex get compiled and
linked with debugging information (-g).
(Sébastien Hinderer, review by Gabriel Scherer)
- #11149: Make the bootstrap process reproducible on systems with non-big-endian
floating point. If the boot/ artefacts are up-to-date, this means that running
make bootstrap on any platform should not change the images in boot/ and paves
the way for automated testing that the bootstrap is repeatable.
(David Allsopp, review by Damien Doligez and Sébastien Hinderer)
- #11160: otherlibs: merge win32unix into unix.
(Sébastien Hinderer, review by David Allsopp, Nicolás Ojeda Bär,
Xavier Leroy, Vincent Laviron and Antonin Décimo)
* #11198, #11298: Install the Dynlink, Str and Unix libraries to individual
subdirectories of LIBDIR. The compiler, debugger and toplevel automatically
add `-I +lib` if required, but display an alert.
(David Allsopp, review by Florian Angeletti, Nicolás Ojeda Bär,
Valentin Gatien-Baron and Sébastien Hinderer)
- #11200: Install ocamlprof's Profiling runtime module to a +profiling,
removing it from the default namespace.
(David Allsopp, review by Sébastien Hinderer)
- #11294: Switch minimum required autoconf to 2.71.
(David Allsopp, review by Xavier Leroy)
- #11370, #11373: Don't pass CFLAGS to flexlink during configure.
(David Allsopp, report by William Hu, review by Xavier Leroy and
Sébastien Hinderer)
- #11487: Thwart FMA test optimization during configure
(William Hu, review by David Allsopp and Sébastien Hinderer)
- #11097: Build native-code compilers on NetBSD/aarch64
(Kate Deplaix, review by Anil Madhavapeddy)
### Bug fixes:
- #10768, #11340: Fix typechecking regression when combining first class
modules and GADTs.
(Jacques Garrigue, report by François Thiré, review by Matthew Ryan)
- #10790: don't drop variance and injectivity annotations when pretty printing
`with` constraints (for example, `with type +!'a t = ...`).
(Florian Angeletti, report by Luke Maurer, review by Matthew Ryan and
Gabriel Scherer)
- #11167: Fix memory leak from signal stack.
(Antoni Żewierżejew, review by Gabriel Scherer and Enguerrand Decorne)
- #11112: harden -use-runtime against spaces or quotes in the provided path
(Gabriel Scherer, report by Brahima Dibassi, review by David Allsopp)
- #11068, #11070: Fix typo in function name given in Unix_error exception for
Unix.readlink on Windows.
(David Allsopp, report by Xia Li-yao)
- #10807: Don't duplicate standard handles in the child process
spawned by win32unix Unix.create_process if the handles were already
inheritable. Fix broken signalling of EOF on standard handles if
they were already inheritable.
(Antonin Décimo, review by Xavier Leroy and Nicolás Ojeda Bär)
- #10868: Fix off-by-1 bug when initializing frame hashtables
(Jonah Beckford, review by Tom Kelly, Nicolás Ojeda Bär and
KC Sivaramakrishnan)
- #11077: Make dumpobj compatible with absence of naked pointer support
(Olivier Nicole and Jan Midtgaard, review by Gabriel Scherer)
- #11111: fix fork() usage in ocamltest C code.
When calling fork() from C code with the Multicore runtime active,
one needs to call caml_atfork_hook() on the forked child before it
can use the OCaml runtime.
(Gabriel Scherer, review by Xavier Leroy, report by Brahima Dibassi)
- #10809: Use the WSA_FLAG_NO_HANDLE_INHERIT on Windows when creating
sockets with WSASocket if the cloexec (non-inheritable) parameter is
true. Fixes a race condition where a child process could inherit the
socket and deadlock the parent.
(Antonin Décimo, review by Xavier Leroy)
- #11194, #11609: Fix inconsistent type variable names in "unbound type var"
messages
(Ulysse Gérard and Florian Angeletti, review Florian Angeletti and
Gabriel Scherer)
- #11204: Fix regression introduced in 4.14.0 that would trigger Warning 17 when
calling virtual methods introduced by constraining the self type from within
the class definition.
(Nicolás Ojeda Bär, review by Leo White)
- #11263, #11267: caml/misc.h: check whether `_MSC_VER` is defined before using
it to ensure that the headers can always be used in code which turns on
-Wundef (or equivalent).
(David Allsopp and Nicolás Ojeda Bär, review by Nicolás Ojeda Bär and
Sébastien Hinderer)
- #11289, #11405: fix some leaks on systhread termination
(Fabrice Buoro, Enguerrand Decorne, Gabriel Scherer,
review by Xavier Leroy and Florian Angeletti, report by Romain Beauxis)
- #11314, #11416: fix non-informative error message for module inclusion
(Florian Angeletti, report by Thierry Martinez, review by Gabriel Scherer)
- #11358, #11379: Refactor the initialization of bytecode threading,
This avoids a "dangling pointer" warning of GCC 12.1.
(Xavier Leroy, report by Armaël Guéneau, review by Gabriel Scherer)
- #11387, module type with constraints no longer crash the compiler in presence
of both shadowing warnings and the `-bin-annot` compiler flag.
(Florian Angeletti, report by Christophe Raffalli, review by Gabriel Scherer)
- #11392, #11392: assertion failure with -rectypes and external definitions
(Gabriel Scherer, review by Florian Angeletti, report by Dmitrii Kosarev)
- #11417: Fix regression allowing virtual methods in non-virtual classes.
(Leo White, review by Florian Angeletti)
- #11468: Fix regression from #10186 (OCaml 4.13) detecting IPv6 on Windows for
mingw-w64 i686 port.
(David Allsopp, review by Xavier Leroy and Sébastien Hinderer)
- #11482, #11542: Fix random crash in large closure allocation
(Damien Doligez, report by Thierry Martinez and Vincent Laviron, review by
Xavier Leroy)
- #11508, #11509: make Bytes.escaped domain-safe
(Christiano Haesbaert and Gabriel Scherer,
review by Xavier Leroy,
report by Jan Midtgaard and Tom Kelly)
- #11516, #11524: Fix the `deprecated_mutable` attribute.
(Chris Casinghino, review by Nicolás Ojeda Bär and Florian Angeletti)
- #11576: Fix bug in Bigarray.Genarray.init in the the case of zero-dimensional
arrays.
(Nicolás Ojeda Bär, Jeremy Yallop, report by Masayuki Takeda, review by Jeremy
Yallop and Florian Angeletti)
- #11587: Prevent integer comparison from being used on pointers
(Vincent Laviron, review by Gabriel Scherer)
- #11622: Prevent stack overflow when printing a constructor or record
mismatch error involving recursive types.
(Florian Angeletti, review by Gabriel Scherer)
- #11662, #11673: fix a memory leak when using Dynlink,
the bug was only present in development version of OCaml 5.
(Stephen Dolan, report by Andre Maroneze, review by Gabriel Scherer)
- #11732: Ensure that types from packed modules are always generalised
(Stephen Dolan and Leo White, review by Jacques Garrigue)
- #11737: Fix segfault condition in Unix.stat under Windows in the presence of
multiple threads.
(Marc Lasson, Nicolás Ojeda Bär, review by Gabriel Scherer and David Allsopp)
- #11776: Extend environment with functor parameters in `strengthen_lazy`.
(Chris Casinghino and Luke Maurer, review by Gabriel Scherer)
- #11533, #11534: follow synonyms again in #show_module_type
(this had stopped working in 4.14.0)
(Gabriel Scherer, review by Jacques Garrigue, report by Yaron Minsky)
OCaml 4.14.0 (28 March 2022)
----------------------------
### Language features:
- #10462: Add attribute to produce a compiler error for polls.
(Sadiq Jaffer, review by Mark Shinwell, Stephen Dolan
and Guillaume Munch-Maccagnoni)
- #10437: Allow explicit binders for type variables.
(Stephen Dolan, review by Leo White)
- #10441: Remove unnecessary parentheses surrounding immediate objects.
Allow 'object ... end # f', 'f object ... end', etc.
(Yan Dong, review by Nicolás Ojeda Bär, Florian Angeletti and Gabriel Scherer)
- #181, #9760, #10740: opt-in tail-modulo-cons (TMC) transformation
let[@tail_mod_cons] rec map f li = ...
(Frédéric Bour, Gabriel Scherer, Basile Clément,
review by Basile Clément and Pierre Chambart,
tested by Konstantin Romanov)
### Runtime system:
* #9391, #9424: Fix failed assertion in runtime due to ephemerons *set_* and
*blit_* function during Mark phase
(François Bobot, reported by Stephen Dolan, reviewed by Damien Doligez)
- #10195, #10680: Speed up GC by prefetching during marking
(Stephen Dolan, review by Xavier Leroy, Guillaume Munch-Maccagnoni,
Jacques-Henri Jourdan, Damien Doligez and Leo White)
- #10549: Stack overflow detection and naked pointers checking for ARM64
(Xavier Leroy, review by Stephen Dolan)
* #10675: Emit deprecation warnings when old C runtime function names
are used. This will break C stub code that uses these old names and
treats warnings as errors. The workaround is to use the new names.
(Xavier Leroy and David Allsopp, review by Sébastien Hinderer and
Damien Doligez)
- #10698, #10726: Free the alternate signal stack when the main OCaml
code or an OCaml thread stops
(Xavier Leroy, review by David Allsopp and Damien Doligez)
- #10730, 10731: Fix bug in `Obj.reachable_words` causing a slowdown when called
multiple time (Alain Frisch, report by ygrek, review by Xavier Leroy)
- #10926: Rename the two internal Windows Unicode functions with `caml_` prefix
instead of `win_`.
(David Allsopp, review by Kate Deplaix, Damien Doligez and Xavier Leroy)
### Code generation and optimizations:
- #10578: Increase the number of integer registers used for
parameter passing on PowerPC (16 registers) and on s390x (8 registers).
(Xavier Leroy, review by Mark Shinwell)
- #10591, #10615: Tune the heuristic for CSE of integer constants
so as to avoid excessive CSE on compiler-generated constants
and long register allocation times.
(Xavier Leroy, report by Edwin Török, review by Nicolás Ojeda Bär)
- #10595: Tail calls with up to 64 arguments are guaranteed to be compiled
as tail calls. To this end, memory locations in the domain state
are used for passing arguments that do not fit in registers.
(Xavier Leroy, review by Vincent Laviron)
- #10681: Enforce boolean conditions for the native backend
(Vincent Laviron, review by Gabriel Scherer)
- #10719: Ensure that build_apply respects Lambda.max_arity
(Stephen Dolan, review by Xavier Leroy)
- #10728: Ensure that functions are evaluated after their arguments
(Stephen Dolan, review by Mark Shinwell)
- #10732: Ensure right-to-left evaluation of arguments in cmm_helpers
(Greta Yorsh, review by Xavier Leroy)
### Standard library:
* #10710: Add UTF tools, codecs and validations to the Uchar, Bytes and
String modules.
(Daniel Bünzli, review by Florian Angeletti, Nicolás Ojeda Bär, Alain
Frisch and Gabriel Scherer)
* #10622: Annotate `Uchar.t` with immediate attribute
(Hongbo Zhang, reivew by Gabriel Scherer and Nicolás Ojeda Bär)
* #7812, #10475: `Filename.chop_suffix name suff` now checks that `suff`
is actually a suffix of `name` and raises Invalid_argument otherwise.
(Xavier Leroy, report by whitequark, review by David Allsopp)
* #10482: mark the Stream and Genlex modules as deprecated, in preparation
for a future removal. These modules (without deprecation alert)
are now provided by the camlp-streams library.
(Xavier Leroy, review by Nicolás Ojeda Bär)
- #10526: add Random.bits32, Random.bits64, Random.nativebits
(Xavier Leroy, review by Gabriel Scherer and François Bobot)
* #10568: remove Obj.marshal and Obj.unmarshal
(these functions have been deprecated for a while and are superseded
by the functions from module Marshal)
(François Pottier, review by Gabriel Scherer and Kate Deplaix)
- #10545: Add In_channel and Out_channel modules.
(Nicolás Ojeda Bär, review by Daniel Bünzli, Simon Cruanes, Gabriel Scherer,
Guillaume Munch-Maccagnoni, Alain Frisch and Xavier Leroy)
- #10538: add Out_channel.set_buffered and Out_channel.is_buffered to control
the buffering mode of output channels.
(Nicolás Ojeda Bär, review by John Whitington, Daniel Bünzli, David Allsopp
and Xavier Leroy)
* #10583, #10998: Add over 40 new functions in Seq.
(François Pottier and Simon Cruanes, review by Nicolás Ojeda Bär,
Daniel Bünzli, Naëla Courant, Craig Ferguson, Wiktor Kuchta,
Xavier Leroy, Guillaume Munch-Maccagnoni, Raphaël Proust, Gabriel Scherer
and Thierry Martinez)
- #10596, #10978: Add with_open_bin, with_open_text and with_open_gen to
In_channel and Out_channel. Also, add In_channel.input_all.
(Nicolás Ojeda Bär, review by Daniel Bünzli, Jérémie Dimino, Damien Doligez
and Xavier Leroy)
- #10658: add detailed information about the current version of OCaml
to the Sys module of the standard library.
(Sébastien Hinderer, review by Damien Doligez, Gabriel Scherer, David
Allsopp, Nicolás Ojeda Bär, Vincent Laviron)
- #10642: On Windows, Sys.remove and Unix.unlink now remove symlinks
to directories instead of raising EACCES. Introduce
caml/winsupport.h to hold more common code between the runtime,
lib-sys, and win32unix.
(Antonin Décimo, review by David Allsopp and Xavier Leroy)
- #10737: add new ephemeron API for forward compatibility with Multicore
OCaml.
(Damien Doligez, review by Stephen Dolan)
- #10786: The implementation of Complex.norm now uses Float.hypot.
(Christophe Troestler, review by David Allsopp and Xavier Leroy)
### Other libraries:
- #10192: Add support for Unix domain sockets on Windows and use them
to emulate Unix.socketpair (only available on Windows 1803+)
(Antonin Décimo, review by David Allsopp)
- #10469: Add Thread.set_uncaught_exception_handler and
Thread.default_uncaught_exception_handler.
(Enguerrand Decorne, review by David Allsopp)
- #10697: Bindings of dup and dup2 in win32unix now correctly call
WSADuplicateSocket on sockets instead of DuplicateHandle.
(Antonin Décimo, review by Xavier Leroy and Nicolás Ojeda Bär)
* #10926, #11336: Ensure all C functions in the Unix library are prefixed with
`caml_`.
(David Allsopp, review by Kate Deplaix, Damien Doligez and Xavier Leroy)
- #10951: Introduce the Thread.Exit exception as an alternative way to
terminate threads prematurely. This alternative way will become
the standard way in 5.0.
(Xavier Leroy, review by Florian Angeletti)
### Tools:
- #9701: Release bytecode only after collecting backtrace information
for exceptions, same for dynamic loaded code compiled from toplevel on
ocamlnat.
(Renato Alencar, reported by Krzysztof Leśniak, reviewed by Gabriel Scherer)
- #10839: Fix regression of #show when printing class type
(Élie Brami, review by Florian Angeletti)
- #3959, #7202, #10476: ocaml, in script mode, directive errors
(`#use "missing_file";;`) use stderr and exit with an error.
(Florian Angeletti, review by Gabriel Scherer)
- #10438: add a new toplevel cli argument `-e <script>` to
run script passed to the toplevel.
(Pavlo Khrystenko, review by Gabriel Scherer)
- #10524: Directive argument type error now shows expected and received type.
(Wiktor Kuchta, review by Gabriel Scherer)
- #10560: Disable colors if the env variable `NO_COLOR` is set. If
`OCAML_COLOR` is set, its setting takes precedence over `NO_COLOR`.
(Nicolás Ojeda Bär, report by Gabriel Scherer, review by Daniel Bünzli,
Gabriel Scherer and David Allsopp)
- #10565: Toplevel value printing: truncate strings only after 8 bytes.
(Wiktor Kuchta, review by Xavier Leroy)
- #10527: Show "#help;; for help" at toplevel startup
(Wiktor Kuchta, review by David Allsopp and Florian Angeletti)
- #10846: add the `-shape` command-line option to ocamlobjinfo. When reading a
`cmt` file, shape information will only be shown if that option is used.
(Ulysse Gérard, review by Florian Angeletti)
### Debugging:
- #10517, #10594: when running ocamldebug on a program linked with the
threads library, don't fail immediately; instead, allow debugging
until the program creates a thread for the first time, then fail cleanly.
(Xavier Leroy, report by @anentropic, review by Gabriel Scherer)
- #9621: Pack the ocamldebug modules to minimize clashes
(Raphael Sousa Santos, review by Vincent Laviron and Gabriel Scherer)
### Manual and documentation:
- #7812, #10475: reworded the description of the behaviors of
float->int conversions in case of overflow, and of iterators
in case of concurrent modifications.
(Xavier Leroy, report by whitequark, review by David Allsopp)
- #8697, #10666: add M, m, n options of the OCAMLRUNPARAM to manual and man page
for ocamlrun command line options
(Dong An and Anukriti Kumar, review by David Allsopp, Gabriel Scherer
and Damien Doligez)
- #10281, #10685: Add description of C compiler on macOS and Windows platforms.
(Dong An, review by Xavier Leroy and David Allsopp)
- #10397: Document exceptions raised by Unix module functions on Windows
(Martin Jambon, review by Daniel Bünzli, David Alsopp, Damien Doligez,
Xavier Leroy, and Florian Angeletti)
- #10589: Fix many typos (excess/inconsistent spaces) in the HTML manual.
(Wiktor Kuchta, review by Florian Angeletti)
- #10605: manual, name few css classes to ease styling and maintainability.
(Florian Angeletti, review by Wiktor Kuchta and Gabriel Scherer)
- #10668, #10669: the changelog (this file), LICENSE and README files are now
installed as part of the distribution. The destination directory can be
customized using the `--docdir` argument to `./configure`.
(Nicolás Ojeda Bär, report by Daniel Bünzli, review by David Allsopp,
Sébastien Hinderer, and Daniel Bünzli)
- #10671, #10672: webman: Fix misalignments in unordered lists by changing the
CSS for coloring bullets
(Wiktor Kuchta, review by Florian Angeletti)
- #11107: Lifted comments in the Parsetree module into actual documentation.
(Paul-Elliot Anglès d'Auriac, review by Florian Angeletti)
- #11120, #11133: man pages, add missing warning entries and add mnemonic names
to the list of warnings.
(Florian Angeletti, report by Kate Deplaix, review by Gabriel Scherer)
### Compiler user-interface and warnings:
- #10328, #10780: Give more precise error when disambiguation could not
possibly work.
(Leo White, review by Gabriel Scherer and Florian Angeletti)
- #10361: Improve error messages for mismatched record and variant
definitions.
(Florian Angeletti, review by Gabriel Radanne and Gabriel Scherer)
- #10407: Produce more detailed error messages that contain full error traces
when module inclusion fails.
(Antal Spector-Zabusky, review by Florian Angeletti)
- #10531: add naked_pointers to ocamlc -config exporting NAKED_POINTERS from
Makefile.config.
(Damien Doligez, review by Mark Shinwell and Gabriel Scherer)
- #9116, #9118, #10582: Fix single-line source highlighting in the
presence of tabs
(Armaël Guéneau, review by Gabriel Scherer,
split off from #9118 by Kate Deplaix, report by Ricardo M. Correia)
- #10488: Improve type variable name generation and recursive type detection
when printing type errors; this ensures that the names given to type variables
are always reused in the following portion of the trace and also removes
spurious `as 'a`s in types.
(Antal Spector-Zabusky, review by Florian Angeletti)
- #10794: Clarify warning 57 (Ambiguous or-pattern variables under guard)
(Wiktor Kuchta, review by Gabriel Scherer)
### Internal/compiler-libs changes:
- #1599: add unset directive to ocamltest to clear environment variables before
running tests.
(David Allsopp, review by Damien Doligez and Sébastien Hinderer)
- #8516: Change representation of class signatures
(Leo White, review by Thomas Refis)
- #9444: -dtypedtree, print more explictly extra nodes in pattern ast.
(Frédéric Bour, review by Gabriel Scherer)
- #10337: Normalize type_expr nodes on access
One should now use accessors such as get_desc and get_level to access fields
of type_expr, rather than calling manually Btype.repr (which is now hidden
in Types.Transient_expr).
(Jacques Garrigue and Takafumi Saikawa,
review by Florian Angeletti and Gabriel Radanne)
- #10474: Force normalization on access to row_desc
Similar to #10337. Make row_desc an abstract types, with constructor
create_row and accessors defined in Types rather than Btype.
A normalized view row_desc_repr is provided for convenience.
(Jacques Garrigue and Takafumi Saikawa,
review by Leo White and Florian Angeletti)
- #10541: Make field_kind and commutable abstract, enforcing correct access
(Jacques Garrigue and Takafumi Saikawa,
review by Thomas Refis and Florian Angeletti)
- #10575: add a -dump-dir flag, which redirects all debugging printer
(`-dprofile`, `-dlambda`, ...) to the target directory
(Florian Angeletti, review by Thomas Refis and Gabriel Scherer)
* #10627: Make row_field abstract
Completes #10474 by making row_field abstract too.
An immutable view row_field_view is provided, and one converts between it
and row_field via inj_row_field and row_field_repr.
(Jacques Garrigue and Takafumi Saikawa, review by Florian Angeletti)
- #10433: Remove the distinction between 32-bit aligned and 64-bit aligned
64-bit floats in Cmm.memory_chunk.
(Greta Yorsh, review by Xavier Leroy)
- #10434: Pun labelled arguments with type constraint in function applications.
(Greta Yorsh, review by Nicolas Chataing and Nicolás Ojeda Bär)
- #10470: Remove unused `cstr_normal` field from the `constructor_description`
type
(Nicolas Chataing, review by Gabriel Scherer)
- #10382: Don't repeat environment entries in Typemod.check_type_decl
(Leo White, review by Gabriel Scherer and Florian Angeletti)
- #10472: refactor caml_sys_random_seed to ease future Multicore changes
(Gabriel Scherer, review by Xavier Leroy)
- #10487: Move logic to get the type path from a constructor return type in
Types
(Nicolas Chataing, review by Jacques Garrigue)
- #10555: Do not use ghost locations for type constraints
(Nicolás Ojeda Bär, report by Anton Bachin, review by Thomas Refis)
- #10598, #10616: fix an exponential blow-up when typechecking nested module
types
(Florian Angeletti, report and review by Stephen Dolan)
- #10559: Evaluate signature substitutions lazily
(Stephen Dolan, review by Leo White)
- #8776, #10624: Fix compilation time regression introduced in 4.08
(Nicolás Ojeda Bär, fix by Leo White, report by Alain Frisch, review by Thomas
Refis)
- #10618: Expose more Pprintast functions
(Guillaume Petiot, review by Gabriel Scherer)
- #10637: Outcometree: introduce a record type for constructors
(Gabriel Scherer, review by Thomas Refis)
- #10516: refactor the compilation of the 'switch' construct
(Gabriel Scherer, review by Wiktor Kuchta and Luc Maranget)
- #10670: avoid global C state in the RE engine for the "str" library
(Xavier Leroy, review by Gabriel Scherer)
- #10678: Expose descriptions in Warnings module
(Leo White, review by Gabriel Scherer and Alain Frisch)
- #10690: Always build ocamltoplevel.cmxa
(David Allsopp, review by Gabriel Scherer)
- #10692: Expose Parse.module_type and Parse.module_expr
(Guillaume Petiot, review by Gabriel Scherer)
- #10714: Add X86_proc.with_internal_assembler for temporarily changing the
assembler used by the backend.
(David Allsopp, review by Gabriel Scherer)
- #10715: Allow the assembler and loader to be substituted in ocamlnat, for
example to be replaced with a binary emitter.
(David Allsopp and Nathan Rebours, review by Louis Gesbert,
Nicolás Ojeda Bär and Gabriel Scherer)
- #10718, #11012: Add "Shape" information to the cmt files. Shapes are an
abstraction of modules that can be used by external tooling to perform
definition-aware operations.
(Ulysse Gérard, Thomas Refis and Leo White, review by Florian Angeletti)
- #10742: strong call-by-need reduction for shapes
(Gabriel Scherer and Nathanaëlle Courant,
review by Florian Angeletti, Ulysse Gérard and Thomas Refis)
### Build system:
- #10835 Disable DT_TEXTREL warnings on x86 32 bit architecture by passing
-Wl,-z,notext in mksharedlib and mkmaindll. Fixes relocation issues, reported
in #9800, making local patches in Debian, Alpine, and FreeBSD superfluous.
(Hannes Mehnert with Kate Deplaix and Stéphane Glondu, review by Xavier Leroy)
- #10717: Simplify the installation of man pages
(Sébastien Hinderer, review by David Allsopp)
- #10739: Stop installing extract_crc
(Sébastien Hinderer, review by David Allsopp, Daniel Bünzli, Xavier Leroy
and Gabriel Scherer)
- #10797: Compile with -d2VolatileMetadata- on supporting versions of Visual
Studio. This suppresses the addition of .voltbl sections and eliminates
linking errors in systhreads.
(David Allsopp, review by Jonah Beckford and Sébastien Hinderer)
### Bug fixes:
- #9214, #10709: Wrong unmarshaling of function pointers in debugger mode.
This was causing ocamldebug to crash when running some user-defined printers.
(Xavier Leroy, report by Rehan Malak, review by Gabriel Scherer and
Vincent Laviron)
- #10364: Improve detection of ambiguity in case bodies.
(Jacques Garrigue, review by Thomas Refis)
- #10473: Add CFI directives to RISC-V runtime and asmcomp.
This allows stacktraces to work in gdb through C and OCaml calls.
(Edwin Török, review by Nicolás Ojeda Bär and Xavier Leroy)
- #10539: Field kinds should be kept when copying types
Losing the sharing meant that one could desynchronize them between several
occurrences of self, allowing a method to be both public and hidden,
which broke type soundness.
(Jacques Garrigue, review by Leo White)
- #10542: Fix detection of immediate64 types through unboxed types.
(Leo White, review by Stephen Dolan and Gabriel Scherer)
- #10590: Some typechecker optimisations
(Stephen Dolan, review by Gabriel Scherer and Leo White)
- #10633: Stack overflow recovery in ocamlopt for AMD64/Linux and ARM/Linux