Skip to content

Commit 6feed58

Browse files
authored
Disallow initializers for extern events (#40114)
1 parent b1ab981 commit 6feed58

19 files changed

+109
-0
lines changed

docs/compilers/CSharp/Compiler Breaking Changes - post VS2019.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,11 @@ could be different than the one that compiler used to find.
7878
```
7979

8080
11. Previously, the language version was not checked for `this ref` and `this in` orderings of parameter modifiers. In *Visual Studio 2019 version 16.4* these orderings produce an error with langversion below 7.2. See https://github.com/dotnet/roslyn/issues/38486
81+
82+
12. https://github.com/dotnet/roslyn/issues/40092 Previously, the compiler allowed `extern event` declarations to have initializers, in violation of the C# language specification. In *Visual Studio 2019 version 16.5* such declarations produce compile errors.
83+
```C#
84+
class C
85+
{
86+
extern event System.Action E = null; // error
87+
}
88+
```

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

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

src/Compilers/CSharp/Portable/CSharpResources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5924,4 +5924,7 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
59245924
<data name="ERR_VarianceInterfaceNesting" xml:space="preserve">
59255925
<value>Enums, classes, and structures cannot be declared in an interface that has an 'in' or 'out' type parameter.</value>
59265926
</data>
5927+
<data name="ERR_ExternEventInitializer" xml:space="preserve">
5928+
<value>'{0}': extern event cannot have initializer</value>
5929+
</data>
59275930
</root>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,6 +1737,8 @@ internal enum ErrorCode
17371737

17381738
ERR_InternalError = 8751,
17391739

1740+
ERR_ExternEventInitializer = 8760,
1741+
17401742
// Note: you will need to re-generate compiler code after adding warnings (eng\generate-compiler-code.cmd)
17411743
}
17421744
}

src/Compilers/CSharp/Portable/Symbols/Source/SourceFieldLikeEventSymbol.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ internal SourceFieldLikeEventSymbol(SourceMemberContainerTypeSymbol containingTy
6868
{
6969
diagnostics.Add(ErrorCode.ERR_AbstractEventInitializer, this.Locations[0], this);
7070
}
71+
else if (this.IsExtern)
72+
{
73+
diagnostics.Add(ErrorCode.ERR_ExternEventInitializer, this.Locations[0], this);
74+
}
7175
}
7276

7377
// NOTE: if there's an initializer in source, we'd better create a backing field, regardless of

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@
177177
<target state="translated">Strom výrazů nesmí obsahovat operátor řazené kolekce členů == nebo !=.</target>
178178
<note />
179179
</trans-unit>
180+
<trans-unit id="ERR_ExternEventInitializer">
181+
<source>'{0}': extern event cannot have initializer</source>
182+
<target state="new">'{0}': extern event cannot have initializer</target>
183+
<note />
184+
</trans-unit>
180185
<trans-unit id="ERR_FeatureInPreview">
181186
<source>The feature '{0}' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.</source>
182187
<target state="translated">Funkce {0} je aktuálně ve verzi Preview a je *nepodporovaná*. Pokud chcete používat funkce Preview, použijte jazykovou verzi preview.</target>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@
177177
<target state="translated">Eine Ausdrucksbaumstruktur darf keinen ==- oder !=-Tupeloperator enthalten.</target>
178178
<note />
179179
</trans-unit>
180+
<trans-unit id="ERR_ExternEventInitializer">
181+
<source>'{0}': extern event cannot have initializer</source>
182+
<target state="new">'{0}': extern event cannot have initializer</target>
183+
<note />
184+
</trans-unit>
180185
<trans-unit id="ERR_FeatureInPreview">
181186
<source>The feature '{0}' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.</source>
182187
<target state="translated">Das Feature "{0}" befindet sich zurzeit in der Vorschau und wird *nicht unterstützt*. Um Previewfunktionen zu nutzen, verwenden Sie die Sprachversion "Preview".</target>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@
177177
<target state="translated">Un árbol de expresión no puede contener un operador de tupla == o !=.</target>
178178
<note />
179179
</trans-unit>
180+
<trans-unit id="ERR_ExternEventInitializer">
181+
<source>'{0}': extern event cannot have initializer</source>
182+
<target state="new">'{0}': extern event cannot have initializer</target>
183+
<note />
184+
</trans-unit>
180185
<trans-unit id="ERR_FeatureInPreview">
181186
<source>The feature '{0}' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.</source>
182187
<target state="translated">La característica "{0}" se encuentra actualmente en vista previa y *no se admite*. Para usar características en vista previa, utilice la versión de idioma "vista previa".</target>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@
177177
<target state="translated">Une arborescence de l'expression ne peut pas contenir un opérateur de tuple == ou !=</target>
178178
<note />
179179
</trans-unit>
180+
<trans-unit id="ERR_ExternEventInitializer">
181+
<source>'{0}': extern event cannot have initializer</source>
182+
<target state="new">'{0}': extern event cannot have initializer</target>
183+
<note />
184+
</trans-unit>
180185
<trans-unit id="ERR_FeatureInPreview">
181186
<source>The feature '{0}' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.</source>
182187
<target state="translated">La fonctionnalité '{0}' est actuellement en préversion et *n'est pas prise en charge*. Pour utiliser les fonctionnalités en préversion, utilisez la version de langage 'preview'.</target>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@
177177
<target state="translated">Un albero delle espressioni non può contenere un operatore == o != di tupla</target>
178178
<note />
179179
</trans-unit>
180+
<trans-unit id="ERR_ExternEventInitializer">
181+
<source>'{0}': extern event cannot have initializer</source>
182+
<target state="new">'{0}': extern event cannot have initializer</target>
183+
<note />
184+
</trans-unit>
180185
<trans-unit id="ERR_FeatureInPreview">
181186
<source>The feature '{0}' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.</source>
182187
<target state="translated">La funzionalità '{0}' è attualmente disponibile in anteprima e *non è supportata*. Per usare funzionalità in anteprima, scegliere la versione del linguaggio 'preview'.</target>

0 commit comments

Comments
 (0)