`in` parameters made useful

Mathias LANG geod24 at gmail.com
Tue Aug 4 23:41:27 UTC 2020

On Tuesday, 4 August 2020 at 23:18:56 UTC, tsbockman wrote:
> This optimization should be implemented by querying the 
> backend, not calculated from scratch in the frontend, which is 
> redundant and error-prone; the rules in the current PR are not 
> accurate.

Indeed. The current rules were put there as a way to get the ball 
rolling, so to say. My current focus is to get things to compile 
and pass test on Buildkite, then optimize the rules.
The thing that is not going to change is that types that needs 
elaborate copy or destruction, and types that are not copyable, 
will be passed by ref. Additionally, I want to keep covariance 
for array types, which requires them to be passed by value 
(although it can be done in registers). The rest, I don't mind 
changing it.

> The correct rules are complex, platform-dependent, and depend 
> on the types of each function's full parameter list as a whole, 
> not just each parameter individually. I haven't found anywhere 
> that documents them, but by experimentation with LDC I have 
> discovered the following:
> [...]

Thanks for the feedback. I'll definitely incorporate it (and 
Rainer's) into the PR soon-ish, most likely via a call to a 
backend hook, as is currently done for NRVO.

More information about the Digitalmars-d mailing list