Skip to content

Commit 935befe

Browse files
authored
Allow ref enumerators in async/iterator methods (#74800)
* Allow ref enumerators in async/iterator methods * Report langversion errors * Remove the error message resource
1 parent b19ecd7 commit 935befe

20 files changed

+307
-162
lines changed

src/Compilers/CSharp/Portable/Binder/ForEachLoopBinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ private BoundForEachStatement BindForEachPartsWorker(BindingDiagnosticBag diagno
527527

528528
if (builder.InlineArraySpanType == WellKnownType.Unknown && getEnumeratorType.IsRestrictedType() && (IsDirectlyInIterator || IsInAsyncMethod()))
529529
{
530-
diagnostics.Add(ErrorCode.ERR_BadSpecialByRefIterator, foreachKeyword.GetLocation(), getEnumeratorType);
530+
CheckFeatureAvailability(foreachKeyword, MessageID.IDS_FeatureRefUnsafeInIteratorAsync, diagnostics);
531531
}
532532

533533
diagnostics.Add(_syntax.ForEachKeyword, useSiteInfo);

src/Compilers/CSharp/Portable/CSharpResources.resx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3845,9 +3845,6 @@ Give the compiler some way to differentiate the methods. For example, you can gi
38453845
<data name="ERR_BadAsyncLacksBody" xml:space="preserve">
38463846
<value>The 'async' modifier can only be used in methods that have a body.</value>
38473847
</data>
3848-
<data name="ERR_BadSpecialByRefIterator" xml:space="preserve">
3849-
<value>foreach statement cannot operate on enumerators of type '{0}' in async or iterator methods because '{0}' is a ref struct or a type parameter that allows ref struct.</value>
3850-
</data>
38513848
<data name="ERR_BadSpecialByRefParameter" xml:space="preserve">
38523849
<value>Parameters of type '{0}' cannot be declared in async methods or async lambda expressions.</value>
38533850
</data>

src/Compilers/CSharp/Portable/Errors/ErrorCode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1529,7 +1529,7 @@ internal enum ErrorCode
15291529
ERR_AutoPropsInRoStruct = 8341,
15301530
ERR_FieldlikeEventsInRoStruct = 8342,
15311531
// ERR_RefStructInterfaceImpl = 8343,
1532-
ERR_BadSpecialByRefIterator = 8344,
1532+
// ERR_BadSpecialByRefIterator = 8344,
15331533
ERR_FieldAutoPropCantBeByRefLike = 8345,
15341534
ERR_StackAllocConversionNotPossible = 8346,
15351535

src/Compilers/CSharp/Portable/Errors/ErrorFacts.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1837,7 +1837,6 @@ or ErrorCode.ERR_InExtensionMustBeValueType
18371837
or ErrorCode.ERR_FieldsInRoStruct
18381838
or ErrorCode.ERR_AutoPropsInRoStruct
18391839
or ErrorCode.ERR_FieldlikeEventsInRoStruct
1840-
or ErrorCode.ERR_BadSpecialByRefIterator
18411840
or ErrorCode.ERR_FieldAutoPropCantBeByRefLike
18421841
or ErrorCode.ERR_StackAllocConversionNotPossible
18431842
or ErrorCode.ERR_EscapeCall

src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)