https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71712
Bug ID: 71712 Summary: Redundant ABI tags for conversion operator Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dmitry.polukhin at gmail dot com Target Milestone: --- Reproducer: struct __attribute__((abi_tag("A", "B"))) A { }; struct A18 { operator A() { return A(); } }; void f18_test() { A a = A18(); } Mangling for 'A18::operator A' is '_ZN3A18cv1AB1AB1BB1AB1Bev' pretty printed as ' A18::operator A[abi:A][abi:B][abi:A][abi:B]()' i.e. the same tags mentioned twice for the name. It seems that GCC adds implicit tags from the return type of the function but in all other cases they are added only if the tags are missing otherwise in the mangled name that is not the case in given example.