@@ -2678,7 +2678,7 @@ static void Main(string[] args)
26782678
26792679 [ CompilerTrait ( CompilerFeature . IOperation ) ]
26802680 [ Fact , WorkItem ( 17602 , "https://github.com/dotnet/roslyn/issues/17602" ) ]
2681- public void IForLoopStatement_InvalidExpression ( )
2681+ public void IForLoopStatement_InvalidExpression1 ( )
26822682 {
26832683 string source = @"
26842684class C
@@ -2691,45 +2691,65 @@ static void Main(string[] args)
26912691 }
26922692}
26932693" ;
2694- string expectedOperationTree = @"
2695- IForLoopOperation (LoopKind.For, Continue Label Id: 0, Exit Label Id: 1) (OperationKind.Loop, Type: null, IsInvalid) (Syntax: 'for (int k ... 100, j > 5;')
2696- Locals: Local_1: System.Int32 k
2697- Local_2: System.Int32 j
2698- Condition:
2699- IBinaryOperation (BinaryOperatorKind.LessThan) (OperationKind.Binary, Type: System.Boolean, IsInvalid) (Syntax: 'k < 100')
2700- Left:
2701- ILocalReferenceOperation: k (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'k')
2702- Right:
2703- ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 100, IsInvalid) (Syntax: '100')
2704- Before:
2705- IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsImplicit) (Syntax: 'int k = 0, j = 0')
2706- IVariableDeclarationOperation (2 declarators) (OperationKind.VariableDeclaration, Type: null) (Syntax: 'int k = 0, j = 0')
2707- Declarators:
2708- IVariableDeclaratorOperation (Symbol: System.Int32 k) (OperationKind.VariableDeclarator, Type: null) (Syntax: 'k = 0')
2709- Initializer:
2710- IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0')
2711- ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0')
2712- IVariableDeclaratorOperation (Symbol: System.Int32 j) (OperationKind.VariableDeclarator, Type: null) (Syntax: 'j = 0')
2713- Initializer:
2714- IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0')
2715- ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0')
2716- Initializer:
2717- null
2718- AtLoopBottom:
2719- IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: '')
2720- Expression:
2721- IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '')
2722- Children(0)
2723- IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'j > 5')
2724- Expression:
2725- IBinaryOperation (BinaryOperatorKind.GreaterThan) (OperationKind.Binary, Type: System.Boolean, IsInvalid) (Syntax: 'j > 5')
2726- Left:
2727- ILocalReferenceOperation: j (OperationKind.LocalReference, Type: System.Int32, IsInvalid) (Syntax: 'j')
2728- Right:
2729- ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5, IsInvalid) (Syntax: '5')
2730- Body:
2731- IEmptyOperation (OperationKind.Empty, Type: null, IsInvalid) (Syntax: ';')
2694+ var tree = GetOperationTreeForTest < ForStatementSyntax > ( source ) ;
2695+ Assert . Null ( tree ) ;
2696+ }
2697+
2698+ [ CompilerTrait ( CompilerFeature . IOperation ) ]
2699+ [ Fact , WorkItem ( "https://github.com/dotnet/roslyn/issues/17602" ) ]
2700+ public void IForLoopStatement_InvalidExpression2 ( )
2701+ {
2702+ string source = @"
2703+ class C
2704+ {
2705+ static void Main(string[] args)
2706+ {
2707+ /*<bind>*/for (int k = 0, j = 0; k < 100, j > 5; k++)
2708+ {
2709+ }/*</bind>*/
2710+ }
2711+ }
27322712" ;
2713+ string expectedOperationTree = """
2714+ IForLoopOperation (LoopKind.For, Continue Label Id: 0, Exit Label Id: 1) (OperationKind.Loop, Type: null, IsInvalid) (Syntax: 'for (int k ... }')
2715+ Locals: Local_1: System.Int32 k
2716+ Local_2: System.Int32 j
2717+ Condition:
2718+ IBinaryOperation (BinaryOperatorKind.LessThan) (OperationKind.Binary, Type: System.Boolean, IsInvalid) (Syntax: 'k < 100')
2719+ Left:
2720+ ILocalReferenceOperation: k (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'k')
2721+ Right:
2722+ ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 100, IsInvalid) (Syntax: '100')
2723+ Before:
2724+ IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsImplicit) (Syntax: 'int k = 0, j = 0')
2725+ IVariableDeclarationOperation (2 declarators) (OperationKind.VariableDeclaration, Type: null) (Syntax: 'int k = 0, j = 0')
2726+ Declarators:
2727+ IVariableDeclaratorOperation (Symbol: System.Int32 k) (OperationKind.VariableDeclarator, Type: null) (Syntax: 'k = 0')
2728+ Initializer:
2729+ IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0')
2730+ ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0')
2731+ IVariableDeclaratorOperation (Symbol: System.Int32 j) (OperationKind.VariableDeclarator, Type: null) (Syntax: 'j = 0')
2732+ Initializer:
2733+ IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0')
2734+ ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0')
2735+ Initializer:
2736+ null
2737+ AtLoopBottom:
2738+ IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'j > 5')
2739+ Expression:
2740+ IBinaryOperation (BinaryOperatorKind.GreaterThan) (OperationKind.Binary, Type: System.Boolean, IsInvalid) (Syntax: 'j > 5')
2741+ Left:
2742+ ILocalReferenceOperation: j (OperationKind.LocalReference, Type: System.Int32, IsInvalid) (Syntax: 'j')
2743+ Right:
2744+ ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5, IsInvalid) (Syntax: '5')
2745+ IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'k++')
2746+ Expression:
2747+ IIncrementOrDecrementOperation (Postfix) (OperationKind.Increment, Type: System.Int32) (Syntax: 'k++')
2748+ Target:
2749+ ILocalReferenceOperation: k (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'k')
2750+ Body:
2751+ IBlockOperation (0 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }')
2752+ """ ;
27332753 VerifyOperationTreeForTest < ForStatementSyntax > ( source , expectedOperationTree ) ;
27342754 }
27352755
0 commit comments