https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98531
--- Comment #9 from Rainer Orth <ro at gcc dot gnu.org> ---
I've now managed to test your v2 patch, with mixed results:
* On Solaris 11.4:
the libstdc++ failures are gone
the new tests PASS
however, the old g++.dg/modules tests continue to ICE as before
* On Solaris 11.3:
the new tests ICE:
FAIL: g++.dg/modules/pr98531_a.H -std=c++17 (internal compiler error)
FAIL: g++.dg/modules/pr98531_a.H -std=c++17 (test for excess errors)
FAIL: g++.dg/modules/pr98531_a.H -std=c++2a (internal compiler error)
FAIL: g++.dg/modules/pr98531_a.H -std=c++2a (test for excess errors)
FAIL: g++.dg/modules/pr98531_a.H module-cmi
(gcm.cache/\$srcdir/g++.dg/modules/pr98531_a.H.gcm)
FAIL: g++.dg/modules/pr98531_a.H module-cmi
(gcm.cache/\$srcdir/g++.dg/modules/pr98531_a.H.gcm)
FAIL: g++.dg/modules/pr98531_b.C -std=c++17 (test for excess errors)
FAIL: g++.dg/modules/pr98531_b.C -std=c++2a (test for excess errors)
Excess errors:
/vol/gcc/src/hg/master/local/gcc/testsuite/g++.dg/modules/pr98531_a.H: internal
compiler error: in tree_node, at cp/module.cc:9137
0xa218acd trees_out::tree_node(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:9137
0x8c4314e trees_out::core_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:6013
0x8c465cf trees_out::tree_node_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:7154
0x8c465cf trees_out::tree_value(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:8968
0x8c4259e trees_out::tree_node(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:9166
0x8c4314e trees_out::core_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:6013
0x8c465cf trees_out::tree_node_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:7154
0x8c465cf trees_out::tree_value(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:8968
0x8c4259e trees_out::tree_node(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:9166
0x8c4314e trees_out::core_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:6013
0x8c465cf trees_out::tree_node_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:7154
0x8c465cf trees_out::tree_value(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:8968
0x8c4259e trees_out::tree_node(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:9166
0x8c4314e trees_out::core_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:6013
0x8c465cf trees_out::tree_node_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:7154
0x8c465cf trees_out::tree_value(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:8968
0x8c4259e trees_out::tree_node(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:9166
0x8c4314e trees_out::core_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:6013
0x8c465cf trees_out::tree_node_vals(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:7154
0x8c465cf trees_out::tree_value(tree_node*)
/vol/gcc/src/hg/master/local/gcc/cp/module.cc:8968
This seems to be exactly the same stacktrace as the one in the g++.dg/modules
tests. I suspected that this is due to the fact that unlike Solaris 11.4,
11.3 doesn't have __cxa_atexit in libc, and indeed compiling on 11.3 with
-fuse-cxa-atexit makes the ICE go away, while -fno-use-cxa-atexit on 11.4
causes it.