-
-
Notifications
You must be signed in to change notification settings - Fork 609
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix 15984 - [REG2.071] Interface contracts retrieve garbage instead of parameters #9782
Conversation
3b22862 to
28331c6
Compare
4826af9 to
ae983e5
Compare
ae983e5 to
ba6e2fc
Compare
|
Thanks for your pull request and interest in making D better, @SSoulaimane! We are looking forward to reviewing it, and you should be hearing from a maintainer soon.
Please see CONTRIBUTING.md for more information. If you have addressed all reviews or aren't sure how to proceed, don't hesitate to ping us with a simple comment. Bugzilla references
Testing this PR locallyIf you don't have a local development environment setup, you can use Digger to test this PR: dub fetch digger
dub run digger -- build "stable + dmd#9782" |
ba6e2fc to
3de0f0a
Compare
|
3de0f0a to
b865171
Compare
|
Also please target stable as this is a very critical bug fix for Funkwerk AG. |
Rebased. Now it's gone.
Ok. |
|
Also Also if this is an ABI change it should have a changelog entry stating that. Can be added later. |
Yes, it is an ABI change. |
|
We don't require changelog entries for ABI changes, but as this is very important bug fix it wouldn't hurt at all and just help to increase the visibility and awareness of its fix. |
b865171 to
4b47a3c
Compare
4b47a3c to
be4013b
Compare
|
That too. |
12c5b7a to
ee18863
Compare
[stable] Remove unused leftover after #9782 merged-on-behalf-of: Jacob Carlborg <jacob-carlborg@users.noreply.github.com>
I don't think that was the right decision. It's a pretty big change in general, and ABI changes in a patch release are highly questionable IMO. The bug has been old, and a company welcoming a fix isn't a valid argument IMO. Anyway, this caused unexpected trouble for LDC. One test also fails for DMD stable, so that's a regression from 2.086.0: alias Bar = extern (C) void function(void*);
final class C
{
void foo(Bar bar)
in { assert(bar); }
do {}
}I guess it's a |
Fix interface contracts regression recently introuced in #9782 merged-on-behalf-of: Nicholas Wilson <thewilsonator@users.noreply.github.com>
|
You forgot to clean-up the backend. With this, all the horrible special casing of require/ensure becomes unnecessary as there is no special frame needed anymore to get to parameters that were originally outside the contract context. |
|
Yes it's still there. |
Copied from LDC func.d with slight modifications.
Essentially the parameters are passed explicitly to the contract functions. The major modification that I made from LDC is that I pass all the parameters by ref.