This issue was noticed during a bulk check for duplicate, conflicting type definitions in XML. $ <tests/data/test-read-dwarf/PR22122-libftdc.so.abi egrep 'type-id-263|type-id-407|type-id-233' <typedef-decl name='is_not_reference_tag' type-id='type-id-233' filepath='src/third_party/boost-1.60.0/boost/optional/optional.hpp' line='219' column='1' id='type-id-234'/> <typedef-decl name='false_' type-id='type-id-263' filepath='src/third_party/boost-1.60.0/boost/mpl/bool_fwd.hpp' line='25' column='1' id='type-id-233'/> <class-decl name='__anonymous_struct__' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-233' visibility='default' is-declaration-only='yes' id='type-id-263'/> <typedef-decl name='true_' type-id='type-id-263' filepath='src/third_party/boost-1.60.0/boost/mpl/bool_fwd.hpp' line='24' column='1' id='type-id-407'/> <class-decl name='__anonymous_struct__' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-407' visibility='default' is-declaration-only='yes' id='type-id-263'/> <class-decl name='__anonymous_struct__1' is-struct='yes' is-anonymous='yes' visibility='default' is-declaration-only='yes' id='type-id-263'/> This seems to say: 234 is typedef 233 is_not_reference_tag 233 is typedef 263 false_ 263 is a struct named by 233 407 is typedef 263 true_ 263 is *also* a struct named by 407 263 is a struct The Boost header in question contains: template< bool C_ > struct bool_; typedef bool_<true> true_; typedef bool_<false> false_;
This is probably explained by https://sourceware.org/bugzilla/show_bug.cgi?id=26591#c11.