https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120112
Bug ID: 120112
Summary: -Weffc++ -Wmismatched-tags -Wrestrict -Wsystem-headers
leads to internal_error
Product: gcc
Version: 15.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: joo.peter at gmail dot com
Target Milestone: ---
Created attachment 61312
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61312&action=edit
uncompressed size: 5MB
The minimal example is this main.cpp:
#include <boost/test/unit_test.hpp>
#include <boost/icl/ptime.hpp>
#include <boost/icl/interval_map.hpp>
using namespace std;
using namespace boost::posix_time;
using namespace boost::icl;
interval_map<ptime, std::set<string>> f()
{
interval_map<ptime, std::set<string>> x;
return x;
}
The compilation command which triggers the problem:
1) using godbolt's gcc 15.1.0:
-Weffc++ -Wmismatched-tags -Wrestrict -Wsystem-headers
live demo: https://godbolt.org/z/3Pxn81dT5
2) step-by-step reproduction in my arch linux using gcc 14.2.1:
cd $HOME
mkdir ./gcc_bug
cd ./gcc_bug
git clone 'https://github.com/boostorg/boost.git' .
git checkout 'boost-1.87.0'
git submodule update --init --force --recursive --jobs=8192
g++ -I $HOME/gcc_bug -c
$HOME/gcc_bug/libs/icl/test/ex_boost_party_/ex_boost_party.cpp -o /dev/null
-Weffc++ -Wmismatched-tags -Wrestrict -Wsystem-headers -Wtautological-compare
The internal_error in gcc's output is this:
/opt/compiler-explorer/gcc-15.1.0/include/c++/15.1.0/debug/debug.h:61:12:
warning: '__gnu_debug::_Safe_iterator<_Iterator, _Sequence, _Category>'
declared with a mismatched class-key 'struct' [-Wmismatched-tags]
61 | struct _Safe_iterator;
| ^~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-15.1.0/include/c++/15.1.0/debug/debug.h:61:12:
note: replace the class-key with 'class'
/opt/compiler-explorer/gcc-15.1.0/include/c++/15.1.0/bits/stl_iterator.h:2986:11:
note: '__gnu_debug::_Safe_iterator<_Iterator, _Sequence, _Category>' first
declared as 'class' here
2986 | class _Safe_iterator;
| ^~~~~~~~~~~~~~
<source>: In substitution of 'template<class Type> struct
boost::icl::map<DomainT, CodomainT, Traits, Compare, Combine, Section,
Alloc>::on_total_absorbable<Type, true, true> [with Type =
boost::icl::map<DomainT, CodomainT, Traits, Compare, Combine, Section,
Alloc>]':
<source>:13:1: required from here
13 | }
| ^
<source>:13:1: internal compiler error: Segmentation fault
0x2287465 diagnostic_context::diagnostic_impl(rich_location*,
diagnostic_metadata const*, diagnostic_option_id, char const*, __va_list_tag
(*) [1], diagnostic_t)
???:0
0x22989b6 internal_error(char const*, ...)
???:0
0x9ab902 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x9b2467 tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
???:0
0x9b2701 tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
???:0
0x9ab51b tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x99eb8f most_specialized_partial_spec(tree_node*, int, bool)
???:0
0x92aa3c class_decl_loc_t::diag_mismatched_tags(tree_node*)
???:0
0x930f63 class_decl_loc_t::diag_mismatched_tags()
???:0
0x981f15 c_parse_file()
???:0
0xa8b739 c_common_parse_file()
???:0
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.
Please note that removing either warning will make the error disappear.
I repeat, if I remove either:
-Weffc++
OR
-Wmismatched-tags
OR
-Wrestrict
OR
-Wsystem-headers
OR
-Wtautological-compare
then the bug disappears.
There can be other factors too. Se even though these reproduction steps seem
precise and exact, but maybe they could seem fragile by others. Maybe it is a
Heisenbug, I really don't know what is going on, what warning flag, code line,
or other factor is the culprit here.
I used the -freport-bug too, attached as freport-bug.txt.gz, as the text says.