From 2bed3a2324034b362a4ecb1b33a75cbbfea0e21b Mon Sep 17 00:00:00 2001 From: AlekseyTs Date: Wed, 1 Sep 2021 14:50:51 -0700 Subject: [PATCH 1/2] Disallow converting a lambda with attributes to an expression tree. Closes #53910. --- .../CSharp/Portable/CSharpResources.resx | 3 + .../CSharp/Portable/Errors/ErrorCode.cs | 1 + .../DiagnosticsPass_ExpressionTrees.cs | 14 ++ .../Portable/xlf/CSharpResources.cs.xlf | 5 + .../Portable/xlf/CSharpResources.de.xlf | 5 + .../Portable/xlf/CSharpResources.es.xlf | 5 + .../Portable/xlf/CSharpResources.fr.xlf | 5 + .../Portable/xlf/CSharpResources.it.xlf | 5 + .../Portable/xlf/CSharpResources.ja.xlf | 5 + .../Portable/xlf/CSharpResources.ko.xlf | 5 + .../Portable/xlf/CSharpResources.pl.xlf | 5 + .../Portable/xlf/CSharpResources.pt-BR.xlf | 5 + .../Portable/xlf/CSharpResources.ru.xlf | 5 + .../Portable/xlf/CSharpResources.tr.xlf | 5 + .../Portable/xlf/CSharpResources.zh-Hans.xlf | 5 + .../Portable/xlf/CSharpResources.zh-Hant.xlf | 5 + .../Test/Semantic/Semantics/LambdaTests.cs | 213 ++++++++++++++++++ 17 files changed, 296 insertions(+) diff --git a/src/Compilers/CSharp/Portable/CSharpResources.resx b/src/Compilers/CSharp/Portable/CSharpResources.resx index d60fd67c6f6e3..3a29c639d314a 100644 --- a/src/Compilers/CSharp/Portable/CSharpResources.resx +++ b/src/Compilers/CSharp/Portable/CSharpResources.resx @@ -6857,4 +6857,7 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ InterpolatedStringHandlerArgument has no effect when applied to lambda parameters and will be ignored at the call site. + + A lambda expression with attributes cannot be converted to an expression tree + diff --git a/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs b/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs index 4b3302f2d03c2..8bd7a092336be 100644 --- a/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs +++ b/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs @@ -1995,6 +1995,7 @@ internal enum ErrorCode // WRN_AttrDependentTypeNotAllowed = 8969, // Backed out of of warning wave 6, may be reintroduced later ERR_AttrDependentTypeNotAllowed = 8970, WRN_InterpolatedStringHandlerArgumentAttributeIgnoredOnLambdaParameters = 8971, + ERR_LambdaWithAttributesToExpressionTree = 8972, #endregion diff --git a/src/Compilers/CSharp/Portable/Lowering/DiagnosticsPass_ExpressionTrees.cs b/src/Compilers/CSharp/Portable/Lowering/DiagnosticsPass_ExpressionTrees.cs index 28c3aee2fa628..4f5dae840a0c4 100644 --- a/src/Compilers/CSharp/Portable/Lowering/DiagnosticsPass_ExpressionTrees.cs +++ b/src/Compilers/CSharp/Portable/Lowering/DiagnosticsPass_ExpressionTrees.cs @@ -517,6 +517,14 @@ public override BoundNode VisitLambda(BoundLambda node) if (_inExpressionLambda) { var lambda = node.Symbol; + bool reportedAttributes = false; + + if (!lambda.GetAttributes().IsEmpty || !lambda.GetReturnTypeAttributes().IsEmpty) + { + Error(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, node); + reportedAttributes = true; + } + foreach (var p in lambda.Parameters) { if (p.RefKind != RefKind.None && p.Locations.Length != 0) @@ -527,6 +535,12 @@ public override BoundNode VisitLambda(BoundLambda node) { _diagnostics.Add(ErrorCode.ERR_ExpressionTreeCantContainRefStruct, p.Locations[0], p.Type.Name); } + + if (!reportedAttributes && !p.GetAttributes().IsEmpty) + { + _diagnostics.Add(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, p.Locations[0]); + reportedAttributes = true; + } } switch (node.Syntax.Kind()) diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf index 86a3542ed816d..62621c35981c6 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf @@ -747,6 +747,11 @@ Metoda {0} s blokem iterátoru musí být asynchronní, aby vrátila {1}. + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf index e058334a91adc..8ac9b80f5a419 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf @@ -747,6 +747,11 @@ Die Methode "{0}" mit einem Iteratorblock muss "async" lauten, um "{1}" zurückzugeben. + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf index 2fb17e75881f4..6997d732e38b1 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf @@ -747,6 +747,11 @@ El método "{0}" con un bloqueo de iterador debe ser "asincrónico" para devolver "{1}" + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf index 671b66d581bba..763cb30922adf 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf @@ -747,6 +747,11 @@ La méthode '{0}' avec un bloc itérateur doit être 'async' pour retourner '{1}' + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf index 540074b013919..8d9ac38b5fee6 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf @@ -747,6 +747,11 @@ Il metodo '{0}' con un blocco iteratore deve essere 'async' per restituire '{1}' + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf index f24fbf388fc4d..62be3ce3e759b 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf @@ -747,6 +747,11 @@ 反復子ブロックを伴うメソッド '{0}' が '{1}' を返すには 'async' でなければなりません + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf index 07eb44f64b444..5ee5afe82c4f6 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf @@ -747,6 +747,11 @@ '{1}'을(를) 반환하려면 반복기 블록이 있는 '{0}' 메서드가 '비동기'여야 합니다. + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf index dee38820b0811..95a5326dc2140 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf @@ -747,6 +747,11 @@ Metoda „{0}” z blokiem iteratora musi być oznaczona jako „async”, aby zwrócić „{1}” + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf index bb4293a61589f..a38e72c62fdde 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf @@ -747,6 +747,11 @@ O método '{0}' com um bloco do iterador deve ser 'async' para retornar '{1}' + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf index 17fa6af660f9b..ade4a67d82dd7 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf @@ -747,6 +747,11 @@ Чтобы возвращать "{1}", метод "{0}" с блоком итератора должен быть асинхронным ("async"). + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf index 615bbb10c51d0..dee46f104703d 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf @@ -747,6 +747,11 @@ Yineleyici bloku olan '{0}' yönteminin '{1}' döndürmek için 'zaman uyumsuz' olması gerekir + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf index 455521b8b095c..89b4cfb75a1af 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf @@ -747,6 +747,11 @@ 具有迭代器块的方法“{0}”必须是“异步的”,这样才能返回“{1}” + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf index 7e2a41200b590..7058d02508bb0 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf @@ -747,6 +747,11 @@ 具有迭代區塊的方法 '{0}' 必須為「非同步」才能傳回 '{1}' + + A lambda expression with attributes cannot be converted to an expression tree + A lambda expression with attributes cannot be converted to an expression tree + + The #line directive end position must be greater than or equal to the start position The #line directive end position must be greater than or equal to the start position diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs index d79e4482688cc..edd8f7304db19 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs @@ -5190,5 +5190,218 @@ private static LambdaSymbol GetLambdaSymbol(SemanticModel model, LambdaExpressio { return model.GetSymbolInfo(syntax).Symbol.GetSymbol(); } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_01() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = [A] (x) => x; + +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,32): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = [A] (x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "[A] (x) => x").WithLocation(5, 32) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_02() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = [A][A] (x) => x; + +[AttributeUsage(AttributeTargets.All, AllowMultiple = true)] +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,32): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = [A][A] (x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "[A][A] (x) => x").WithLocation(5, 32) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_03() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = ([A] x) => x; + +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,37): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = ([A] x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "x").WithLocation(5, 37) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_04() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = ([A][A] x) => x; + +[AttributeUsage(AttributeTargets.All, AllowMultiple = true)] +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,40): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = ([A][A] x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "x").WithLocation(5, 40) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_05() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = ([A] x, [A] y) => x + y; + +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,42): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = ([A] x, [A] y) => x + y; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "x").WithLocation(5, 42) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_06() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = [return: A] (x) => x; + +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,32): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = [return: A] (x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "[return: A] (x) => x").WithLocation(5, 32) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_07() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = [return: A][return: A] (x) => x; + +[AttributeUsage(AttributeTargets.All, AllowMultiple = true)] +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,32): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = [return: A][return: A] (x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "[return: A][return: A] (x) => x").WithLocation(5, 32) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_08() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = [A][return: A] (x) => x; + +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,32): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = [A][return: A] (x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "[A][return: A] (x) => x").WithLocation(5, 32) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_09() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = [A] ([A] x) => x; + +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,32): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = [A] ([A] x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "[A] ([A] x) => x").WithLocation(5, 32) + ); + } + + [Fact] + [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] + public void Issue53910_10() + { + var source = +@" +using System; +using System.Linq.Expressions; + +Expression> e = [return: A] ([A] x) => x; + +class A : Attribute { } +"; + var comp = CreateCompilation(source); + comp.VerifyDiagnostics( + // (5,32): error CS8972: A lambda expression with attributes cannot be converted to an expression tree + // Expression> e = [return: A] ([A] x) => x; + Diagnostic(ErrorCode.ERR_LambdaWithAttributesToExpressionTree, "[return: A] ([A] x) => x").WithLocation(5, 32) + ); + } } } From a0d7661ead4a6909bb4797c3167e45a224534709 Mon Sep 17 00:00:00 2001 From: AlekseyTs Date: Wed, 1 Sep 2021 15:10:15 -0700 Subject: [PATCH 2/2] Rename tests --- .../Test/Semantic/Semantics/LambdaTests.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs index edd8f7304db19..bb9b3da1e2be1 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/LambdaTests.cs @@ -5193,7 +5193,7 @@ private static LambdaSymbol GetLambdaSymbol(SemanticModel model, LambdaExpressio [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_01() + public void WithAttributesToExpressionTree_01() { var source = @" @@ -5214,7 +5214,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_02() + public void WithAttributesToExpressionTree_02() { var source = @" @@ -5236,7 +5236,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_03() + public void WithAttributesToExpressionTree_03() { var source = @" @@ -5257,7 +5257,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_04() + public void WithAttributesToExpressionTree_04() { var source = @" @@ -5279,7 +5279,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_05() + public void WithAttributesToExpressionTree_05() { var source = @" @@ -5300,7 +5300,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_06() + public void WithAttributesToExpressionTree_06() { var source = @" @@ -5321,7 +5321,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_07() + public void WithAttributesToExpressionTree_07() { var source = @" @@ -5343,7 +5343,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_08() + public void WithAttributesToExpressionTree_08() { var source = @" @@ -5364,7 +5364,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_09() + public void WithAttributesToExpressionTree_09() { var source = @" @@ -5385,7 +5385,7 @@ class A : Attribute { } [Fact] [WorkItem(53910, "https://github.com/dotnet/roslyn/issues/53910")] - public void Issue53910_10() + public void WithAttributesToExpressionTree_10() { var source = @"