No ReadOnlySpan<byte> static data optimization for new byte[N]
#33.088 geöffnet am 04.02.2019
Repository-Metriken
- Stars
- (20.414 Sterne)
- PR-Merge-Metriken
- (Durchschn. Merge 6T 17h) (256 gemergte PRs in 30 T)
Beschreibung
Version Used: dotnet 2.2.200-preview-009748
Steps to Reproduce:
Declare a static ReadOnlySpan<byte> property of the form:
public class C
{
public static ReadOnlySpan<byte> StaticData => new byte[] { 0 };
public static ReadOnlySpan<byte> DoesntWork => new byte[1];
}
Expected Behavior:
Per the optimisation in #24621, I expected that both StaticData and DoesntWork would be compiled to a reference to static data, e.g., new ReadOnlySpan<byte>(&global::<PrivateImplementationDetails>.5BA93C9DB0CFF93F52B521D7420E43F6EDA2784F, 1);
Actual Behavior:
Only StaticData has the implementation optimisation; DoesntWork doesn't, even though it has the exact same data. The problem is more noticeable with an expression like new byte[1000], where you might not want to type out 1000 literal zero bytes in source code.