diff --git a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs index d41f926affb4d..819d384eed9f9 100644 --- a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs +++ b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs @@ -3783,8 +3783,7 @@ private static void GetSymbolsAndResultKind(BoundUnaryOperator unaryOperator, ou UnaryOperatorKind op = unaryOperator.OperatorKind.Operator(); symbols = ImmutableArray.Create(new SynthesizedIntrinsicOperatorSymbol(unaryOperator.Operand.Type.StrippedType(), OperatorFacts.UnaryOperatorNameFromOperatorKind(op, isChecked: unaryOperator.OperatorKind.IsChecked()), - unaryOperator.Type.StrippedType(), - unaryOperator.OperatorKind.IsChecked())); + unaryOperator.Type.StrippedType())); resultKind = unaryOperator.ResultKind; } } @@ -3807,8 +3806,7 @@ private static void GetSymbolsAndResultKind(BoundIncrementOperator increment, ou UnaryOperatorKind op = increment.OperatorKind.Operator(); symbols = ImmutableArray.Create(new SynthesizedIntrinsicOperatorSymbol(increment.Operand.Type.StrippedType(), OperatorFacts.UnaryOperatorNameFromOperatorKind(op, isChecked: increment.OperatorKind.IsChecked()), - increment.Type.StrippedType(), - increment.OperatorKind.IsChecked())); + increment.Type.StrippedType())); resultKind = increment.ResultKind; } } @@ -3842,8 +3840,7 @@ private static void GetSymbolsAndResultKind(BoundBinaryOperator binaryOperator, symbols = ImmutableArray.Create(new SynthesizedIntrinsicOperatorSymbol(objectType, OperatorFacts.BinaryOperatorNameFromOperatorKind(op, isChecked: binaryOperator.OperatorKind.IsChecked()), objectType, - binaryOperator.Type, - binaryOperator.OperatorKind.IsChecked())); + binaryOperator.Type)); } else { @@ -3884,8 +3881,7 @@ private static Symbol GetIntrinsicOperatorSymbol(BinaryOperatorKind op, bool isD return new SynthesizedIntrinsicOperatorSymbol(leftType, OperatorFacts.BinaryOperatorNameFromOperatorKind(op, isChecked), rightType, - returnType, - isChecked); + returnType); } private static void GetSymbolsAndResultKind(BoundCompoundAssignmentOperator compoundAssignment, out bool isDynamic, ref LookupResultKind resultKind, ref ImmutableArray symbols) diff --git a/src/Compilers/CSharp/Portable/Symbols/Synthesized/SynthesizedIntrinsicOperatorSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/Synthesized/SynthesizedIntrinsicOperatorSymbol.cs index 46466ac5fed98..77f93e5d33bcb 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Synthesized/SynthesizedIntrinsicOperatorSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Synthesized/SynthesizedIntrinsicOperatorSymbol.cs @@ -18,9 +18,8 @@ internal sealed class SynthesizedIntrinsicOperatorSymbol : MethodSymbol private readonly string _name; private readonly ImmutableArray _parameters; private readonly TypeSymbol _returnType; - private readonly bool _isCheckedBuiltin; - public SynthesizedIntrinsicOperatorSymbol(TypeSymbol leftType, string name, TypeSymbol rightType, TypeSymbol returnType, bool isCheckedBuiltin) + public SynthesizedIntrinsicOperatorSymbol(TypeSymbol leftType, string name, TypeSymbol rightType, TypeSymbol returnType) { if (leftType.Equals(rightType, TypeCompareKind.IgnoreCustomModifiersAndArraySizesAndLowerBounds | TypeCompareKind.IgnoreNullableModifiersForReferenceTypes)) { @@ -44,18 +43,18 @@ public SynthesizedIntrinsicOperatorSymbol(TypeSymbol leftType, string name, Type _parameters = ImmutableArray.Create(new SynthesizedOperatorParameterSymbol(this, leftType, 0, "left"), new SynthesizedOperatorParameterSymbol(this, rightType, 1, "right")); - _isCheckedBuiltin = isCheckedBuiltin; } - public SynthesizedIntrinsicOperatorSymbol(TypeSymbol container, string name, TypeSymbol returnType, bool isCheckedBuiltin) + public SynthesizedIntrinsicOperatorSymbol(TypeSymbol container, string name, TypeSymbol returnType) { _containingType = container; _name = name; _returnType = returnType; _parameters = ImmutableArray.Create(new SynthesizedOperatorParameterSymbol(this, container, 0, "value")); - _isCheckedBuiltin = isCheckedBuiltin; } + public override bool IsCheckedBuiltin => SyntaxFacts.IsCheckedOperator(this.Name); + public override string Name { get @@ -64,14 +63,6 @@ public override string Name } } - public override bool IsCheckedBuiltin - { - get - { - return _isCheckedBuiltin; - } - } - public override MethodKind MethodKind { get @@ -441,8 +432,7 @@ public override bool Equals(Symbol obj, TypeCompareKind compareKind) return false; } - if (_isCheckedBuiltin == other._isCheckedBuiltin && - _parameters.Length == other._parameters.Length && + if (_parameters.Length == other._parameters.Length && string.Equals(_name, other._name, StringComparison.Ordinal) && TypeSymbol.Equals(_containingType, other._containingType, compareKind) && TypeSymbol.Equals(_returnType, other._returnType, compareKind)) diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs index 367338c2b9dd1..3b5b83b8ef484 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs @@ -7636,10 +7636,6 @@ ExpressionSyntax node4 symbol1.ContainingType.EnumUnderlyingTypeOrSelf().SpecialType.IsIntegralType() || symbol1.ContainingType.SpecialType == SpecialType.System_Char); break; - - default: - expectChecked = type.IsDynamic(); - break; } Assert.Equal(expectChecked, symbol1.IsCheckedBuiltin); @@ -8396,7 +8392,7 @@ ExpressionSyntax node8 Assert.Equal(MethodKind.BuiltinOperator, symbol1.MethodKind); Assert.True(symbol1.IsImplicitlyDeclared); - bool isChecked; + bool isChecked = false; switch (op) { @@ -8406,10 +8402,6 @@ ExpressionSyntax node8 case BinaryOperatorKind.Division: isChecked = isDynamic || symbol1.ContainingSymbol.Kind == SymbolKind.PointerType || symbol1.ContainingType.EnumUnderlyingTypeOrSelf().SpecialType.IsIntegralType(); break; - - default: - isChecked = isDynamic; - break; } string expectedSymbol = String.Format("{4} {0}.{2}({1} left, {3} right)", @@ -8650,6 +8642,56 @@ void Test(dynamic x) compilation = compilation.WithOptions(TestOptions.ReleaseDll.WithOverflowChecks(true)); semanticModel = compilation.GetSemanticModel(tree); + var symbols2 = (from node2 in nodes select (IMethodSymbol)semanticModel.GetSymbolInfo(node2).Symbol).ToArray(); + foreach (var symbol2 in symbols2) + { + Assert.False(symbol2.IsCheckedBuiltin); + Assert.True(((ITypeSymbol)symbol2.ContainingSymbol).IsDynamic()); + Assert.Null(symbol2.ContainingType); + } + + for (int i = 0; i < symbols1.Length; i++) + { + Assert.Equal(symbols1[i], symbols2[i]); + } + } + + [Fact] + public void DynamicBinaryIntrinsicSymbols2() + { + var source = +@" +class Module1 +{ + void Test(dynamic x) + { + var z1 = x + 0; + var z2 = 0 + x; + } +}"; + + var compilation = CreateCompilation(source, options: TestOptions.ReleaseDll.WithOverflowChecks(false)); + + var tree = compilation.SyntaxTrees.Single(); + var semanticModel = compilation.GetSemanticModel(tree); + + var nodes = (from node in tree.GetRoot().DescendantNodes() + select node as BinaryExpressionSyntax). + Where(node => node is not null).ToArray(); + + Assert.Equal(2, nodes.Length); + + var symbols1 = (from node1 in nodes select (IMethodSymbol)semanticModel.GetSymbolInfo(node1).Symbol).ToArray(); + foreach (var symbol1 in symbols1) + { + Assert.False(symbol1.IsCheckedBuiltin); + Assert.True(((ITypeSymbol)symbol1.ContainingSymbol).IsDynamic()); + Assert.Null(symbol1.ContainingType); + } + + compilation = compilation.WithOptions(TestOptions.ReleaseDll.WithOverflowChecks(true)); + semanticModel = compilation.GetSemanticModel(tree); + var symbols2 = (from node2 in nodes select (IMethodSymbol)semanticModel.GetSymbolInfo(node2).Symbol).ToArray(); foreach (var symbol2 in symbols2) { diff --git a/src/Compilers/VisualBasic/Portable/BoundTree/BoundBinaryOperator.vb b/src/Compilers/VisualBasic/Portable/BoundTree/BoundBinaryOperator.vb index 68808e9fee0d0..1e5b25126e3af 100644 --- a/src/Compilers/VisualBasic/Portable/BoundTree/BoundBinaryOperator.vb +++ b/src/Compilers/VisualBasic/Portable/BoundTree/BoundBinaryOperator.vb @@ -39,20 +39,24 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Public Overrides ReadOnly Property ExpressionSymbol As Symbol Get If (OperatorKind And BinaryOperatorKind.Error) = 0 Then - Dim opName As String = OverloadResolution.TryGetOperatorName(OperatorKind) + Dim op As BinaryOperatorKind = (OperatorKind And BinaryOperatorKind.OpMask) + Dim leftType = TryCast(Left.Type.GetNullableUnderlyingTypeOrSelf(), NamedTypeSymbol) - If opName IsNot Nothing Then - Dim op As BinaryOperatorKind = (OperatorKind And BinaryOperatorKind.OpMask) - Dim leftType = DirectCast(Left.Type.GetNullableUnderlyingTypeOrSelf(), NamedTypeSymbol) - Return New SynthesizedIntrinsicOperatorSymbol(leftType, - opName, - Right.Type.GetNullableUnderlyingTypeOrSelf(), - Type.GetNullableUnderlyingTypeOrSelf(), - Checked AndAlso leftType.IsIntegralType() AndAlso - (op = BinaryOperatorKind.Multiply OrElse - op = BinaryOperatorKind.Add OrElse - op = BinaryOperatorKind.Subtract OrElse - op = BinaryOperatorKind.IntegerDivide)) + If leftType IsNot Nothing Then + Dim isChecked = Checked AndAlso leftType.IsIntegralType() AndAlso + (op = BinaryOperatorKind.Multiply OrElse + op = BinaryOperatorKind.Add OrElse + op = BinaryOperatorKind.Subtract OrElse + op = BinaryOperatorKind.IntegerDivide) + Dim opName As String = OverloadResolution.TryGetOperatorName(OperatorKind, isChecked) + + If opName IsNot Nothing Then + Return New SynthesizedIntrinsicOperatorSymbol( + leftType, + opName, + Right.Type.GetNullableUnderlyingTypeOrSelf(), + Type.GetNullableUnderlyingTypeOrSelf()) + End If End If End If diff --git a/src/Compilers/VisualBasic/Portable/BoundTree/BoundUnaryOperator.vb b/src/Compilers/VisualBasic/Portable/BoundTree/BoundUnaryOperator.vb index 177c16deab715..cd1bfbb35bfa8 100644 --- a/src/Compilers/VisualBasic/Portable/BoundTree/BoundUnaryOperator.vb +++ b/src/Compilers/VisualBasic/Portable/BoundTree/BoundUnaryOperator.vb @@ -32,16 +32,19 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Public Overrides ReadOnly Property ExpressionSymbol As Symbol Get If (OperatorKind And UnaryOperatorKind.Error) = 0 Then - Dim opName As String = OverloadResolution.TryGetOperatorName(OperatorKind) - - If opName IsNot Nothing Then - Dim op As UnaryOperatorKind = (OperatorKind And UnaryOperatorKind.OpMask) - Dim operandType = DirectCast(Operand.Type.GetNullableUnderlyingTypeOrSelf(), NamedTypeSymbol) - Return New SynthesizedIntrinsicOperatorSymbol(operandType, - opName, - Type.GetNullableUnderlyingTypeOrSelf(), - Checked AndAlso operandType.IsIntegralType() AndAlso - op = UnaryOperatorKind.Minus) + Dim op As UnaryOperatorKind = (OperatorKind And UnaryOperatorKind.OpMask) + Dim operandType = TryCast(Operand.Type.GetNullableUnderlyingTypeOrSelf(), NamedTypeSymbol) + + If operandType IsNot Nothing Then + Dim isChecked = Checked AndAlso operandType.IsIntegralType() AndAlso op = UnaryOperatorKind.Minus + Dim opName As String = OverloadResolution.TryGetOperatorName(OperatorKind, isChecked) + + If opName IsNot Nothing Then + Return New SynthesizedIntrinsicOperatorSymbol( + operandType, + opName, + Type.GetNullableUnderlyingTypeOrSelf()) + End If End If End If diff --git a/src/Compilers/VisualBasic/Portable/Semantics/Operators.vb b/src/Compilers/VisualBasic/Portable/Semantics/Operators.vb index a9d943013e408..9b23ee6e1792a 100644 --- a/src/Compilers/VisualBasic/Portable/Semantics/Operators.vb +++ b/src/Compilers/VisualBasic/Portable/Semantics/Operators.vb @@ -214,11 +214,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic End Select End Function - Friend Shared Function TryGetOperatorName(op As BinaryOperatorKind) As String + Friend Shared Function TryGetOperatorName(op As BinaryOperatorKind, isChecked As Boolean) As String Select Case (op And BinaryOperatorKind.OpMask) Case BinaryOperatorKind.Add - Return WellKnownMemberNames.AdditionOperatorName + Return If(isChecked, WellKnownMemberNames.CheckedAdditionOperatorName, WellKnownMemberNames.AdditionOperatorName) Case BinaryOperatorKind.Concatenate Return WellKnownMemberNames.ConcatenateOperatorName Case BinaryOperatorKind.Like @@ -236,9 +236,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Case BinaryOperatorKind.GreaterThan Return WellKnownMemberNames.GreaterThanOperatorName Case BinaryOperatorKind.Subtract - Return WellKnownMemberNames.SubtractionOperatorName + Return If(isChecked, WellKnownMemberNames.CheckedSubtractionOperatorName, WellKnownMemberNames.SubtractionOperatorName) Case BinaryOperatorKind.Multiply - Return WellKnownMemberNames.MultiplyOperatorName + Return If(isChecked, WellKnownMemberNames.CheckedMultiplyOperatorName, WellKnownMemberNames.MultiplyOperatorName) Case BinaryOperatorKind.Power Return WellKnownMemberNames.ExponentOperatorName Case BinaryOperatorKind.Divide @@ -246,7 +246,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Case BinaryOperatorKind.Modulo Return WellKnownMemberNames.ModulusOperatorName Case BinaryOperatorKind.IntegerDivide - Return WellKnownMemberNames.IntegerDivisionOperatorName + Return If(isChecked, WellKnownMemberNames.CheckedDivisionOperatorName, WellKnownMemberNames.IntegerDivisionOperatorName) Case BinaryOperatorKind.LeftShift Return WellKnownMemberNames.LeftShiftOperatorName Case BinaryOperatorKind.RightShift @@ -267,13 +267,13 @@ Namespace Microsoft.CodeAnalysis.VisualBasic End Select End Function - Friend Shared Function TryGetOperatorName(op As UnaryOperatorKind) As String + Friend Shared Function TryGetOperatorName(op As UnaryOperatorKind, isChecked As Boolean) As String Select Case (op And UnaryOperatorKind.OpMask) Case UnaryOperatorKind.Plus Return WellKnownMemberNames.UnaryPlusOperatorName Case UnaryOperatorKind.Minus - Return WellKnownMemberNames.UnaryNegationOperatorName + Return If(isChecked, WellKnownMemberNames.CheckedUnaryNegationOperatorName, WellKnownMemberNames.UnaryNegationOperatorName) Case UnaryOperatorKind.Not Return WellKnownMemberNames.OnesComplementOperatorName Case UnaryOperatorKind.Implicit diff --git a/src/Compilers/VisualBasic/Portable/Symbols/SynthesizedSymbols/SynthesizedIntrinsicOperatorSymbol.vb b/src/Compilers/VisualBasic/Portable/Symbols/SynthesizedSymbols/SynthesizedIntrinsicOperatorSymbol.vb index f84a7e47e813c..9411b52ca4b4e 100644 --- a/src/Compilers/VisualBasic/Portable/Symbols/SynthesizedSymbols/SynthesizedIntrinsicOperatorSymbol.vb +++ b/src/Compilers/VisualBasic/Portable/Symbols/SynthesizedSymbols/SynthesizedIntrinsicOperatorSymbol.vb @@ -11,27 +11,40 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols Private ReadOnly _name As String Private ReadOnly _parameters As ImmutableArray(Of ParameterSymbol) Private ReadOnly _returnType As TypeSymbol - Private ReadOnly _isCheckedBuiltin As Boolean - Public Sub New(container As NamedTypeSymbol, name As String, rightType As TypeSymbol, returnType As TypeSymbol, isCheckedBuiltin As Boolean) + Public Sub New(container As NamedTypeSymbol, name As String, rightType As TypeSymbol, returnType As TypeSymbol) MyBase.New(container) _name = name _returnType = returnType _parameters = (New ParameterSymbol() {New SynthesizedOperatorParameterSymbol(Me, container, 0, "left"), New SynthesizedOperatorParameterSymbol(Me, rightType, 1, "right")}).AsImmutableOrNull() - _isCheckedBuiltin = isCheckedBuiltin End Sub - Public Sub New(container As NamedTypeSymbol, name As String, returnType As TypeSymbol, isCheckedBuiltin As Boolean) + Public Sub New(container As NamedTypeSymbol, name As String, returnType As TypeSymbol) MyBase.New(container) _name = name _returnType = returnType _parameters = (New ParameterSymbol() {New SynthesizedOperatorParameterSymbol(Me, container, 0, "value")}).AsImmutableOrNull() - _isCheckedBuiltin = isCheckedBuiltin End Sub + Public Overrides ReadOnly Property IsCheckedBuiltin As Boolean + Get + Select Case Me.Name + Case WellKnownMemberNames.CheckedUnaryNegationOperatorName, + WellKnownMemberNames.CheckedAdditionOperatorName, + WellKnownMemberNames.CheckedDivisionOperatorName, + WellKnownMemberNames.CheckedMultiplyOperatorName, + WellKnownMemberNames.CheckedSubtractionOperatorName + Return True + + Case Else + Return False + End Select + End Get + End Property + Public Overrides ReadOnly Property Name As String Get Return _name @@ -61,8 +74,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols Return False End If - If _isCheckedBuiltin = other._isCheckedBuiltin AndAlso - _parameters.Length = other._parameters.Length AndAlso + If _parameters.Length = other._parameters.Length AndAlso String.Equals(_name, other._name, StringComparison.Ordinal) AndAlso TypeSymbol.Equals(m_containingType, other.m_containingType, TypeCompareKind.ConsiderEverything) AndAlso TypeSymbol.Equals(_returnType, other._returnType, TypeCompareKind.ConsiderEverything) Then @@ -149,12 +161,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols End Get End Property - Public Overrides ReadOnly Property IsCheckedBuiltin As Boolean - Get - Return _isCheckedBuiltin - End Get - End Property - Public Overrides Function GetDocumentationCommentId() As String Return Nothing End Function diff --git a/src/Compilers/VisualBasic/Test/Semantic/Binding/ImplicitVariableTests.vb b/src/Compilers/VisualBasic/Test/Semantic/Binding/ImplicitVariableTests.vb index 9995a32e4dfeb..e9bf88640d864 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Binding/ImplicitVariableTests.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Binding/ImplicitVariableTests.vb @@ -937,7 +937,7 @@ done expression:="x + 1", expectedTypeName:="System.Int32", symbolKind:=SymbolKind.Method, - expectedSymbol:="Function System.Int32.op_Addition(left As System.Int32, right As System.Int32) As System.Int32") + expectedSymbol:="Function System.Int32.op_CheckedAddition(left As System.Int32, right As System.Int32) As System.Int32") End Sub #End Region diff --git a/src/Compilers/VisualBasic/Test/Semantic/Semantics/BinaryOperators.vb b/src/Compilers/VisualBasic/Test/Semantic/Semantics/BinaryOperators.vb index e4a1f3f593367..caf7ef237d0ff 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Semantics/BinaryOperators.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Semantics/BinaryOperators.vb @@ -1104,7 +1104,7 @@ End Class Dim nonSpecialType = If(leftSpecial = SpecialType.System_Object, rightType, leftType) - For Each m In nonSpecialType.GetMembers(OverloadResolution.TryGetOperatorName(op)) + For Each m In nonSpecialType.GetMembers(OverloadResolution.TryGetOperatorName(op, isChecked:=False)) If m.Kind = SymbolKind.Method Then Dim method = DirectCast(m, MethodSymbol) If method.MethodKind = MethodKind.UserDefinedOperator AndAlso @@ -1203,7 +1203,7 @@ End Class OverloadResolution.TryGetOperatorName( If(op = BinaryOperatorKind.Add AndAlso resultType = SpecialType.System_String, BinaryOperatorKind.Concatenate, - op)), + op), symbol1.IsCheckedBuiltin), rightName, returnName), symbol1.ToTestDisplayString()) diff --git a/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetExtendedSemanticInfoTests.vb b/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetExtendedSemanticInfoTests.vb index a4b859d6ef3a3..fb5a5bf2da3b9 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetExtendedSemanticInfoTests.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetExtendedSemanticInfoTests.vb @@ -1376,7 +1376,7 @@ End Class Assert.Equal(TypeKind.Structure, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) - Assert.Equal("Function System.Int32.op_Multiply(left As System.Int32, right As System.Int32) As System.Int32", + Assert.Equal("Function System.Int32.op_CheckedMultiply(left As System.Int32, right As System.Int32) As System.Int32", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) @@ -5514,7 +5514,7 @@ End Class Assert.Equal(TypeKind.Class, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningValue, semanticInfo.ImplicitConversion.Kind) - Assert.Equal("Function System.Int32.op_Addition(left As System.Int32, right As System.Int32) As System.Int32", + Assert.Equal("Function System.Int32.op_CheckedAddition(left As System.Int32, right As System.Int32) As System.Int32", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) @@ -5544,7 +5544,7 @@ End Class Assert.Equal(TypeKind.Class, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningValue, semanticInfo.ImplicitConversion.Kind) - Assert.Equal("Function System.Int32.op_Addition(left As System.Int32, right As System.Int32) As System.Int32", + Assert.Equal("Function System.Int32.op_CheckedAddition(left As System.Int32, right As System.Int32) As System.Int32", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) diff --git a/src/Compilers/VisualBasic/Test/Semantic/Semantics/QueryExpressions_SemanticModel.vb b/src/Compilers/VisualBasic/Test/Semantic/Semantics/QueryExpressions_SemanticModel.vb index 6a80fd6ed12d0..7f028b103d16e 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Semantics/QueryExpressions_SemanticModel.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Semantics/QueryExpressions_SemanticModel.vb @@ -1151,7 +1151,7 @@ End Module Assert.Equal(TypeKind.Structure, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) - Assert.Equal("Function System.Int32.op_Addition(left As System.Int32, right As System.Int32) As System.Int32", + Assert.Equal("Function System.Int32.op_CheckedAddition(left As System.Int32, right As System.Int32) As System.Int32", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) diff --git a/src/Compilers/VisualBasic/Test/Semantic/Semantics/UnaryOperators.vb b/src/Compilers/VisualBasic/Test/Semantic/Semantics/UnaryOperators.vb index bbd6fb38bdf20..e57f8110e951d 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Semantics/UnaryOperators.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Semantics/UnaryOperators.vb @@ -751,7 +751,7 @@ End Class Assert.Equal(String.Format("Function {0}.{1}(value As {0}) As {2}", containerName, - OverloadResolution.TryGetOperatorName(op), + OverloadResolution.TryGetOperatorName(op, symbol1.IsCheckedBuiltin), returnName), symbol1.ToTestDisplayString())