http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61082
--- Comment #5 from David Greene <greened at obbligato dot org> --- (In reply to Jonathan Wakely from comment #4) > Clang uses the same registers as GCC: Ok, but that still doesn't explain why. Can you point me to wording in either the x86-64 ABI or Itanium ABI that describes this behavior? I have looked for days and can't find anything that suggests this is correct code. Everything I've read points to (RAX, RDX) being the correct return value location. The fact that the Intel compiler disagrees with gcc and clang at least means there is some disagreement on this. This is an interoperability issue and it would be good to get clarity on this so people know what to expect. If gcc and clang are correct that's fine but I would like to know why. Because either gcc and clang have to be fixed or the Intel compiler has to be fixed.