On Thu, Oct 25, 2007 at 08:44:26AM -0700, Joe Buck wrote: > One of the purposes of the C++ ABI is to allow different compilers to > interoperate. The freedom you describe would prevent gcc-compiled > code from behaving correctly with icc-compiled code, for example. > So yes, argument passing conventions are part of the ABI.
You're using the term "ABI" too broadly - more than one applies. The C++ ABI only covers C++ specific additions on top of existing platform-specific ABIs. It's not a question of freedom. In any case, it seems that I was wrong. Non-PODs still get passed in registers if the layout-equivalent POD would, unless there is a non-trivial copy constructor or destructor; there are non-PODs without those. Sorry for the confusion. -- Daniel Jacobowitz CodeSourcery