diff --git a/src/Compilers/VisualBasic/Portable/CodeGen/EmitExpression.vb b/src/Compilers/VisualBasic/Portable/CodeGen/EmitExpression.vb index 6bfe58eaac5e1..2051e4fd1358f 100644 --- a/src/Compilers/VisualBasic/Portable/CodeGen/EmitExpression.vb +++ b/src/Compilers/VisualBasic/Portable/CodeGen/EmitExpression.vb @@ -490,7 +490,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CodeGen ' Delegates shall be declared sealed. ' The Invoke method shall be virtual. ' Dev11 VB uses ldvirtftn for delegate methods, we emit ldftn to be consistent with C#. - If method.IsMetadataVirtual AndAlso Not method.ContainingType.IsDelegateType() AndAlso Not receiver.SuppressVirtualCalls Then + If Not method.IsShared AndAlso method.IsMetadataVirtual AndAlso Not method.ContainingType.IsDelegateType() AndAlso Not receiver.SuppressVirtualCalls Then _builder.EmitOpCode(ILOpCode.Dup) _builder.EmitOpCode(ILOpCode.Ldvirtftn) Else diff --git a/src/Compilers/VisualBasic/Test/Emit/CodeGen/CodeGenDelegateCreation.vb b/src/Compilers/VisualBasic/Test/Emit/CodeGen/CodeGenDelegateCreation.vb index 58d81b987d805..f14c319bf7a67 100644 --- a/src/Compilers/VisualBasic/Test/Emit/CodeGen/CodeGenDelegateCreation.vb +++ b/src/Compilers/VisualBasic/Test/Emit/CodeGen/CodeGenDelegateCreation.vb @@ -2959,5 +2959,55 @@ End Module CompileAndVerify(source, expectedOutput:="pass").VerifyDiagnostics() End Sub + + + + Public Sub DoubleCreateTruncating() + Dim source = + + +Imports System + +Module Program + Sub Main() + Dim b As Byte = 10 + Console.Write(Test1()(b)) + Console.Write(":") + Console.Write(Test2(b)) + End Sub + + Function Test1() As Func(Of Byte, Double) + Return AddressOf Double.CreateTruncating + End Function + + Function Test2(b As Byte) As Double + Return Double.CreateTruncating(b) + End Function +End Module + + + Dim comp = CreateCompilation(source, targetFramework:=TargetFramework.Net90, options:=TestOptions.ReleaseExe) + Dim verifier = CompileAndVerify(comp, expectedOutput:=If(ExecutionConditionUtil.IsMonoOrCoreClr, "10:10", Nothing), verify:=Verification.FailsPEVerify).VerifyDiagnostics() + verifier.VerifyIL("Program.Test1", ) + verifier.VerifyIL("Program.Test2", ) + End Sub + End Class End Namespace diff --git a/src/Compilers/VisualBasic/Test/Emit/Microsoft.CodeAnalysis.VisualBasic.Emit.UnitTests.vbproj b/src/Compilers/VisualBasic/Test/Emit/Microsoft.CodeAnalysis.VisualBasic.Emit.UnitTests.vbproj index 8d447cbc0f24e..f0bc43e187187 100644 --- a/src/Compilers/VisualBasic/Test/Emit/Microsoft.CodeAnalysis.VisualBasic.Emit.UnitTests.vbproj +++ b/src/Compilers/VisualBasic/Test/Emit/Microsoft.CodeAnalysis.VisualBasic.Emit.UnitTests.vbproj @@ -20,6 +20,7 @@ +