https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96901
Bug ID: 96901
Summary: [11 Regression] Many libstdc++ tests FAIL on
i686-linux due to a PCH FE bug
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
Target Milestone: ---
I'm seeing following regressions between Monday and Tuesday evening CET trunk
bootstraps:
Running target unix
+FAIL: 20_util/bind/42593.cc (test for excess errors)
+FAIL: 20_util/bind/48698.cc (test for excess errors)
+FAIL: 20_util/is_compound/value.cc (test for excess errors)
+FAIL: 20_util/is_fundamental/value.cc (test for excess errors)
+FAIL: 20_util/is_signed/value.cc (test for excess errors)
+FAIL: 20_util/is_unsigned/value.cc (test for excess errors)
+FAIL: 20_util/unique_ptr/assign/nullptr.cc (test for excess errors)
+UNRESOLVED: 20_util/unique_ptr/assign/nullptr.cc compilation failed to produce
executable
+FAIL: 20_util/unique_ptr/cons/convertible_neg.cc (test for excess errors)
+FAIL: 20_util/unique_ptr/cons/incomplete.cc (test for excess errors)
+FAIL: 20_util/unique_ptr/cons/nullptr.cc (test for excess errors)
+UNRESOLVED: 20_util/unique_ptr/cons/nullptr.cc compilation failed to produce
executable
+FAIL:
20_util/unique_ptr/requirements/explicit_instantiation/explicit_instantiation.cc
(test for excess errors)
+FAIL: 21_strings/basic_string/allocator/wchar_t/noexcept.cc (test for excess
errors)
+FAIL: 22_locale/conversions/string/requirements/typedefs-2.cc (test for excess
errors)
+FAIL: 23_containers/list/allocator/noexcept.cc (test for excess errors)
+FAIL: 23_containers/map/modifiers/insert/2.cc (test for excess errors)
+UNRESOLVED: 23_containers/map/modifiers/insert/2.cc compilation failed to
produce executable
+FAIL: 23_containers/map/modifiers/insert/5.cc (test for excess errors)
+UNRESOLVED: 23_containers/map/modifiers/insert/5.cc compilation failed to
produce executable
+FAIL: 23_containers/multimap/modifiers/insert/2.cc (test for excess errors)
+UNRESOLVED: 23_containers/multimap/modifiers/insert/2.cc compilation failed to
produce executable
+FAIL: 23_containers/multimap/modifiers/insert/22102.cc (test for excess
errors)
+UNRESOLVED: 23_containers/multimap/modifiers/insert/22102.cc compilation
failed to produce executable
+FAIL: 23_containers/multimap/modifiers/insert/4.cc (test for excess errors)
+UNRESOLVED: 23_containers/multimap/modifiers/insert/4.cc compilation failed to
produce executable
+FAIL: 23_containers/multiset/allocator/swap.cc (test for excess errors)
+UNRESOLVED: 23_containers/multiset/allocator/swap.cc compilation failed to
produce executable
+FAIL: 23_containers/set/allocator/swap.cc (test for excess errors)
+UNRESOLVED: 23_containers/set/allocator/swap.cc compilation failed to produce
executable
+FAIL: 23_containers/unordered_map/insert/map_single_move-2.cc (test for excess
errors)
+UNRESOLVED: 23_containers/unordered_map/insert/map_single_move-2.cc
compilation failed to produce executable
+FAIL: 23_containers/unordered_map/modifiers/reserve.cc (test for excess
errors)
+UNRESOLVED: 23_containers/unordered_map/modifiers/reserve.cc compilation
failed to produce executable
+FAIL: 23_containers/vector/allocator/noexcept.cc (test for excess errors)
+FAIL: 23_containers/vector/bool/allocator/noexcept.cc (test for excess errors)
+FAIL: 25_algorithms/max/constexpr.cc (test for excess errors)
+FAIL: 25_algorithms/min/constexpr.cc (test for excess errors)
+FAIL: 26_numerics/random/cauchy_distribution/cons/default.cc (test for excess
errors)
+UNRESOLVED: 26_numerics/random/cauchy_distribution/cons/default.cc compilation
failed to produce executable
+FAIL: 26_numerics/random/extreme_value_distribution/cons/default.cc (test for
excess errors)
+UNRESOLVED: 26_numerics/random/extreme_value_distribution/cons/default.cc
compilation failed to produce executable
+FAIL: 26_numerics/random/normal_distribution/cons/default.cc (test for excess
errors)
+UNRESOLVED: 26_numerics/random/normal_distribution/cons/default.cc compilation
failed to produce executable
+FAIL: 26_numerics/random/student_t_distribution/cons/default.cc (test for
excess errors)
+UNRESOLVED: 26_numerics/random/student_t_distribution/cons/default.cc
compilation failed to produce executable
+FAIL: 28_regex/match_results/ctors/wchar_t/default.cc (test for excess errors)
+UNRESOLVED: 28_regex/match_results/ctors/wchar_t/default.cc compilation failed
to produce executable
FAIL: 29_atomics/atomic_float/1.cc execution test
+FAIL: 30_threads/thread/adl.cc (test for excess errors)
+FAIL: experimental/net/buffer/traits.cc (test for excess errors)
+FAIL: experimental/net/execution_context/make_service.cc (test for excess
errors)
FAIL: experimental/net/internet/resolver/ops/lookup.cc execution test
+FAIL: experimental/optional/relops/2.cc (test for excess errors)
+UNRESOLVED: experimental/optional/relops/2.cc compilation failed to produce
executable
+FAIL: experimental/optional/relops/3.cc (test for excess errors)
+UNRESOLVED: experimental/optional/relops/3.cc compilation failed to produce
executable
+FAIL: ext/random/normal_mv_distribution/cons/default.cc (test for excess
errors)
+UNRESOLVED: ext/random/normal_mv_distribution/cons/default.cc compilation
failed to produce executable
=== libstdc++ Summary ===
-# of expected passes 15192
-# of unexpected failures 2
+# of expected passes 15136
+# of unexpected failures 40
# of expected failures 98
+# of unresolved testcases 19
# of unsupported tests 334
-Compiler version: 11.0.0 20200831 (experimental) (GCC)
+Compiler version: 11.0.0 20200901 (experimental) (GCC)
Platform: i686-pc-linux-gnu
The regressions ICEs are all PCH related, with ICEs like:
FAIL: 20_util/bind/42593.cc (test for excess errors)
Excess errors:
/home/jakub/src/gcc/obj71/i686-pc-linux-gnu/libstdc++-v3/include/chrono:441:
in 'constexpr' expansion of 'std::chrono::duration<long long int, std::ratio<1,
1000000000> >::_S_gcd(((intmax_t)std::ratio<1>::den), ((intmax_t)std::ratio<1,
1000000000>::den))'
/home/jakub/src/gcc/obj71/i686-pc-linux-gnu/libstdc++-v3/include/chrono:442:
internal compiler error: Segmentation fault
0x8dd035a crash_signal
../../gcc/toplev.c:327
0x86877b6 cxx_eval_call_expression
../../gcc/cp/constexpr.c:2622
0x8688782 cxx_eval_constant_expression
../../gcc/cp/constexpr.c:5765
0x868bcab cxx_eval_outermost_constant_expr
../../gcc/cp/constexpr.c:6772
0x86901c0 maybe_constant_value(tree_node*, tree_node*, bool)
../../gcc/cp/constexpr.c:7045
0x87195dc fold_for_warn(tree_node*)
../../gcc/cp/expr.c:418
It is PCH related and very hard to reproduce, after all, the same cc1plus
doesn't crash always, but only sometimes.
I've tracked it to what seems to be another occurrence of PR92458, this time on
fundef_copies_table. This is a non-deletable non-cache hash_map<tree, tree>
preserved across PCH, which means it is hashed when compiling the PCH header
using pointer hashing of the decls, then PCH reassigns addresses to GC
registered objects. When PCH is read, the hash_map will usually contain keys
with different hash values compared to what it hashed originally, so there are
chances that some fundef->decl isn't found. The ICE is because we don't find
an entry for _S_gcd, so add a for now NULL value to that function, but the
addition to the hash table results in later call not finding that NULL entry,
but some other one from before PCH was saved, which results in very bad things
for recursive constexpr calls.