https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84147
Bug ID: 84147
Summary: RTTI for base class in anonymous namespace could be
avoided
Product: gcc
Version: 8.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: antoshkka at gmail dot com
Target Milestone: ---
Consider the example
namespace {
struct base {
virtual int foo() noexcept {return 1;}
};
}
struct derived1 final : base {};
struct derived2 final : base {};
struct pair {
derived1 d1;
derived2 d2;
};
pair test() {
return {};
}
`base` is in the anonymous namespace (has internal linkage) and used only for
providing some functions to derived classes. There are no complex inheritances,
there are no dynamic_casts and typeid(base) calls.
RTTI for base class seems useless in that case, but it is still generated in
the assembly:
.type typeinfo for (anonymous namespace)::base, @object
.size typeinfo for (anonymous namespace)::base, 16
typeinfo for (anonymous namespace)::base:
.quad vtable for __cxxabiv1::__class_type_info+16
.quad typeinfo name for (anonymous namespace)::base
.align 16
.type typeinfo name for (anonymous namespace)::base, @object
.size typeinfo name for (anonymous namespace)::base, 23
typeinfo name for (anonymous namespace)::base:
.string "*N12_GLOBAL__N_14baseE"