Weird DMD codegen issue

user1234 user1234 at 12.de
Thu Nov 4 17:37:57 UTC 2021


On Thursday, 4 November 2021 at 16:32:54 UTC, Stanislav Blinov 
wrote:
> So I have a function:
>
> ```d
> auto foo(C, K)(Strukt1* s, Strukt2 a, uint b, scope C c, scope 
> K k, out Strukt3 r)
> { /* ... */ }
> ```
>
> Where return type is `Strukt4`. dmd borks the first argument on 
> call (at least on Linux). Workarounds so far I found:
>
> 1) adding `extern(C)`
> 2) reducing number of parameters - five is fine, as soon as I 
> add the sixth or more - it breaks (but not with `extern(C)`).
>
> Problem is, I tried reproducing it outside of codebase, with no 
> success :( Does that sound familiar to anyone? Maybe there's 
> already a report about this on bugzilla? Any pointers on 
> tracking this down?

As you cannot reduce I suggest to try with every .0 DMD version, 
degressively, to see if it's a regression.

Is it only with -O and are the structure very small? that could 
be a SROA problem then.

Otherwise I have a specific PR in mind, that is [the big 
backend](https://github.com/dlang/dmd/pull/10200) one that fixed 
system V ABI. If it's the culprit, manually checking with 
different DMD version will be useful (unless it did work 
previously either)


More information about the Digitalmars-d mailing list