@@ -50,12 +50,11 @@ public static T Run<T>(Func<T> f)
5050 [ Theory ]
5151 [ CombinatorialData ]
5252 public void OptionalParameter_01 (
53- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
54- bool useIn ,
53+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
54+ [ CombinatorialValues ( "" , "in" , "ref readonly" ) ] string refKind ,
5555 bool useExpression ,
5656 bool useCompilationReference )
5757 {
58- string refKind = useIn ? "in" : "" ;
5958 string sourceA = $$ """
6059 public static class A
6160 {
@@ -106,18 +105,27 @@ static void Main()
106105 null
107106 S
108107 """ ) ;
109- verifier . VerifyDiagnostics ( ) ;
108+ if ( useCompilationReference && refKind == "ref readonly" )
109+ {
110+ verifier . VerifyDiagnostics (
111+ // (3,52): warning CS9200: A default value is specified for 'ref readonly' parameter 't', but 'ref readonly' should be used only for references. Consider declaring the parameter as 'in'.
112+ // public static T GetValue<T>(ref readonly T t = default) => t;
113+ Diagnostic ( ErrorCode . WRN_RefReadonlyParameterDefaultValue , "default" ) . WithArguments ( "t" ) . WithLocation ( 3 , 52 ) ) ;
114+ }
115+ else
116+ {
117+ verifier . VerifyDiagnostics ( ) ;
118+ }
110119 }
111120 }
112121
113122 [ Theory ]
114123 [ CombinatorialData ]
115124 public void OptionalParameter_02 (
116- bool useIn ,
125+ [ CombinatorialValues ( "" , "in" , "ref readonly" ) ] string refKind ,
117126 bool useExpression ,
118127 bool useCompilationReference )
119128 {
120- string refKind = useIn ? "in" : "" ;
121129 string sourceA = $$ """
122130 public static class A
123131 {
@@ -148,17 +156,32 @@ static void Main()
148156 default
149157 null
150158 """ ) ;
151- verifier . VerifyDiagnostics ( ) ;
159+ if ( useCompilationReference && refKind == "ref readonly" )
160+ {
161+ verifier . VerifyDiagnostics (
162+ // (3,56): warning CS9200: A default value is specified for 'ref readonly' parameter 'i', but 'ref readonly' should be used only for references. Consider declaring the parameter as 'in'.
163+ // public static int GetIntValue(ref readonly int i = 10) => i;
164+ Diagnostic ( ErrorCode . WRN_RefReadonlyParameterDefaultValue , "10" ) . WithArguments ( "i" ) . WithLocation ( 3 , 56 ) ,
165+ // (4,65): warning CS9200: A default value is specified for 'ref readonly' parameter 's', but 'ref readonly' should be used only for references. Consider declaring the parameter as 'in'.
166+ // public static string GetStringValue(ref readonly string s = "default") => s;
167+ Diagnostic ( ErrorCode . WRN_RefReadonlyParameterDefaultValue , @"""default""" ) . WithArguments ( "s" ) . WithLocation ( 4 , 65 ) ,
168+ // (5,65): warning CS9200: A default value is specified for 'ref readonly' parameter 'o', but 'ref readonly' should be used only for references. Consider declaring the parameter as 'in'.
169+ // public static object GetObjectValue(ref readonly object o = null) => o;
170+ Diagnostic ( ErrorCode . WRN_RefReadonlyParameterDefaultValue , "null" ) . WithArguments ( "o" ) . WithLocation ( 5 , 65 ) ) ;
171+ }
172+ else
173+ {
174+ verifier . VerifyDiagnostics ( ) ;
175+ }
152176 }
153177
154178 [ Theory ]
155179 [ CombinatorialData ]
156180 public void OptionalParameter_AndParams (
157- bool useIn ,
181+ [ CombinatorialValues ( "" , "in" , "ref readonly" ) ] string refKind ,
158182 bool useExpression ,
159183 bool useCompilationReference )
160184 {
161- string refKind = useIn ? "in" : "" ;
162185 string sourceA = $$ """
163186 public static class A
164187 {
@@ -188,13 +211,48 @@ static void Main()
188211 0
189212 3
190213 """ ) ;
191- verifier . VerifyDiagnostics ( ) ;
214+ if ( refKind == "ref readonly" )
215+ {
216+ if ( useCompilationReference )
217+ {
218+ verifier . VerifyDiagnostics (
219+ // (3,70): warning CS9200: A default value is specified for 'ref readonly' parameter 'y', but 'ref readonly' should be used only for references. Consider declaring the parameter as 'in'.
220+ // public static T GetValue<T>(ref readonly T x, ref readonly T y = default, params T[] args) => y;
221+ Diagnostic ( ErrorCode . WRN_RefReadonlyParameterDefaultValue , "default" ) . WithArguments ( "y" ) . WithLocation ( 3 , 70 ) ,
222+ // (8,44): warning CS9193: Argument 1 should be a variable because it is passed to a 'ref readonly' parameter
223+ // Utils.Report(() => A.GetValue<int>(1));
224+ Diagnostic ( ErrorCode . WRN_RefReadonlyNotVariable , "1" ) . WithArguments ( "1" ) . WithLocation ( 8 , 44 ) ,
225+ // (9,44): warning CS9193: Argument 1 should be a variable because it is passed to a 'ref readonly' parameter
226+ // Utils.Report(() => A.GetValue<int>(2, 3, 4));
227+ Diagnostic ( ErrorCode . WRN_RefReadonlyNotVariable , "2" ) . WithArguments ( "1" ) . WithLocation ( 9 , 44 ) ,
228+ // (9,47): warning CS9193: Argument 2 should be a variable because it is passed to a 'ref readonly' parameter
229+ // Utils.Report(() => A.GetValue<int>(2, 3, 4));
230+ Diagnostic ( ErrorCode . WRN_RefReadonlyNotVariable , "3" ) . WithArguments ( "2" ) . WithLocation ( 9 , 47 ) ) ;
231+ }
232+ else
233+ {
234+ verifier . VerifyDiagnostics (
235+ // (8,44): warning CS9193: Argument 1 should be a variable because it is passed to a 'ref readonly' parameter
236+ // Utils.Report(() => A.GetValue<int>(1));
237+ Diagnostic ( ErrorCode . WRN_RefReadonlyNotVariable , "1" ) . WithArguments ( "1" ) . WithLocation ( 8 , 44 ) ,
238+ // (9,44): warning CS9193: Argument 1 should be a variable because it is passed to a 'ref readonly' parameter
239+ // Utils.Report(() => A.GetValue<int>(2, 3, 4));
240+ Diagnostic ( ErrorCode . WRN_RefReadonlyNotVariable , "2" ) . WithArguments ( "1" ) . WithLocation ( 9 , 44 ) ,
241+ // (9,47): warning CS9193: Argument 2 should be a variable because it is passed to a 'ref readonly' parameter
242+ // Utils.Report(() => A.GetValue<int>(2, 3, 4));
243+ Diagnostic ( ErrorCode . WRN_RefReadonlyNotVariable , "3" ) . WithArguments ( "2" ) . WithLocation ( 9 , 47 ) ) ;
244+ }
245+ }
246+ else
247+ {
248+ verifier . VerifyDiagnostics ( ) ;
249+ }
192250 }
193251
194252 [ Theory ]
195253 [ CombinatorialData ]
196254 public void OptionalParameter_Constructor (
197- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
255+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
198256 bool useExpression )
199257 {
200258 string sourceA = $$ """
@@ -249,7 +307,7 @@ static void Main()
249307 [ Theory ]
250308 [ CombinatorialData ]
251309 public void OptionalParameter_Indexer (
252- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
310+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
253311 bool useExpression )
254312 {
255313 string sourceA = $$ """
@@ -299,7 +357,7 @@ static void Main()
299357 [ Theory ]
300358 [ CombinatorialData ]
301359 public void OptionalParameter_Delegate (
302- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
360+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
303361 bool useExpression )
304362 {
305363 string sourceA = $$ """
@@ -347,7 +405,7 @@ static void Main()
347405 [ Theory ]
348406 [ CombinatorialData ]
349407 public void OptionalParameter_CollectionInitializer (
350- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
408+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
351409 bool useExpression ,
352410 bool useIn )
353411 {
@@ -411,7 +469,7 @@ static void Main()
411469 [ Theory ]
412470 [ CombinatorialData ]
413471 public void OptionalParameter_LocalFunction (
414- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion )
472+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion )
415473 {
416474 string source = """
417475 using System;
@@ -661,7 +719,7 @@ static void Main()
661719 [ Theory ]
662720 [ CombinatorialData ]
663721 public void NamedArgument_01 (
664- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
722+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
665723 bool useExpression ,
666724 bool useCompilationReference )
667725 {
@@ -780,7 +838,7 @@ static void Main()
780838 [ Theory ]
781839 [ CombinatorialData ]
782840 public void NamedArgument_02 (
783- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
841+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
784842 bool useExpression ,
785843 bool useCompilationReference )
786844 {
@@ -941,7 +999,7 @@ static void Main()
941999 [ Theory ]
9421000 [ CombinatorialData ]
9431001 public void NamedArgument_03 (
944- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
1002+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
9451003 bool useExpression ,
9461004 bool useCompilationReference )
9471005 {
@@ -1083,7 +1141,7 @@ static void Main()
10831141 [ Theory ]
10841142 [ CombinatorialData ]
10851143 public void NamedArgument_04 (
1086- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
1144+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
10871145 bool useExpression ,
10881146 bool useCompilationReference )
10891147 {
@@ -1312,7 +1370,7 @@ static void Main()
13121370 [ Theory ]
13131371 [ CombinatorialData ]
13141372 public void NamedArgument_OverloadsDifferentOrder (
1315- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
1373+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
13161374 bool useExpression ,
13171375 bool useCompilationReference )
13181376 {
@@ -1485,7 +1543,7 @@ static void Main()
14851543 [ Theory ]
14861544 [ CombinatorialData ]
14871545 public void NamedArgument_Constructor (
1488- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
1546+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
14891547 bool useExpression )
14901548 {
14911549 string sourceA = $$ """
@@ -1587,7 +1645,7 @@ static void Main()
15871645 [ Theory ]
15881646 [ CombinatorialData ]
15891647 public void NamedArgument_Indexer (
1590- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
1648+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
15911649 bool useExpression )
15921650 {
15931651 string sourceA = $$ """
@@ -1695,7 +1753,7 @@ static void Main()
16951753 [ Theory ]
16961754 [ CombinatorialData ]
16971755 public void NamedArgument_Delegate (
1698- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
1756+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion ,
16991757 bool useExpression )
17001758 {
17011759 string sourceA = $$ """
@@ -1791,7 +1849,7 @@ static void Main()
17911849 [ Theory ]
17921850 [ CombinatorialData ]
17931851 public void NamedArgument_LocalFunction (
1794- [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion )
1852+ [ CombinatorialValues ( LanguageVersion . CSharp13 , LanguageVersion . Preview , LanguageVersionFacts . CSharpNext ) ] LanguageVersion languageVersion )
17951853 {
17961854 string source = """
17971855 using System;
0 commit comments