[cxx-abi-dev] Mangling of calling convention attributes
Jason Merrill
jason at redhat.com
Tue May 5 22:00:23 UTC 2015
ia32 targets support a variety of calling conventions, which correspond
to various attributes (cdecl, stdcall, regparm, etc.). Currently these
are not represented in mangling, which leads to problems with template
instantiation; I'm thinking about starting to treat them as vendor
qualifiers, so given
extern "C" void abort();
template <typename F, typename T>
void IndirectExternCall(F f, T t1, T t2) {
typedef F (*WrapF)(F);
f (t1, t2);
}
__attribute__((regparm(3), stdcall))
void regparm_func (int i, int j)
{
if (i != 24 || j != 42)
abort();
}
void normal_func (int i, int j)
{
if (i != 24 || j != 42)
abort();
}
int main()
{
IndirectExternCall (regparm_func, 24, 42);
IndirectExternCall (normal_func, 24, 42);
}
the two instantiations of IndirectExternCall would be mangled
differently. Currently my prototype mangles stdcall as U7stdcall and
regparm(3) as U11regparmLi3E, i.e. mangling the attribute argument like
a template argument.
Any thoughts?
Jason
More information about the cxx-abi-dev
mailing list