public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/108713] New: ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c'
@ 2023-02-08 8:55 tschwinge at gcc dot gnu.org
2023-02-08 9:05 ` [Bug rtl-optimization/108713] " jakub at gcc dot gnu.org
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: tschwinge at gcc dot gnu.org @ 2023-02-08 8:55 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108713
Bug ID: 108713
Summary: ICE during RTL pass: into_cfglayout for
x86_64-pc-linux-gnu '-m32', C++
'libgomp.c-c++-common/for-11.c'
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: tschwinge at gcc dot gnu.org
CC: jakub at gcc dot gnu.org
Target Milestone: ---
With GCC sources based on 2023-01-27 commit
84eb39556cc8449e04b5f48bd5c131941a7a2529, with a bunch of local OMP changes on
top (but those shouldn't be touching the relevant area of code), standard
bootstrap build, I've observed an ICE as follows on our x86_64-pc-linux-gnu
testing system amd_ryzen1, in routine libgomp testing for '-m32':
[...]
spawn -ignore SIGHUP gcc -x c++
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-11.c
-m32 -foffload-options=amdgcn-amdhsa=-march=gfx900
-I../source-gcc/libgomp/testsuite/../../include
-I../source-gcc/libgomp/testsuite/.. -fmessage-length=0
-fno-diagnostics-show-caret -fdiagnostics-color=never -fopenmp -O2 -lstdc++ -lm
-o ./for-11.exe
during RTL pass: into_cfglayout
In file included from
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-1.h:13,
from
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-5.c:114,
from
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-11.c:4:
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-2.h: In
function 'f34_ttdpfs_ds128_auto() [clone ._omp_fn.1]':
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-2.h:520:17:
internal compiler error: Segmentation fault
0x16a482f crash_signal
[...]/source-gcc/gcc/toplev.cc:314
0x268a3e2 compact_blocks()
[...]/source-gcc/gcc/cfg.cc:182
0x26951cf cleanup_cfg(int)
[...]/source-gcc/gcc/cfgcleanup.cc:3131
0x11b682a execute
[...]/source-gcc/gcc/cfgrtl.cc:3703
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
compiler exited with status 1
FAIL: libgomp.c++/../libgomp.c-c++-common/for-11.c (internal compiler
error: Segmentation fault)
[...]
Nothing interesting in 'dmesg', as far as I can tell.
'gcc/cfgrtl.cc':
3693 class pass_into_cfg_layout_mode : public rtl_opt_pass
3694 {
3695 public:
3696 pass_into_cfg_layout_mode (gcc::context *ctxt)
3697 : rtl_opt_pass (pass_data_into_cfg_layout_mode, ctxt)
3698 {}
3699
3700 /* opt_pass methods: */
3701 unsigned int execute (function *) final override
3702 {
3703 cfg_layout_initialize (0);
'gcc/cfgcleanup.cc':
3109 bool
3110 cleanup_cfg (int mode)
3111 {
[...]
3131 compact_blocks ();
'gcc/cfg.cc':
167 void
168 compact_blocks (void)
169 {
170 int i;
171
172 SET_BASIC_BLOCK_FOR_FN (cfun, ENTRY_BLOCK, ENTRY_BLOCK_PTR_FOR_FN
(cfun));
173 SET_BASIC_BLOCK_FOR_FN (cfun, EXIT_BLOCK, EXIT_BLOCK_PTR_FOR_FN
(cfun));
174
175 if (df)
176 df_compact_blocks ();
177 else
178 {
179 basic_block bb;
180
181 i = NUM_FIXED_BLOCKS;
182 FOR_EACH_BB_FN (bb, cfun)
183 {
184 SET_BASIC_BLOCK_FOR_FN (cfun, i, bb);
185 bb->index = i;
186 i++;
187 }
This is the first/only time I've seen this; the ICE doesn't reproduce now for a
few manual re-invocations. Maybe just "cosmic rays"...
A run with '-wrapper valgrind' did find a lot of stuff in IRA and LRA, but it's
a GCC build without '--enable-valgrind-annotations', so I'm not sure what that
means.
[...]
==24856== Conditional jump or move depends on uninitialised value(s)
==24856== at 0x14B18E5: mark_pseudo_regno_live(int) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14B3260: process_bb_node_lives(ira_loop_tree_node*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x1491F28: ira_traverse_loop_tree(bool,
ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void
(*)(ira_loop_tree_node*)) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14B45BF: ira_create_allocno_live_ranges() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x1496424: ira_build() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x148DB0E: (anonymous
namespace)::pass_ira::execute(function*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D87D5: cgraph_node::expand() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856==
==24856== Conditional jump or move depends on uninitialised value(s)
==24856== at 0x14B17F8: make_object_live(ira_object*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14B1901: mark_pseudo_regno_live(int) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14B3260: process_bb_node_lives(ira_loop_tree_node*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x1491F28: ira_traverse_loop_tree(bool,
ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void
(*)(ira_loop_tree_node*)) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14B45BF: ira_create_allocno_live_ranges() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x1496424: ira_build() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x148DB0E: (anonymous
namespace)::pass_ira::execute(function*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D87D5: cgraph_node::expand() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856==
==24856== Use of uninitialised value of size 8
==24856== at 0x14B18EA: mark_pseudo_regno_live(int) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14B3260: process_bb_node_lives(ira_loop_tree_node*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x1491F28: ira_traverse_loop_tree(bool,
ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void
(*)(ira_loop_tree_node*)) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14B45BF: ira_create_allocno_live_ranges() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x1496424: ira_build() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x148DB0E: (anonymous
namespace)::pass_ira::execute(function*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D87D5: cgraph_node::expand() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
[...]
==24856== Use of uninitialised value of size 8
==24856== at 0x149F1DB: ira_build_conflicts() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x1496A74: ira_build() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x148DB0E: (anonymous
namespace)::pass_ira::execute(function*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D87D5: cgraph_node::expand() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11DC8B7: symbol_table::finalize_compilation_unit() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x16A4AEF: compile_file() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0xE07081: toplev::main(int, char**) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856==
==24856== Conditional jump or move depends on uninitialised value(s)
==24856== at 0x14F3B2D: update_pseudo_point(int, int, point_type) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14F440D: process_bb_lives(basic_block_def*, int&, bool)
(in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14F659A: lra_create_live_ranges_1(bool, bool) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14F713F: lra_create_live_ranges(bool, bool) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14D4BEF: lra(_IO_FILE*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x14867F9: (anonymous
namespace)::pass_reload::execute(function*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D87D5: cgraph_node::expand() (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in
[...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus)
[...]
==24856== More than 100 errors detected. Subsequent errors
==24856== will still be recorded, but in less detail than before.
[...]
There are no missing commits for 'gcc/cfg*' files, and for 'gcc/ira* gcc/lra*'
only PR103541 commit r13-5730-gf661c0bb6371f355966a67b5ce71398e80792948 "RA:
Implement reuse of equivalent memory for caller saves optimization", which
doesn't immediately look relevant.
Do you think this is worth chasing down, or let it be, and only re-open should
I run into this again?
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug rtl-optimization/108713] ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c'
2023-02-08 8:55 [Bug rtl-optimization/108713] New: ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c' tschwinge at gcc dot gnu.org
@ 2023-02-08 9:05 ` jakub at gcc dot gnu.org
2023-02-08 9:17 ` tschwinge at gcc dot gnu.org
2023-03-29 21:23 ` tschwinge at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: jakub at gcc dot gnu.org @ 2023-02-08 9:05 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108713
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
If you can reproduce it with vanilla trunk, it is worth it, sure, but without a
reliable reproducer there isn't much to do. Is the ICE in an offload compiler
or on the host?
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug rtl-optimization/108713] ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c'
2023-02-08 8:55 [Bug rtl-optimization/108713] New: ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c' tschwinge at gcc dot gnu.org
2023-02-08 9:05 ` [Bug rtl-optimization/108713] " jakub at gcc dot gnu.org
@ 2023-02-08 9:17 ` tschwinge at gcc dot gnu.org
2023-03-29 21:23 ` tschwinge at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: tschwinge at gcc dot gnu.org @ 2023-02-08 9:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108713
--- Comment #2 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #1)
> If you can reproduce it with vanilla trunk, it is worth it, sure, but
> without a reliable reproducer there isn't much to do.
I'll attempt to reproduce with clean sources, and Valgrind enabled.
> Is the ICE in an
> offload compiler or on the host?
Host; as of "Remove support for Intel MIC offloading", there's no offloading
configurations anymore for '-m32'... ;-\
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug rtl-optimization/108713] ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c'
2023-02-08 8:55 [Bug rtl-optimization/108713] New: ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c' tschwinge at gcc dot gnu.org
2023-02-08 9:05 ` [Bug rtl-optimization/108713] " jakub at gcc dot gnu.org
2023-02-08 9:17 ` tschwinge at gcc dot gnu.org
@ 2023-03-29 21:23 ` tschwinge at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: tschwinge at gcc dot gnu.org @ 2023-03-29 21:23 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108713
--- Comment #3 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
(Possibly?) similarly now with GCC sources based on 2023-03-28 commit
b3c5933ee726004e4e47291d422dfe7ac3345062, with a bunch of local OMP changes on
top (but those shouldn't be touching the relevant area of code), standard
bootstrap build, I've observed an ICE as follows on our x86_64-pc-linux-gnu
testing system amd_ryzen3, in routine libgomp testing for '-m32':
[...]
spawn -ignore SIGHUP gcc -x c++
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-5.c
-m32 -foffload-options=amdgcn-amdhsa=-march=gfx906
-I../source-gcc/libgomp/testsuite/../../include
-I../source-gcc/libgomp/testsuite/.. -fmessage-length=0
-fno-diagnostics-show-caret -fdiagnostics-color=never -fopenmp -O2 -lstdc++ -lm
-o ./for-5.exe
during RTL pass: reload
In file included from
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-1.h:18,
from
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-5.c:50:
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-2.h: In
function 'f8_tpf_simd_guided32() [clone ._omp_fn.1]':
../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-2.h:127:29:
internal compiler error: Segmentation fault
0x16a1b7f crash_signal
[...]/source-gcc/gcc/toplev.cc:314
0x129c1eb base_pool_allocator<memory_block_pool>::remove(void*)
[...]/source-gcc/gcc/alloc-pool.h:445
0x129c1eb object_allocator<et_node>::remove(et_node*)
[...]/source-gcc/gcc/alloc-pool.h:524
0x129c1eb et_free_tree_force
[...]/source-gcc/gcc/et-forest.cc:502
0x1214868 free_dominance_info(function*, cdi_direction)
[...]/source-gcc/gcc/dominance.cc:812
0x1484b08 do_reload
[...]/source-gcc/gcc/ira.cc:5955
0x1484b08 execute
[...]/source-gcc/gcc/ira.cc:6149
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
compiler exited with status 1
FAIL: libgomp.c++/../libgomp.c-c++-common/for-5.c (internal compiler error:
Segmentation fault)
[...]
(In reply to Thomas Schwinge from comment #2)
> (In reply to Jakub Jelinek from comment #1)
> > If you can reproduce it with vanilla trunk, it is worth it, sure, but
> > without a reliable reproducer there isn't much to do.
>
> I'll attempt to reproduce with clean sources, and Valgrind enabled.
Have not yet gotten to that.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-03-29 21:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-08 8:55 [Bug rtl-optimization/108713] New: ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c' tschwinge at gcc dot gnu.org
2023-02-08 9:05 ` [Bug rtl-optimization/108713] " jakub at gcc dot gnu.org
2023-02-08 9:17 ` tschwinge at gcc dot gnu.org
2023-03-29 21:23 ` tschwinge at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).