diff --git a/src/Analyzers/CSharp/Analyzers/MakeStructMemberReadOnly/CSharpMakeStructMemberReadOnlyAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/MakeStructMemberReadOnly/CSharpMakeStructMemberReadOnlyAnalyzer.cs index e48b7cb79de8..f0c45c29dedb 100644 --- a/src/Analyzers/CSharp/Analyzers/MakeStructMemberReadOnly/CSharpMakeStructMemberReadOnlyAnalyzer.cs +++ b/src/Analyzers/CSharp/Analyzers/MakeStructMemberReadOnly/CSharpMakeStructMemberReadOnlyAnalyzer.cs @@ -14,7 +14,6 @@ using Microsoft.CodeAnalysis.Operations; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Shared.Extensions; -using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.CSharp.MakeStructMemberReadOnly; @@ -331,6 +330,10 @@ private static bool OperationPotentiallyMutatesThis( if (operation is IInlineArrayAccessOperation) { + // to determine if this is safe to make into a ReadOnlySpan or not. + if (operation.Type.IsSpan()) + return true; + // If we're writing into an inline-array off of 'this'. Then we can't make this `readonly`. if (CSharpSemanticFacts.Instance.IsWrittenTo(semanticModel, operation.Syntax, cancellationToken)) return true; diff --git a/src/Analyzers/CSharp/Tests/MakeStructMemberReadOnly/MakeStructMemberReadOnlyTests.cs b/src/Analyzers/CSharp/Tests/MakeStructMemberReadOnly/MakeStructMemberReadOnlyTests.cs index f7d6ffbbf5e9..a02aa51c05e8 100644 --- a/src/Analyzers/CSharp/Tests/MakeStructMemberReadOnly/MakeStructMemberReadOnlyTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeStructMemberReadOnly/MakeStructMemberReadOnlyTests.cs @@ -2345,4 +2345,33 @@ public int Z LanguageVersion = LanguageVersion.CSharp12, ReferenceAssemblies = ReferenceAssemblies.Net.Net80, }.RunAsync(); + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/79384")] + public Task TestSpanFromInlineArray() + => new VerifyCS.Test + { + TestCode = """ + using System.Runtime.CompilerServices; + + public struct Example + { + private Buffer _buffer; + + public void Set(int index, int value) + { + var bufferSpan = _buffer[..0]; + + bufferSpan[0] = value; + } + } + + [InlineArray(1)] + public struct Buffer + { + private int _element0; + } + """, + LanguageVersion = LanguageVersion.CSharp13, + ReferenceAssemblies = ReferenceAssemblies.Net.Net90, + }.RunAsync(); }