RFC: Update Intel386, x86-64 and IA MCU psABIs for passing/returning empty struct
H.J. Lu via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 7 06:57:12 PST 2016
Empty struct value is passed differently in C and C++ on Intel386 and x86-64.
Different compilers use different calling conventions on the same platform:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60336
The same compiler behaves different on different platforms:
https://llvm.org/bugs/show_bug.cgi?id=26337
In some case, empty struct can't be passed in C++ at all:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60336
I am proposing to update Intel386, x86-64 and IA MCU psABIs to specify
how to pass/return empty struct:
1. "collection". A collection is a structure, union or C++ class.
2. "empty collection". An empty collection is:
a. A collection without member. Or
b. A collection with only empty collections. Or
c. An array of empty collections.
3. "empty record". An empty record is Plain Old Data (POD) for the purpose
of layout and
a. A collection without member. Or
b. A collection with only empty collections.
4. No memory slot nor register should be used to pass or return an object of
empty collection.
The proposed Intel386, x86-64 and IA MCU psABIs are at
https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
Any comments?
Thanks.
--
H.J.
More information about the cfe-commits
mailing list