-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
Adding new field kind should be considered breaking change #112033
Comments
Yes, anywhere adding a new field to a struct could impact how Roslyn handles that type should be breaking. There's also the issue of tearing, where adding an additional field to a one primitive/reference field struct could introduce the possibility of tearing, but we generally haven't documented that as breaking (though we also rarely do it). |
I am not sure whether this is accurate. Should objrefs and byrefs be treated as the same kind? Adding an objref field to a ref struct with a ref field should be fine. Also, adding a byref field to a ref struct with an objref field should be fine too. |
From the perspective of the newly added layout support that started this conversation, yes, they have the same impact.
Roslyn isn't the issue in this specific case, although I do agree that impacting Roslyn should be a breaking change. The question that started the current conversation is only currently detected at run-time and would result in a Motivating example: ref struct FxType
{
public int F;
}
[StructLayout(LayoutKind.Explicit)]
ref struct UserType
{
public int F1;
[FieldOffset(4)]
public FxType F2;
} In the next release of .NET, the ref struct FxType
{
public int F;
public ref int RF; // Could also be an objref instead of byref.
} |
Then definitely yes :) |
In #111584, the alignment of
ref struct
types was relaxed if the type didn't contained object or byref fields. The previous behavior was that aref struct
was always pointer aligned. This change resulted in the following question:_Originally posted by @MichalStrehovsky in #111584 (review)
Initially this was accepted but then reverted due to pushback about the layout of types was an implementation details unless specifically documented.
Originally posted by @jkotas in #111584 (comment)
The question now goes to the Libraries team, @stephentoub, and perhaps the .NET API review team, @bartonjs, to help us decide if adding a new kind of field (that is, objref, byref or generic type argument), to an existing value type should be considered a change that should result in a breaking change announcement.
The text was updated successfully, but these errors were encountered: