|
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
Imports Basic.Reference.Assemblies
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
' this place is dedicated to binding related error tests
Public Class BindingErrorTests
Inherits BasicTestBase
#Region "Targeted Error Tests - please arrange tests in the order of error code"
<Fact()>
Public Sub BC0ERR_None_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Imports System
Class TimerState
Public Delegate Sub MyEventHandler(ByVal sender As Object, ByVal e As System.EventArgs)
Private m_MyEvent As MyEventHandler
Public Custom Event MyEvent As MyEventHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
m_MyEvent.Invoke(sender, e)
End RaiseEvent
AddHandler(ByVal value As MyEventHandler)
m_MyEvent = DirectCast ( _
[Delegate].Combine(m_MyEvent, value), _
MyEventHandler) : End addHandler
RemoveHandler(ByVal value As MyEventHandler)
m_MyEvent = DirectCast ( _
[Delegate].RemoveAll(m_MyEvent, value), _
MyEventHandler)
End RemoveHandler
End Event
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Class AAA
Private _name As String
Public ReadOnly Property Name() As String
Get
Return _name : End Get
End Property
Private _age As String
Public ReadOnly Property Age() As String
Get
Return _age
: End Get
End Property
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="None">
<file name="a.vb">
Module M1
Function B As string
Dim x = 1: End Function
Function C As string
Dim x = 2
:End Function
End Module
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class S1
Public Sub New()
Dim cond = True
GoTo l1
If False Then
l1:
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Structure S1
Function FOO As String
Return "h"
End Function
Sub Main()
FOO
FOO()
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Structure S1
Sub Main()
dim a?()(,) as integer
dim b(2) as integer
dim c as integer(,)
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class D
Public Class Foo
Public x As Integer
End Class
Public Class FooD
Inherits Foo
Public Sub Baz()
End Sub
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_8()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class D
Public Shared Sub Main()
Dim x As Integer = 1
Dim b As Boolean = x = 1
System.Console.Write(b )
Dim l As Long = 5
System.Console.Write(l > 6 )
Dim f As Single = 25
System.Console.Write(f >= 25 )
Dim d As Double = 3
System.Console.Write(d <= f )
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_9()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class C
Public Shared Sub Main()
System.Console.Write("{0}{1}{2}{3}{4}{5}", "a", "b", "c", "d", "e", "f" )
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_10()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class D
Public Class Moo(Of T)
Public Sub Boo(x As T)
Dim local As T = x
End Sub
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_11()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class C
public class Moo
public shared S as integer
end class
Public Shared Sub Main()
System.Console.Write(Moo.S )
Moo.S = 42
System.Console.Write(Moo.S )
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_12()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class C
Private Shared Function M(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer
Return y
End Function
Public Shared Sub Main()
System.Console.Write(M(0, 42, 1))
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_13()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Public Class C
Private Shared Function M() As System.AppDomain
dim y as object = System.AppDomain.CreateDomain("qq")
dim z as System.AppDomain = ctype(y,System.AppDomain)
return z
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_14()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Imports System
Class Program
Public Class C
Public Function Foo(ByVal p1 As Short, ByVal p2 As UShort) As UInteger
Return CUShort (p1 + p2)
End Function
Public Function Foo(ByVal p1 As Short, ByVal p2 As String) As UInteger
Return CUInt (p1)
End Function
Public Function Foo(ByVal p1 As Short, ByVal ParamArray p2 As UShort()) As UInteger
Return CByte (p2(0) + p2(1))
End Function
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_15()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Class C
Private Property P As Integer
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_16()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC0ERR_None_16">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
Me.New()
End Sub
Public Sub New(s As String)
:
Call Me.New(1)
End Sub
Public Sub New(s As Double)
' comment
Call Me.New(1)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_17()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC0ERR_None_17">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
#Const a = 1
Me.New()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_18()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC0ERR_None_18">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
#Const a = 1
#If a = 0 Then
Me.New()
#End If
Me.New()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<Fact()>
Public Sub BC0ERR_None_19()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC0ERR_None_19">
<file name="a.vb">
Class b
Public Sub New(ParamArray t() As Integer)
End Sub
End Class
Class d
Inherits b
Public Sub New()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<WorkItem(540629, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540629")>
<Fact()>
Public Sub BC30002ERR_UndefinedType1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidModuleAttribute1">
<file name="a.vb"><![CDATA[
Imports System
Class Outer
<AttributeUsage(AttributeTargets.All)> Class MyAttribute
Inherits Attribute
End Class
End Class
<MyAttribute()>
Class Test
End Class
]]></file>
</compilation>).
VerifyDiagnostics(Diagnostic(ERRID.ERR_UndefinedType1, "MyAttribute").WithArguments("MyAttribute"))
End Sub
<Fact()>
Public Sub BC30020ERR_IsOperatorRequiresReferenceTypes1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Public Structure zzz
Shared Sub Main()
Dim a As New yyy
Dim b As New yyy
System.Console.WriteLine(a Is b)
b = a
System.Console.WriteLine(a Is b)
End Sub
End Structure
Public Structure yyy
Public i As Integer
Public Sub abc()
System.Console.WriteLine(i)
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30020: 'Is' operator does not accept operands of type 'yyy'. Operands must be reference or nullable types.
System.Console.WriteLine(a Is b)
~
BC30020: 'Is' operator does not accept operands of type 'yyy'. Operands must be reference or nullable types.
System.Console.WriteLine(a Is b)
~
BC30020: 'Is' operator does not accept operands of type 'yyy'. Operands must be reference or nullable types.
System.Console.WriteLine(a Is b)
~
BC30020: 'Is' operator does not accept operands of type 'yyy'. Operands must be reference or nullable types.
System.Console.WriteLine(a Is b)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30020ERR_IsOperatorRequiresReferenceTypes1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class B(Of T As Structure)
End Class
Class C
Shared Sub M1(Of T1)(_1 As T1)
If _1 Is Nothing Then
End If
If Nothing Is _1 Then
End If
End Sub
Shared Sub M2(Of T2 As Class)(_2 As T2)
If _2 Is Nothing Then
End If
If Nothing Is _2 Then
End If
End Sub
Shared Sub M3(Of T3 As Structure)(_3 As T3)
If _3 Is Nothing Then
End If
If Nothing Is _3 Then
End If
End Sub
Shared Sub M4(Of T4 As New)(_4 As T4)
If _4 Is Nothing Then
End If
If Nothing Is _4 Then
End If
End Sub
Shared Sub M5(Of T5 As I)(_5 As T5)
If _5 Is Nothing Then
End If
If Nothing Is _5 Then
End If
End Sub
Shared Sub M6(Of T6 As A)(_6 As T6)
If _6 Is Nothing Then
End If
If Nothing Is _6 Then
End If
End Sub
Shared Sub M7(Of T7 As U, U)(_7 As T7)
If _7 Is Nothing Then
End If
If Nothing Is _7 Then
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30020: 'Is' operator does not accept operands of type 'T3'. Operands must be reference or nullable types.
If _3 Is Nothing Then
~~
BC30020: 'Is' operator does not accept operands of type 'T3'. Operands must be reference or nullable types.
If Nothing Is _3 Then
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30029ERR_CantRaiseBaseEvent()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantRaiseBaseEvent">
<file name="a.vb">
Option Explicit On
Class class1
Public Event MyEvent()
End Class
Class class2
Inherits class1
Sub RaiseEvt()
'COMPILEERROR: BC30029,"MyEvent"
RaiseEvent MyEvent()
End Sub
End Class
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_CantRaiseBaseEvent, "MyEvent"))
End Sub
<Fact()>
Public Sub BC30030ERR_TryWithoutCatchOrFinally()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TryWithoutCatchOrFinally">
<file name="a.vb">
Module M1
Sub Scen1()
'COMPILEERROR: BC30030, "Try"
Try
End Try
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30030: Try must have at least one 'Catch' or a 'Finally'.
Try
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30038ERR_StrictDisallowsObjectOperand1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowsObjectOperand1">
<file name="a.vb">
Imports System
Structure myStruct1
shared result = New Guid() And New Guid()
End structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30452: Operator 'And' is not defined for types 'Guid' and 'Guid'.
shared result = New Guid() And New Guid()
~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30038ERR_StrictDisallowsObjectOperand1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowsObjectOperand1">
<file name="a.vb">
Option Infer Off
option Strict on
Structure myStruct1
sub foo()
Dim x1$ = "hi"
Dim [dim] = "hi" & "hello"
Dim x31 As integer = x1 & [dim]
end sub
End structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Dim [dim] = "hi" & "hello"
~~~~~
BC30038: Option Strict On prohibits operands of type Object for operator '&'.
Dim x31 As integer = x1 & [dim]
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30038ERR_StrictDisallowsObjectOperand1_1a()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowsObjectOperand1">
<file name="a.vb">
<![CDATA[
option Strict on
Structure myStruct1
sub foo()
Dim x1$ = 33 & 2.34 'No inference here
end sub
End structure
]]>
</file>
</compilation>)
AssertTheseEmitDiagnostics(compilation,
<expected><![CDATA[
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToString' is not defined.
Dim x1$ = 33 & 2.34 'No inference here
~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToString' is not defined.
Dim x1$ = 33 & 2.34 'No inference here
~~~~
]]></expected>)
End Sub
<Fact()>
Public Sub BC30039ERR_LoopControlMustNotBeProperty()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Module M
Sub M()
For <x/>.@a = "" To ""
Next
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30039: Loop control variable cannot be a property or a late-bound indexed array.
For <x/>.@a = "" To ""
~~~~~~~
BC30337: 'For' loop control variable cannot be of type 'String' because the type does not support the required operators.
For <x/>.@a = "" To ""
~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC30039ERR_LoopControlMustNotBeProperty_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Class C
Property P() As Integer
Dim F As Integer
Sub Method1(A As Integer, ByRef B As Integer)
' error
For Each P In {1}
Next
' warning
For Each F In {2}
Next
For Each Me.F In {3}
Next
For Each A In {4}
Next
For Each B In {5}
Next
End Sub
Shared Sub Main()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30039: Loop control variable cannot be a property or a late-bound indexed array.
For Each P In {1}
~
</expected>)
End Sub
<Fact()>
Public Sub BC30039ERR_LoopControlMustNotBeProperty_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Strict Off
Option Infer On
Public Class MyClass1
Public Property z As Integer
Public Shared Sub Main()
End Sub
Public Sub Foo()
For z = 1 To 10
Next
For x = 1 To z Step z
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30039: Loop control variable cannot be a property or a late-bound indexed array.
For z = 1 To 10
~
</expected>)
End Sub
<Fact(), WorkItem(545641, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545641")>
Public Sub MissingLatebindingHelpers()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class Program
Shared Sub Main()
Dim Result As Object
For Result = 1 To 2
Next
End Sub
End Class
</file>
</compilation>)
AssertTheseEmitDiagnostics(compilation,
<expected>
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ObjectFlowControl+ForLoopControl.ForLoopInitObj' is not defined.
For Result = 1 To 2
~~~~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ObjectFlowControl+ForLoopControl.ForNextCheckObj' is not defined.
For Result = 1 To 2
~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub MissingLatebindingHelpersObjectFor()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Strict Off
Imports System
Class Program
Shared Sub Main()
Dim obj As Object = New cls1
obj.P1 = 42 ' assignment (Set)
obj.P1() ' side-effect (Call)
Console.WriteLine(obj.P1) ' value (Get)
End Sub
Class cls1
Private _p1 As Integer
Public Property p1 As Integer
Get
Console.Write("Get")
Return _p1
End Get
Set(value As Integer)
Console.Write("Set")
_p1 = value
End Set
End Property
End Class
End Class
</file>
</compilation>)
AssertTheseEmitDiagnostics(compilation,
<expected>
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet' is not defined.
obj.P1 = 42 ' assignment (Set)
~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall' is not defined.
obj.P1() ' side-effect (Call)
~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet' is not defined.
Console.WriteLine(obj.P1) ' value (Get)
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UseOfKeywordNotInInstanceMethod1">
<file name="a.vb">
Class [ident1]
Public k As Short
Public Shared Function foo2() As String
'COMPILEERROR: BC30043, "Me"
Me.k = 333
Return Nothing
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'Me' is valid only within an instance method.
Me.k = 333
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_WithinFieldInitializers()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="FieldsUsingMe">
<file name="a.vb">
Option strict on
imports system
Class C1
private f1 as integer = 21
private shared f2 as integer = Me.f1 + 1
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'Me' is valid only within an instance method.
private shared f2 as integer = Me.f1 + 1
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_MeInAttribute()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_MeInAttribute">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
<Assembly: AssemblyCulture(Me.AAA)>
<StructLayout(Me.AAA)>
Structure S1
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'Me' is valid only within an instance method.
<Assembly: AssemblyCulture(Me.AAA)>
~~
BC30043: 'Me' is valid only within an instance method.
<StructLayout(Me.AAA)>
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyBaseInAttribute()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyBaseInAttribute">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
<Assembly: AssemblyCulture(MyBase.AAA)>
<StructLayout(MyBase.AAA)>
Structure S1
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'MyBase' is valid only within an instance method.
<Assembly: AssemblyCulture(MyBase.AAA)>
~~~~~~
BC30043: 'MyBase' is valid only within an instance method.
<StructLayout(MyBase.AAA)>
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyClassInAttribute()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyClassInAttribute">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
<Assembly: AssemblyCulture(MyClass.AAA)>
<StructLayout(MyClass.AAA)>
Structure S1
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'MyClass' is valid only within an instance method.
<Assembly: AssemblyCulture(MyClass.AAA)>
~~~~~~~
BC30043: 'MyClass' is valid only within an instance method.
<StructLayout(MyClass.AAA)>
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_WithinFieldInitializers_MyBase()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_WithinFieldInitializers_MyBase">
<file name="a.vb">
Option strict on
imports system
Class Base
Shared Function GetBar(i As Integer) As Integer
Return Nothing
End Function
End Class
Class C2
Inherits Base
Public Shared f As Func(Of Func(Of Integer, Integer)) =
Function() New Func(Of Integer, Integer)(AddressOf MyBase.GetBar)
Public Shared Property P As Integer = MyBase.GetBar(1)
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'MyBase' is valid only within an instance method.
Function() New Func(Of Integer, Integer)(AddressOf MyBase.GetBar)
~~~~~~
BC30043: 'MyBase' is valid only within an instance method.
Public Shared Property P As Integer = MyBase.GetBar(1)
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_WithinFieldInitializers_MyClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_WithinFieldInitializers_MyClass">
<file name="a.vb">
Option strict on
imports system
Class C2
Shared Function GetBar(i As Integer) As Integer
Return Nothing
End Function
Public Shared f As Func(Of Func(Of Integer, Integer)) =
Function() New Func(Of Integer, Integer)(AddressOf MyClass.GetBar)
Public Shared Property P As Integer = MyClass.GetBar(1)
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'MyClass' is valid only within an instance method.
Function() New Func(Of Integer, Integer)(AddressOf MyClass.GetBar)
~~~~~~~
BC30043: 'MyClass' is valid only within an instance method.
Public Shared Property P As Integer = MyClass.GetBar(1)
~~~~~~~
</expected>)
End Sub
<WorkItem(542958, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542958")>
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyClassInAttribute_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyClassInAttribute">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Runtime.InteropServices
Public Class S1
Const str As String = ""
<MyAttribute(MyClass.color.blue)>
Sub foo()
End Sub
Shared Sub main()
End Sub
Enum color
blue
End Enum
End Class
Class MyAttribute
Inherits Attribute
Sub New(str As S1.color)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'MyClass' is valid only within an instance method.
<MyAttribute(MyClass.color.blue)>
~~~~~~~
</expected>)
End Sub
<WorkItem(542958, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542958")>
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_MeInAttribute_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_MeInAttribute">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Runtime.InteropServices
Public Class S1
Const str As String = ""
<MyAttribute(Me.color.blue)>
Sub foo()
End Sub
Shared Sub main()
End Sub
Enum color
blue
End Enum
End Class
Class MyAttribute
Inherits Attribute
Sub New(str As S1.color)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'Me' is valid only within an instance method.
<MyAttribute(Me.color.blue)>
~~
</expected>)
End Sub
<WorkItem(542958, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542958")>
<Fact()>
Public Sub BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyBaseInAttribute_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30043ERR_UseOfKeywordNotInInstanceMethod1_MyBaseInAttribute">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Runtime.InteropServices
Public Class BaseClass
Enum color
blue
End Enum
End Class
Public Class S1
Inherits BaseClass
<MyAttribute(MyBase.color.blue)>
Sub foo()
End Sub
Shared Sub main()
End Sub
End Class
Class MyAttribute
Inherits Attribute
Sub New(x As S1.color)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30043: 'MyBase' is valid only within an instance method.
<MyAttribute(MyBase.color.blue)>
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30044ERR_UseOfKeywordFromStructure1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UseOfKeywordFromStructure1">
<file name="a.vb">
Module M1
Structure S
Public Overrides Function ToString() As String
Return MyBase.ToString()
End Function
End Structure
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30044: 'MyBase' is not valid within a structure.
Return MyBase.ToString()
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30045ERR_BadAttributeConstructor1()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadAttributeConstructor1">
<file name="a.vb"><![CDATA[
Imports System
Module M1
Class myattr1
Inherits Attribute
Sub New(ByVal o() As c1)
Me.o = o
End Sub
Public o() As c1
End Class
Public Class c1
End Class
<myattr1(Nothing)>
Class Scen18
End Class
Class myattr2
Inherits Attribute
Sub New(ByVal o() As delegate1)
Me.o = o
End Sub
Public o() As delegate1
End Class
Delegate Sub delegate1()
<myattr2(Nothing)>
Class Scen20
End Class
End Module
]]></file>
</compilation>).
VerifyDiagnostics(Diagnostic(ERRID.ERR_BadAttributeConstructor1, "myattr1").WithArguments("M1.c1()"),
Diagnostic(ERRID.ERR_BadAttributeConstructor1, "myattr2").WithArguments("M1.delegate1()"))
Dim scen18 = compilation.GlobalNamespace.GetTypeMember("M1").GetTypeMember("Scen18")
Dim attribute = scen18.GetAttributes().Single()
Assert.Equal("M1.myattr1(Nothing)", attribute.ToString())
Dim argument = attribute.CommonConstructorArguments(0)
Assert.Null(argument.Type)
End Sub
<Fact, WorkItem(3380, "DevDiv_Projects/Roslyn")>
Public Sub BC30046ERR_ParamArrayWithOptArgs()
CreateCompilationWithMscorlib40(<compilation name="ERR_ParamArrayWithOptArgs">
<file name="a.vb"><![CDATA[
Class C1
Shared Sub Main()
End Sub
sub abc( optional k as string = "hi", paramarray s() as integer )
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_ParamArrayWithOptArgs, "s"))
End Sub
<Fact()>
Public Sub BC30049ERR_ExpectedArray1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ExpectedArray1">
<file name="a.vb">
Module M1
Sub Main()
Dim boolVar_12 As Boolean
'COMPILEERROR: BC30049, "boolVar_12"
ReDim boolVar_12(120)
'COMPILEERROR: BC30049, "boolVar_12", BC30811, "as"
ReDim boolVar_12(120, 130)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30049: 'Redim' statement requires an array.
ReDim boolVar_12(120)
~~~~~~~~~~
BC30049: 'Redim' statement requires an array.
ReDim boolVar_12(120, 130)
~~~~~~~~~~
</expected>)
End Sub
<WorkItem(542209, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542209")>
<Fact()>
Public Sub BC30052ERR_ArrayRankLimit()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ArrayRankLimit">
<file name="a.vb">
Public Class C1
Dim S1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) As Byte
Dim S2(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33) As Byte
End Class
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_ArrayRankLimit, "(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33)"))
End Sub
<Fact, WorkItem(2424, "https://github.com/dotnet/roslyn/issues/2424")>
Public Sub BC30053ERR_AsNewArray_01()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AsNewArray">
<file name="a.vb">
Module M1
Sub Foo()
Dim c() As New System.Exception
Dim d(), e() As New System.Exception
Dim f(), g As New System.Exception
Dim h, i() As New System.Exception
End Sub
Dim x() As New System.Exception
Dim y(), z() As New System.Exception
Dim u(), v As New System.Exception
Dim w, q() As New System.Exception
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30053: Arrays cannot be declared with 'New'.
Dim c() As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim d(), e() As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim d(), e() As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim f(), g As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim h, i() As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim x() As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim y(), z() As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim y(), z() As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim u(), v As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim w, q() As New System.Exception
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(2424, "https://github.com/dotnet/roslyn/issues/2424")>
Public Sub BC30053ERR_AsNewArray_02()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AsNewArray">
<file name="a.vb">
Module M1
Sub Foo()
Dim c(1) As New System.Exception
Dim d(1), e(1) As New System.Exception
Dim f(1), g As New System.Exception
Dim h, i(1) As New System.Exception
End Sub
Dim x(1) As New System.Exception
Dim y(1), z(1) As New System.Exception
Dim u(1), v As New System.Exception
Dim w, q(1) As New System.Exception
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30053: Arrays cannot be declared with 'New'.
Dim c(1) As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim d(1), e(1) As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim d(1), e(1) As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim f(1), g As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim h, i(1) As New System.Exception
~~~
BC30053: Arrays cannot be declared with 'New'.
Dim x(1) As New System.Exception
~~~~
BC30053: Arrays cannot be declared with 'New'.
Dim y(1), z(1) As New System.Exception
~~~~
BC30053: Arrays cannot be declared with 'New'.
Dim y(1), z(1) As New System.Exception
~~~~
BC30053: Arrays cannot be declared with 'New'.
Dim u(1), v As New System.Exception
~~~~
BC30053: Arrays cannot be declared with 'New'.
Dim w, q(1) As New System.Exception
~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30057ERR_TooManyArgs1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TooManyArgs1">
<file name="a.vb">
Module M1
Sub Main()
test("CC", 15, 45)
End Sub
Sub test(ByVal name As String, ByVal age As Integer)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30057: Too many arguments to 'Public Sub test(name As String, age As Integer)'.
test("CC", 15, 45)
~~
</expected>)
End Sub
' 30057 is better here
<WorkItem(528720, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528720")>
<Fact()>
Public Sub BC30057ERR_TooManyArgs1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConstructorNotFound1">
<file name="a.vb">
Module M1
Sub FOO()
Dim DynamicArray_2() As Byte
Dim DynamicArray_3() As Long
'COMPILEERROR: BC30251, "New Byte(1, 2, 3, 4)"
DynamicArray_2 = New Byte(1, 2, 3, 4)
'COMPILEERROR: BC30251, "New Byte(1)"
DynamicArray_3 = New Long(1)
Exit Sub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30057: Too many arguments to 'Public Sub New()'.
DynamicArray_2 = New Byte(1, 2, 3, 4)
~
BC30057: Too many arguments to 'Public Sub New()'.
DynamicArray_3 = New Long(1)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30057ERR_TooManyArgs1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConstructorNotFound1">
<file name="a.vb">
Option Infer On
Imports System
Module Module1
Sub Main()
Dim arr16 As New Integer(2, 3) { {1, 2}, {2, 1} }' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30057: Too many arguments to 'Public Sub New()'.
Dim arr16 As New Integer(2, 3) { {1, 2}, {2, 1} }' Invalid
~
BC30205: End of statement expected.
Dim arr16 As New Integer(2, 3) { {1, 2}, {2, 1} }' Invalid
~
</expected>)
End Sub
<Fact()>
Public Sub BC30057ERR_TooManyArgs1_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConstructorNotFound1">
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Sub Main()
Dim myArray8 As Integer(,) = New Integer(,) 1,2,3,4,5
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30057: Too many arguments to 'Public Sub New()'.
Dim myArray8 As Integer(,) = New Integer(,) 1,2,3,4,5
~
BC30205: End of statement expected.
Dim myArray8 As Integer(,) = New Integer(,) 1,2,3,4,5
~
</expected>)
End Sub
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_fields()
Dim source =
<compilation>
<file name="a.vb">
Option Strict On
option Infer On
imports system
Imports microsoft.visualbasic.strings
Class A
Public Const X As Integer = 1
End Class
Class B
Sub New(x As Action)
End Sub
Sub New(x As Integer)
End Sub
Public Const X As Integer = 2
End Class
Class C
Sub New(x As Integer)
End Sub
Public Const X As Integer = 3
End Class
Class D
Sub New(x As Func(Of Integer))
End Sub
Public Const X As Integer = 4
End Class
Class C1
Public Delegate Sub SubDel(p as integer)
Public Shared Sub foo(p as Integer)
Console.WriteLine("DelegateField works :) " + p.ToString())
End Sub
public shared function f() as integer
return 23
end function
' should work because of const propagation
public const f1 as integer = 1 + 1
'' should not work
Public const f2 as SubDel = AddressOf C1.foo
public const f3 as integer = C1.f()
public const f4,f5 as integer = C1.f()
'' should also give a BC30059 for inferred types
public const f6 as object = new C1()
public const f7 = new C1()
public const f8 as integer = Asc(chrW(255)) ' > 127 are not const
public const f9() as integer = new integer() {1, 2}
public const f10 = new integer() {1, 2}
public const f11 = GetType(Integer)
public const f12 as system.type = GetType(Integer)
public const f13 as integer = cint(cint(cbyte("1")))
public const f14 as integer = cint(cint(cbyte(1))) ' works
public const f15 as long = clng(cint(cbyte("1")))
public const f16 as long = clng(cint(cbyte(1))) ' works
public const ValueWorks1 as Integer = new C(23).X
public const ValueWorks2 as Integer = new A().X
public const ValueWorks3 as Integer = 23 + new A().X
public const ValueWorks4 as Integer = if(nothing, 23)
public const ValueWorks5 as Integer = if(23 = 42, 23, 42)
public const ValueWorks6 as Integer = if(new A().X = 0, 23, 42)
public const ValueWorks7 as Integer = if(new A(), nothing).X
public const ValueWorks8 as Integer = if(23 = 42, 23, new A().X)
public const ValueWorks9 as Integer = if(23 = 42, new A().X, 42)
public const ValueWorks10 as Integer = CType("12", Integer).MaxValue ' needs option strict off ...
public const ValueWorks11 as Integer = New B(Sub() Exit Sub).X
public const ValueWorks12 = New D(Function() 23).X
public const ValueDoesntWork1 as Integer = f()
public const ValueDoesntWork2 as Integer = 1 + f()
public const ValueDoesntWork3 as Integer = f() + 1
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
Public const f2 as SubDel = AddressOf C1.foo
~~~~~~
BC30059: Constant expression is required.
public const f3 as integer = C1.f()
~~~~~~
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
public const f4,f5 as integer = C1.f()
~~~~~~~~~~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
public const f4,f5 as integer = C1.f()
~~~~~~
BC30059: Constant expression is required.
public const f6 as object = new C1()
~~~~~~~~
BC30059: Constant expression is required.
public const f7 = new C1()
~~~~~~~~
BC30059: Constant expression is required.
public const f8 as integer = Asc(chrW(255)) ' > 127 are not const
~~~~~~~~~~~~~~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
public const f9() as integer = new integer() {1, 2}
~~
BC30059: Constant expression is required.
public const f10 = new integer() {1, 2}
~~~~~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
public const f11 = GetType(Integer)
~~~~~~~~~~~~~~~~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
public const f12 as system.type = GetType(Integer)
~~~~~~~~~~~
BC30060: Conversion from 'String' to 'Byte' cannot occur in a constant expression.
public const f13 as integer = cint(cint(cbyte("1")))
~~~
BC30060: Conversion from 'String' to 'Byte' cannot occur in a constant expression.
public const f15 as long = clng(cint(cbyte("1")))
~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks1 as Integer = new C(23).X
~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks2 as Integer = new A().X
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks3 as Integer = 23 + new A().X
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks6 as Integer = if(new A().X = 0, 23, 42)
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks7 as Integer = if(new A(), nothing).X
~~~~~~~~~~~~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks8 as Integer = if(23 = 42, 23, new A().X)
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks9 as Integer = if(23 = 42, new A().X, 42)
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks10 as Integer = CType("12", Integer).MaxValue ' needs option strict off ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks11 as Integer = New B(Sub() Exit Sub).X
~~~~~~~~~~~~~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
public const ValueWorks12 = New D(Function() 23).X
~~~~~~~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
public const ValueDoesntWork1 as Integer = f()
~~~
BC30059: Constant expression is required.
public const ValueDoesntWork2 as Integer = 1 + f()
~~~
BC30059: Constant expression is required.
public const ValueDoesntWork3 as Integer = f() + 1
~~~
</expected>)
End Sub
' The non-constant initializer should result in
' a single error, even if declaring multiple fields.
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_2()
Dim source =
<compilation>
<file name="a.vb">
Option Strict On
Module M
Const A, B As Integer = F()
Function F() As Integer
Return 0
End Function
End Module
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
compilation.AssertTheseDiagnostics(
<expected>
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
Const A, B As Integer = F()
~~~~~~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
Const A, B As Integer = F()
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_locals()
Dim source =
<compilation>
<file name="a.vb">
Option strict off
imports system
Imports microsoft.visualbasic.strings
Class A
Public Const X As Integer = 1
End Class
Class B
Sub New(x As Action)
End Sub
Sub New(x As Integer)
End Sub
Public Const X As Integer = 2
End Class
Class C
Sub New(x As Integer)
End Sub
Public Const X As Integer = 3
End Class
Class D
Sub New(x As Func(Of Integer))
End Sub
Public Const X As Integer = 4
End Class
Class C1
Public Delegate Sub SubDel(p as integer)
Public Shared Sub foo(p as Integer)
Console.WriteLine("DelegateField works :) " + p.ToString())
End Sub
public shared function f() as integer
return 23
end function
Public Sub Main()
' should work because of const propagation
const f1 as integer = 1 + 1
' should not work
const f2 as SubDel = AddressOf C1.foo
const f3 as integer = C1.f()
const f4,f5 as integer = C1.f()
' should also give a BC30059 for inferred types
const f6 as object = new C1()
const f7 = new C1()
const f8 as integer = Asc(chrW(255)) ' > 127 are not const
const f9() as integer = new integer() {1, 2}
const f10 = new integer() {1, 2}
const f11 = GetType(Integer)
const f12 as system.type = GetType(Integer)
const f13 as integer = cint(cint(cbyte("1")))
const f14 as integer = cint(cint(cbyte(1))) ' works
const f15 as long = clng(cint(cbyte("1")))
const f16 as long = clng(cint(cbyte(1))) ' works
const ValueWorks1 as Integer = new C(23).X
const ValueWorks2 as Integer = new A().X
const ValueWorks3 as Integer = 23 + new A().X
const ValueWorks4 as Integer = if(nothing, 23)
const ValueWorks5 as Integer = if(23 = 42, 23, 42)
const ValueWorks6 as Integer = if(new A().X = 0, 23, 42)
const ValueWorks7 as Integer = if(new A(), nothing).X
const ValueWorks8 as Integer = if(23 = 42, 23, new A().X)
const ValueWorks9 as Integer = if(23 = 42, new A().X, 42)
const ValueWorks10 as Integer = CType("12", Integer).MaxValue ' needs option strict off ...
const ValueWorks11 as Integer = New B(Sub() Exit Sub).X
const ValueWorks12 as Integer = New D(Function() 23).X
const ValueDoesntWork1 as Integer = f()
Dim makeThemUsed as long = f1 + f3 + f4 + f5 + f8 + f13 + f14 + f15 + f16 +
ValueWorks1 + ValueWorks2 + ValueWorks3 + ValueWorks4 +
ValueWorks5 + ValueWorks6 + ValueWorks7 + ValueWorks8 + ValueWorks9 +
ValueWorks10 + ValueWorks11 + ValueWorks12
End Sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
const f2 as SubDel = AddressOf C1.foo
~~~~~~
BC30059: Constant expression is required.
const f3 as integer = C1.f()
~~~~~~
BC30438: Constants must have a value.
const f4,f5 as integer = C1.f()
~~
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
const f4,f5 as integer = C1.f()
~~~~~~~~~~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
const f4,f5 as integer = C1.f()
~~~~~~
BC30059: Constant expression is required.
const f6 as object = new C1()
~~~~~~~~
BC30059: Constant expression is required.
const f7 = new C1()
~~~~~~~~
BC30059: Constant expression is required.
const f8 as integer = Asc(chrW(255)) ' > 127 are not const
~~~~~~~~~~~~~~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
const f9() as integer = new integer() {1, 2}
~~~~
BC30059: Constant expression is required.
const f10 = new integer() {1, 2}
~~~~~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
const f11 = GetType(Integer)
~~~~~~~~~~~~~~~~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
const f12 as system.type = GetType(Integer)
~~~~~~~~~~~
BC30060: Conversion from 'String' to 'Byte' cannot occur in a constant expression.
const f13 as integer = cint(cint(cbyte("1")))
~~~
BC30060: Conversion from 'String' to 'Byte' cannot occur in a constant expression.
const f15 as long = clng(cint(cbyte("1")))
~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks1 as Integer = new C(23).X
~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks2 as Integer = new A().X
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks3 as Integer = 23 + new A().X
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks6 as Integer = if(new A().X = 0, 23, 42)
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks7 as Integer = if(new A(), nothing).X
~~~~~~~~~~~~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks8 as Integer = if(23 = 42, 23, new A().X)
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks9 as Integer = if(23 = 42, new A().X, 42)
~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks10 as Integer = CType("12", Integer).MaxValue ' needs option strict off ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks11 as Integer = New B(Sub() Exit Sub).X
~~~~~~~~~~~~~~~~~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
const ValueWorks12 as Integer = New D(Function() 23).X
~~~~~~~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
const ValueDoesntWork1 as Integer = f()
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_3()
Dim source =
<compilation>
<file name="a.vb">
Option strict on
Option Infer On
imports system
Class C1
Public Delegate Sub SubDel(p as integer)
Public Shared Sub foo(p as Integer)
Console.WriteLine("DelegateField works :) " + p.ToString())
End Sub
public shared function f() as integer
return 23
end function
public shared function g(p as integer) as integer
return 23
end function
' should not work
Public const f2 = AddressOf C1.foo
Public const f3 as object = AddressOf C1.foo
public const f4 as integer = 1 + 2 + 3 + f()
public const f5 as boolean = not (f() = 23)
public const f6 as integer = f() + f() + f()
public const f7 as integer = g(1 + 2 + f())
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30059: Constant expression is required.
Public const f2 = AddressOf C1.foo
~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
Public const f3 as object = AddressOf C1.foo
~~~~~~~~~~~~~~~~
BC30059: Constant expression is required.
public const f4 as integer = 1 + 2 + 3 + f()
~~~
BC30059: Constant expression is required.
public const f5 as boolean = not (f() = 23)
~~~
BC30059: Constant expression is required.
public const f6 as integer = f() + f() + f()
~~~
BC30059: Constant expression is required.
public const f6 as integer = f() + f() + f()
~~~
BC30059: Constant expression is required.
public const f6 as integer = f() + f() + f()
~~~
BC30059: Constant expression is required.
public const f7 as integer = g(1 + 2 + f())
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact>
Public Sub TestArrayLocalConst()
Dim source =
<compilation>
<file name="a.vb">
Imports System
Module C
Sub Main()
Const A As Integer() = Nothing
Console.Write(A)
End Sub
End Module
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
Const A As Integer() = Nothing
~
</expected>)
End Sub
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_Attr()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ERR_RequiredConstExpr_Attr">
<file name="at30059.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
Inherits Attribute
Public Sub New(p As ULong)
End Sub
End Class
<My(Foo.FG)>
Public Class Foo
Public Shared FG As ULong = 12345
Public Function F() As Byte
Dim x As Byte = 1
Return x
End Function
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_RequiredConstExpr, "Foo.FG"))
End Sub
<WorkItem(542967, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542967")>
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_QueryInAttr()
CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ERR_RequiredConstExpr_Attr">
<file name="at30059.vb"><![CDATA[
Imports System
Imports System.Linq
Class Program
Const q As String = ""
Sub Main(args As String())
End Sub
<My((From x In q Select x).Count())>
Shared Sub sum()
End Sub
End Class
Class MyAttribute
Inherits Attribute
Sub New(s As Integer)
End Sub
End Class
]]></file>
</compilation>, references:={Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_RequiredConstExpr, "(From x In q Select x).Count()"))
End Sub
<WorkItem(542967, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542967")>
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_QueryInAttr_2()
CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ERR_RequiredConstExpr_Attr">
<file name="at30059.vb"><![CDATA[
Imports System
Imports System.Linq
Class Program
Const q As String = ""
Sub Main(args As String())
End Sub
Public F1 As Object
<My((From x In q Select F1).Count())>
Shared Sub sum()
End Sub
End Class
Class MyAttribute
Inherits Attribute
Sub New(s As Integer)
End Sub
End Class
]]></file>
</compilation>, references:={Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadInstanceMemberAccess, "F1"))
End Sub
<WorkItem(542967, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542967")>
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_QueryInAttr_3()
CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ERR_RequiredConstExpr_Attr">
<file name="at30059.vb"><![CDATA[
Imports System
Imports System.Linq
<My((From x In "s" Select x).Count())>
Class Program
Public F1 As Integer
End Class
<My((From x In "s" Select Program.F1).Count())>
Class Program2
End Class
Class MyAttribute
Inherits Attribute
Sub New(s As Integer)
End Sub
End Class
]]></file>
</compilation>, references:={Net40.References.SystemCore}).VerifyDiagnostics({Diagnostic(ERRID.ERR_RequiredConstExpr, "(From x In ""s"" Select x).Count()"),
Diagnostic(ERRID.ERR_ObjectReferenceNotSupplied, "Program.F1")})
End Sub
<Fact()>
Public Sub BC30059ERR_RequiredConstExpr_XmlEmbeddedExpression()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Module M
Private Const F1 = Nothing
Private Const F2 As String = "v2"
Private Const F3 = <%= Nothing %>
Private Const F4 = <%= "v4" %>
Private Const F5 As String = <%= "v5" %>
Private F6 As Object = <x a0=<%= "v0" %> a1=<%= F1 %> a2=<%= F2 %> a3=<%= F3 %> a4=<%= F4 %> a5=<%= F5 %>/>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30059: Constant expression is required.
Private Const F3 = <%= Nothing %>
~~~~~~~~~~~~~~
BC31172: An embedded expression cannot be used here.
Private Const F3 = <%= Nothing %>
~~~~~~~~~~~~~~
BC30059: Constant expression is required.
Private Const F4 = <%= "v4" %>
~~~~~~~~~~~
BC31172: An embedded expression cannot be used here.
Private Const F4 = <%= "v4" %>
~~~~~~~~~~~
BC30059: Constant expression is required.
Private Const F5 As String = <%= "v5" %>
~~~~~~~~~~~
BC31172: An embedded expression cannot be used here.
Private Const F5 As String = <%= "v5" %>
~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC30060ERR_RequiredConstConversion2()
Dim source =
<compilation>
<file name="a.vb">
Option strict on
imports system
Class C1
' should show issues
public const f1 as integer = CInt("23")
public const f2 as integer = CType("23", integer)
public const f3 as byte = CType(300, byte)
public const f4 as byte = CType(300, BORG)
public const f5 as byte = 300
public const f6 as string = 23
public const f10 as date = CDate("November 04, 2008")
public const f13 as decimal = Ctype("20100607",decimal)
' should not show issues
public const f7 as integer = CInt(23)
public const f8 as integer = CType(23, integer)
public const f9 as byte = CType(254, byte)
public const f11 as date = Ctype(#06/07/2010#,date)
public const f12 as decimal = Ctype(20100607,decimal)
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30060: Conversion from 'String' to 'Integer' cannot occur in a constant expression.
public const f1 as integer = CInt("23")
~~~~
BC30060: Conversion from 'String' to 'Integer' cannot occur in a constant expression.
public const f2 as integer = CType("23", integer)
~~~~
BC30439: Constant expression not representable in type 'Byte'.
public const f3 as byte = CType(300, byte)
~~~
BC30002: Type 'BORG' is not defined.
public const f4 as byte = CType(300, BORG)
~~~~
BC30439: Constant expression not representable in type 'Byte'.
public const f5 as byte = 300
~~~
BC30512: Option Strict On disallows implicit conversions from 'Integer' to 'String'.
public const f6 as string = 23
~~
BC30060: Conversion from 'String' to 'Date' cannot occur in a constant expression.
public const f10 as date = CDate("November 04, 2008")
~~~~~~~~~~~~~~~~~~~
BC30060: Conversion from 'String' to 'Decimal' cannot occur in a constant expression.
public const f13 as decimal = Ctype("20100607",decimal)
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30060ERR_RequiredConstConversion2_StrictOff()
Dim source =
<compilation>
<file name="a.vb">
Option strict off
imports system
Class C1
public const f6 as string = 23
public const f7 as string = CType(23,string)
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30060: Conversion from 'Integer' to 'String' cannot occur in a constant expression.
public const f6 as string = 23
~~
BC30060: Conversion from 'Integer' to 'String' cannot occur in a constant expression.
public const f7 as string = CType(23,string)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30064ERR_ReadOnlyAssignment()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ReadOnlyAssignment">
<file name="a.vb">
Imports System
Module M1
Class ReferenceType
Implements IDisposable
Dim dummy As Integer
Public Sub Dispose() Implements System.IDisposable.Dispose
End Sub
End Class
Class TestClass
ReadOnly Name As String = "Cici"
Sub test()
Name = "string"
' variables declared in a using statement are considered read only as well
Using a As New ReferenceType(), b As New ReferenceType()
a = New ReferenceType()
b = New ReferenceType()
End Using
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30064: 'ReadOnly' variable cannot be the target of an assignment.
Name = "string"
~~~~
BC30064: 'ReadOnly' variable cannot be the target of an assignment.
a = New ReferenceType()
~
BC30064: 'ReadOnly' variable cannot be the target of an assignment.
b = New ReferenceType()
~
</expected>)
End Sub
<Fact()>
Public Sub BC30065ERR_ExitSubOfFunc_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ExitSubOfFunc">
<file name="a.vb">
Public Class C1
Function FOO()
If (True)
Exit Sub
End If
Return Nothing
End Function
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30065: 'Exit Sub' is not valid in a Function or Property.
Exit Sub
~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30067ERR_ExitFuncOfSub_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ExitFuncOfSub">
<file name="a.vb">
Public Class C1
Sub FOO()
If (True)
lb1: Exit Function
End If
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30067: 'Exit Function' is not valid in a Sub or Property.
lb1: Exit Function
~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30068ERR_LValueRequired()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LValueRequired">
<file name="a.vb">
Module M1
Class TestClass
ReadOnly Name As String = "Cici"
Sub test()
Dim obj As Cls1
obj.Test = 1
obj.Test() = 1
End Sub
End Class
Class Cls1
Public Overridable Sub Test()
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42104: Variable 'obj' is used before it has been assigned a value. A null reference exception could result at runtime.
obj.Test = 1
~~~
BC30068: Expression is a value and therefore cannot be the target of an assignment.
obj.Test = 1
~~~~~~~~
BC30068: Expression is a value and therefore cannot be the target of an assignment.
obj.Test() = 1
~~~~~~~~~~
</expected>)
End Sub
<WorkItem(575055, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/575055")>
<Fact>
Public Sub BC30068ERR_IdentifierWithSameNameDifferentScope()
Dim source = <compilation>
<file name="DuplicateID.vb"><![CDATA[
Module Module1
Dim list2 As Integer() = {1}
Dim ddd = From i In list2 Where i > Foo(Function(m1) If(True, Sub(m2) Call Function(m3)
Return Sub() If True Then For Each i In list2 : m1 = i : Exit Sub : Exit For : Next
End Function(m2), Sub(m2) Call Function(m3)
Return Sub() If True Then For Each i In list2 : m1 = i : Exit Sub : Exit For : Next
End Function(m2)))
Sub Main()
End Sub
Function Foo(ByVal x)
Return x.Invoke(1)
End Function
End Module
]]></file></compilation>
CreateCompilationWithMscorlib40AndVBRuntime(source).VerifyDiagnostics(Diagnostic(ERRID.ERR_ExpectedQueryableSource, "list2").WithArguments("Integer()"),
Diagnostic(ERRID.ERR_LValueRequired, "i"),
Diagnostic(ERRID.ERR_LValueRequired, "i"))
End Sub
' change error 30098 to 30068
<WorkItem(538107, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538107")>
<Fact()>
Public Sub BC30068ERR_LValueRequired_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ReadOnlyProperty1">
<file name="a.vb">
Module SB008mod
Public ReadOnly Name As String
Public ReadOnly Name1 As Struct1
Public ReadOnly Name2 As Class1
Sub SB008()
Name = "15"
Name1.Field = "15"
Name2.Field = "15"
System.TypeCode.Boolean=0
A().Field="15"
End Sub
Function A() As Struct1
Return Nothing
End Function
End Module
Structure Struct1
Public Field As String
End Structure
Class Class1
Public Field As String
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30064: 'ReadOnly' variable cannot be the target of an assignment.
Name = "15"
~~~~
BC30064: 'ReadOnly' variable cannot be the target of an assignment.
Name1.Field = "15"
~~~~~~~~~~~
BC30074: Constant cannot be the target of an assignment.
System.TypeCode.Boolean=0
~~~~~~~~~~~~~~~~~~~~~~~
BC30068: Expression is a value and therefore cannot be the target of an assignment.
A().Field="15"
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30068ERR_LValueRequired_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="LValueRequired">
<file name="a.vb">
Class A
Property P
Shared Property Q
End Class
Structure B
Property P
Shared Property Q
End Structure
Class C
Property P As A
Property Q As B
Sub M()
P.P = Nothing ' no error
Q.P = Nothing ' BC30068
A.Q = Nothing ' no error
B.Q = Nothing ' no error
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30068: Expression is a value and therefore cannot be the target of an assignment.
Q.P = Nothing ' BC30068
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30069ERR_ForIndexInUse1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ForIndexInUse1">
<file name="a.vb">
Module A
Sub TEST()
Dim n(3) As Integer
Dim u As Integer
For u = n(0) To n(3) Step n(0)
' BC30069: For loop control variable 'u' already in use by an enclosing For loop.
For u = 1 To 9
Next
Next
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30069: For loop control variable 'u' already in use by an enclosing For loop.
For u = 1 To 9
~
</expected>)
End Sub
<Fact()>
Public Sub BC30070ERR_NextForMismatch1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NextForMismatch1">
<file name="a.vb">
Module A
Sub TEST()
Dim n(3) As Integer
Dim u As Integer
Dim k As Integer
For u = n(0) To n(3) Step n(0)
For k = 1 To 9
Next u
Next k
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30070: Next control variable does not match For loop control variable 'k'.
Next u
~
BC30070: Next control variable does not match For loop control variable 'u'.
Next k
~
</expected>)
End Sub
<Fact()>
Public Sub BC30070ERR_NextForMismatch1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NextForMismatch1">
<file name="a.vb">
Class C
Public Shared Sub Main()
Dim S As String = "ABC"
Dim T As String = "XYZ"
For Each x As Char In S
For Each y As Char In T
Next y, x
For Each x As Char In S
For Each y As Char In T
Next x, y
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30070: Next control variable does not match For loop control variable 'y'.
Next x, y
~
BC30451: 'y' is not declared. It may be inaccessible due to its protection level.
Next x, y
~
</expected>)
End Sub
<Fact()>
Public Sub BC30074ERR_CantAssignToConst()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantAssignToConst">
<file name="a.vb">
Class c1_0
Public foo As Byte
End Class
Class c2_1
Inherits c1_0
Public Shadows Const foo As Short = 15
Sub test()
'COMPILEERROR: BC30074, "foo"
foo = 1
End Sub
End Class
Class c3_1
Inherits c1_0
Public Shadows Const foo As Short = 15
End Class
Class c2_2
Sub test()
Dim obj As c3_1
obj.foo = 10
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30074: Constant cannot be the target of an assignment.
foo = 1
~~~
BC30074: Constant cannot be the target of an assignment.
obj.foo = 10
~~~~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
obj.foo = 10
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30075ERR_NamedSubscript()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NamedSubscript">
<file name="a.vb">
Class c1
Sub test()
Dim Array As Integer() = new integer(){1}
Array(Index:=10) = 1
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30075: Named arguments are not valid as array subscripts.
Array(Index:=10) = 1
~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30089ERR_ExitDoNotWithinDo()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ERR_ExitDoNotWithinDo">
<file name="a.vb">
Structure myStruct1
Public Sub m(ByVal s As String)
Select Case s
Case "userID"
Exit do
End Select
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30089: 'Exit Do' can only appear inside a 'Do' statement.
Exit do
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30089ERR_ExitDoNotWithinDo_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ERR_ExitDoNotWithinDo">
<file name="a.vb">
Structure myStruct1
Public Sub m(ByVal s As String)
If s Then
Exit Do
Else
End If
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30089: 'Exit Do' can only appear inside a 'Do' statement.
Exit Do
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30094ERR_MultiplyDefined1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MultiplyDefined1">
<file name="a.vb">
Module M1
Sub Main()
SB008()
End Sub
Sub SB008()
[cc]:
'COMPILEERROR: BC30094, "cc"
cc:
Exit Sub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30094: Label 'cc' is already defined in the current method.
cc:
~~
</expected>)
End Sub
<Fact()>
Public Sub Bug585223_notMultiplyDefined()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MultiplyDefined1">
<file name="a.vb">
<![CDATA[
Module Program
Sub Main()
&H100000000:
&H000000000:
End Sub
End Module
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
</expected>)
End Sub
<Fact()>
Public Sub Bug585223_notMultiplyDefined_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MultiplyDefined1">
<file name="a.vb">
<![CDATA[
Module Program
Sub Main()
&HF:
&HFF:
&HFFF:
&HFFFF:
&HFFFFF:
&HFFFFFF:
&HFFFFFFF:
&HFFFFFFFF:
&HFFFFFFFFF:
&HFFFFFFFFFF:
&HFFFFFFFFFFF:
&HFFFFFFFFFFFF:
&HFFFFFFFFFFFFF:
&HFFFFFFFFFFFFFF:
&HFFFFFFFFFFFFFFF:
&HFFFFFFFFFFFFFFFF:
End Sub
End Module
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
</expected>)
End Sub
<Fact()>
Public Sub BC30096ERR_ExitForNotWithinFor()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ExitForNotWithinFor">
<file name="a.vb">
Structure myStruct1
Public Sub m(ByVal s As String)
Select Case s
Case "userID"
Exit For
End Select
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30096: 'Exit For' can only appear inside a 'For' statement.
Exit For
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30096ERR_ExitForNotWithinFor_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ExitForNotWithinFor">
<file name="a.vb">
Structure myStruct1
Public Sub m(ByVal s As String)
If s Then
Exit For
Else
End If
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30096: 'Exit For' can only appear inside a 'For' statement.
Exit For
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30097ERR_ExitWhileNotWithinWhile()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ExitWhileNotWithinWhile">
<file name="a.vb">
Structure myStruct1
Public Sub m(ByVal s As String)
Select Case s
Case "userID"
Exit While
End Select
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30097: 'Exit While' can only appear inside a 'While' statement.
Exit While
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30097ERR_ExitWhileNotWithinWhile_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ExitWhileNotWithinWhile">
<file name="a.vb">
Structure myStruct1
Public Sub m(ByVal s As String)
If s Then
Exit While
Else
End If
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30097: 'Exit While' can only appear inside a 'While' statement.
Exit While
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30099ERR_ExitSelectNotWithinSelect()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ExitSelectNotWithinSelect">
<file name="a.vb">
Structure myStruct1
Public Sub m(ByVal s As String)
If s Then
Exit Select
Else
End If
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30099: 'Exit Select' can only appear inside a 'Select' statement.
Exit Select
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30101ERR_BranchOutOfFinally()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BranchOutOfFinally">
<file name="a.vb">
Imports System
Module M1
Sub Foo()
Try
Try
Label1:
Catch
Finally
GoTo Label1
End Try
Catch
Finally
End Try
Exit Sub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30101: Branching out of a 'Finally' is not valid.
GoTo Label1
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30101ERR_BranchOutOfFinally2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30101ERR_BranchOutOfFinally2">
<file name="a.vb">
Imports System
Module M1
Sub Foo()
Try
Try
Catch
Finally
Label2:
GoTo Label2
End Try
Catch
Finally
End Try
Exit Sub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <expected></expected>)
End Sub
<Fact()>
Public Sub BC30101ERR_BranchOutOfFinally3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30101ERR_BranchOutOfFinally3">
<file name="a.vb">
Imports System
Module M1
Sub Foo()
Try
Catch
Finally
Label2:
GoTo Label2
End Try
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <expected></expected>)
End Sub
<Fact()>
Public Sub BC30101ERR_BranchOutOfFinally4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30101ERR_BranchOutOfFinally4">
<file name="a.vb">
Imports System
Module M1
Sub Foo()
Try
Catch
Finally
GoTo L2
L2:
GoTo L2
End Try
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <expected></expected>)
End Sub
<Fact()>
Public Sub BC30103ERR_QualNotObjectRecord1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Enum E
A
End Enum
Class C
Shared Sub M(Of T)()
Dim [object] As Object = Nothing
M([object]!P)
Dim [enum] As E = E.A
M([enum]!P)
Dim [boolean] As Boolean = False
M([boolean]!P)
Dim [char] As Char = Nothing
M([char]!P)
Dim [sbyte] As SByte = Nothing
M([sbyte]!P)
Dim [byte] As Byte = Nothing
M([byte]!P)
Dim [int16] As Int16 = Nothing
M([int16]!P)
Dim [uint16] As UInt16 = Nothing
M([uint16]!P)
Dim [int32] As Int32 = Nothing
M([int32]!P)
Dim [uint32] As UInt32 = Nothing
M([uint32]!P)
Dim [int64] As Int64 = Nothing
M([int64]!P)
Dim [uint64] As UInt64 = Nothing
M([uint64]!P)
Dim [decimal] As Decimal = Nothing
M([decimal]!P)
Dim [single] As Single = Nothing
M([single]!P)
Dim [double] As Double = Nothing
M([double]!P)
Dim [type] As Type = Nothing
M([type]!P)
Dim [array] As Integer() = Nothing
M([array]!P)
Dim [nullable] As Nullable(Of Integer) = Nothing
M([nullable]!P)
Dim [datetime] As DateTime = Nothing
M([datetime]!P)
Dim [action] As Action = Nothing
M([action]!P)
Dim tp As T = Nothing
M(tp!P)
End Sub
Shared Sub M(o)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'E'.
M([enum]!P)
~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Boolean'.
M([boolean]!P)
~~~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Char'.
M([char]!P)
~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'SByte'.
M([sbyte]!P)
~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Byte'.
M([byte]!P)
~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Short'.
M([int16]!P)
~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'UShort'.
M([uint16]!P)
~~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Integer'.
M([int32]!P)
~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'UInteger'.
M([uint32]!P)
~~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Long'.
M([int64]!P)
~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'ULong'.
M([uint64]!P)
~~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Decimal'.
M([decimal]!P)
~~~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Single'.
M([single]!P)
~~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Double'.
M([double]!P)
~~~~~~~~
BC30367: Class 'Type' cannot be indexed because it has no default property.
M([type]!P)
~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Integer()'.
M([array]!P)
~~~~~~~
BC30690: Structure 'Integer?' cannot be indexed because it has no default property.
M([nullable]!P)
~~~~~~~~~~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Date'.
M([datetime]!P)
~~~~~~~~~~
BC30555: Default member of 'Action' is not a property.
M([action]!P)
~~~~~~~~
BC30547: 'T' cannot be indexed because it has no default property.
M(tp!P)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30103ERR_QualNotObjectRecord1a()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Enum E
A
End Enum
Class C
Shared Sub M(Of T)()
Dim [string] As String = Nothing
M([string]!P)
End Sub
Shared Sub M(o)
End Sub
End Class
</file>
</compilation>)
compilation.VerifyEmitDiagnostics(
Diagnostic(ERRID.ERR_MissingRuntimeHelper, "P").WithArguments("Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger"))
End Sub
<Fact()>
Public Sub BC30103ERR_QualNotObjectRecord2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="QualNotObjectRecord1">
<file name="a.vb">
Imports System
Module BitOp001mod
Sub BitOp001()
Dim b As Byte = 2
Dim c As Byte = 3
Dim s As Short = 2
Dim t As Short = 3
Dim i As Integer = 2
Dim j As Integer = 3
Dim l As Long = 2
Dim m As Long = 3
b = b!c
s = s!t
i = i!j
l = l!m
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Byte'.
b = b!c
~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Short'.
s = s!t
~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Integer'.
i = i!j
~
BC30103: '!' requires its left operand to have a type parameter, class or interface type, but this operand has the type 'Long'.
l = l!m
~
</expected>)
End Sub
<Fact()>
Public Sub BC30105ERR_TooFewIndices()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TooFewIndices">
<file name="a.vb">
Imports System
Module M1
Sub AryChg001()
Dim a() As Integer = New Integer() {9, 10}
ReDim a(10)
Dim a8() As Integer = New Integer() {1, 2}
Dim b8() As Integer = New Integer() {3, 4}
Dim c8 As Integer
a8() = b8
b8 = a()
a8() = c8
c8 = a8()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30105: Number of indices is less than the number of dimensions of the indexed array.
a8() = b8
~~
BC30105: Number of indices is less than the number of dimensions of the indexed array.
b8 = a()
~~
BC30105: Number of indices is less than the number of dimensions of the indexed array.
a8() = c8
~~
BC30105: Number of indices is less than the number of dimensions of the indexed array.
c8 = a8()
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30106ERR_TooManyIndices()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TooManyIndices">
<file name="a.vb">
Imports System
Module M1
Sub AryChg001()
Dim a() As Integer = New Integer() {9, 10}
ReDim a(10)
Dim a8() As Integer = New Integer() {1, 2}
Dim b8() As Integer = New Integer() {3, 4}
Dim c8 As Integer
a8(1, 2) = b8(1)
b8 = a(0, 4)
a8(4, 5, 6) = c8
c8 = a8(1, 2)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30106: Number of indices exceeds the number of dimensions of the indexed array.
a8(1, 2) = b8(1)
~~~~~~
BC30106: Number of indices exceeds the number of dimensions of the indexed array.
b8 = a(0, 4)
~~~~~~
BC30106: Number of indices exceeds the number of dimensions of the indexed array.
a8(4, 5, 6) = c8
~~~~~~~~~
BC30106: Number of indices exceeds the number of dimensions of the indexed array.
c8 = a8(1, 2)
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30107ERR_EnumNotExpression1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EnumNotExpression1">
<file name="a.vb">
Option Strict On
Module BitOp001mod1
Sub BitOp001()
Dim b As Byte = 2
Dim c As Byte = 3
Dim s As Short = 2
Dim t As Short = 3
Dim i As Integer = 2
Dim j As Integer = 3
Dim l As Long = 2
Dim m As Long = 3
b = b & c
b = b ^ c
s = s & t
s = s ^ t
i = i & j
i = i ^ j
l = l & m
l = l ^ m
Exit Sub
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "b & c").WithArguments("String", "Byte"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "b ^ c").WithArguments("Double", "Byte"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "s & t").WithArguments("String", "Short"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "s ^ t").WithArguments("Double", "Short"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "i & j").WithArguments("String", "Integer"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "i ^ j").WithArguments("Double", "Integer"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "l & m").WithArguments("String", "Long"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "l ^ m").WithArguments("Double", "Long"))
End Sub
<Fact()>
Public Sub BC30108ERR_TypeNotExpression1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeNotExpression1">
<file name="a.vb">
Module Module1
Sub Main()
Module1
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30108: 'Module1' is a type and cannot be used as an expression.
Module1
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30108ERR_TypeNotExpression1_1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeNotExpression1">
<file name="a.vb">
Imports System.Collections.Generic
Module Program
Sub Main()
Dim lst As New List(Of String) From {Program, "abc", "def", "ghi"}
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_TypeNotExpression1, "Program").WithArguments("Program"))
End Sub
<WorkItem(545166, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545166")>
<Fact()>
Public Sub BC30109ERR_ClassNotExpression1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ClassNotExpression1">
<file name="a.vb">
Imports System
Module M1
Sub FOO()
Dim c As Object
c = String(3, "Hai123")
c = String
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30109: 'String' is a class type and cannot be used as an expression.
c = String(3, "Hai123")
~~~~~~
BC30109: 'String' is a class type and cannot be used as an expression.
c = String
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30110ERR_StructureNotExpression1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="StructureNotExpression1">
<file name="a.vb">
Imports System
Structure S1
End Structure
Module M1
Sub FOO()
Dim c As Object
c = S1(3, "Hai123")
c = S1
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30110: 'S1' is a structure type and cannot be used as an expression.
c = S1(3, "Hai123")
~~
BC30110: 'S1' is a structure type and cannot be used as an expression.
c = S1
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30111ERR_InterfaceNotExpression1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="StructureNotExpression1">
<file name="a.vb">
Imports System
Interface S1
End Interface
Module M1
Sub FOO()
Dim c As Object
c = S1(3, "Hai123")
c = S1
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30111: 'S1' is an interface type and cannot be used as an expression.
c = S1(3, "Hai123")
~~
BC30111: 'S1' is an interface type and cannot be used as an expression.
c = S1
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30112ERR_NamespaceNotExpression1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NamespaceNotExpression1">
<file name="a.vb">
Imports System
Module M1
Sub Foo()
'COMPILEERROR: BC30112, "Text$"
Text$
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30112: 'System.Text' is a namespace and cannot be used as an expression.
Text$
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30112ERR_NamespaceNotExpression2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NamespaceNotExpression1">
<file name="a.vb">
Option Infer On
Namespace X
Class Program
Sub Main()
'COMPILEERROR: BC30112, "x"
For Each x In ""
Next
End Sub
End Class
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30112: 'X' is a namespace and cannot be used as an expression.
For Each x In ""
~
</expected>)
End Sub
<Fact()>
Public Sub BC30114ERR_XmlPrefixNotExpression()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"<xmlns:p1=""..."">"}))
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Imports System
Imports <xmlns:p2="...">
Imports <xmlns:p4="...">
Module M
Private F1 As Object = p1
Private F2 As Object = P1
Private F3 As Object = xml
Private F4 As Object = XML
Private F5 As Object = xmlns
Private F6 As Object = XMLNS
Private F7 As Object = <x xmlns:p3="...">
<%= p2 %>
<%= p3 %>
<%= xmlns %>
</x>
Private Function F8(p1 As Object) As Object
Return p1
End Function
Private Function F9(xmlns As Object) As Object
Return p2
End Function
Private F10 As Object = p4
End Module
]]></file>
<file name="b.vb"><![CDATA[
Class p4
End Class
]]></file>
</compilation>, references:=XmlReferences, options:=options)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30114: 'p1' is an XML prefix and cannot be used as an expression. Use the GetXmlNamespace operator to create a namespace object.
Private F1 As Object = p1
~~
BC30451: 'P1' is not declared. It may be inaccessible due to its protection level.
Private F2 As Object = P1
~~
BC30112: 'System.Xml' is a namespace and cannot be used as an expression.
Private F3 As Object = xml
~~~
BC30112: 'System.Xml' is a namespace and cannot be used as an expression.
Private F4 As Object = XML
~~~
BC30114: 'xmlns' is an XML prefix and cannot be used as an expression. Use the GetXmlNamespace operator to create a namespace object.
Private F5 As Object = xmlns
~~~~~
BC30451: 'XMLNS' is not declared. It may be inaccessible due to its protection level.
Private F6 As Object = XMLNS
~~~~~
BC30114: 'p2' is an XML prefix and cannot be used as an expression. Use the GetXmlNamespace operator to create a namespace object.
<%= p2 %>
~~
BC30451: 'p3' is not declared. It may be inaccessible due to its protection level.
<%= p3 %>
~~
BC30114: 'xmlns' is an XML prefix and cannot be used as an expression. Use the GetXmlNamespace operator to create a namespace object.
<%= xmlns %>
~~~~~
BC30114: 'p2' is an XML prefix and cannot be used as an expression. Use the GetXmlNamespace operator to create a namespace object.
Return p2
~~
BC30109: 'p4' is a class type and cannot be used as an expression.
Private F10 As Object = p4
~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC30131ERR_ModuleSecurityAttributeNotAllowed1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30131ERR_ModuleSecurityAttributeNotAllowed1">
<file name="a.vb">
<![CDATA[
Imports System
Imports System.Security.Permissions
Imports System.Security.Principal
<Module: MySecurity(Security.Permissions.SecurityAction.Assert)>
<AttributeUsage(AttributeTargets.Module)>
Class MySecurityAttribute
Inherits SecurityAttribute
Public Sub New(action As SecurityAction)
MyBase.New(action)
End Sub
Public Overrides Function CreatePermission() As Security.IPermission
Return Nothing
End Function
End Class
Module Foo
Public Sub main()
End Sub
End Module
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC36979: Security attribute 'MySecurityAttribute' is not valid on this declaration type. Security attributes are only valid on assembly, type and method declarations.
<Module: MySecurity(Security.Permissions.SecurityAction.Assert)>
~~~~~~~~~~
]]>
</expected>)
End Sub
<Fact()>
Public Sub BC30132ERR_LabelNotDefined1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LabelNotDefined1">
<file name="a.vb">
Module Implicitmod
Sub Implicit()
'COMPILEERROR: BC30132, "ns1"
GoTo ns1
End Sub
Sub Test()
ns1:
End Sub
End Module
Namespace NS2
Module Implicitmod
Sub Implicit()
ns1:
End Sub
End Module
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30132: Label 'ns1' is not defined.
GoTo ns1
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30148ERR_RequiredNewCall2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RequiredNewCall2">
<file name="a.vb">
Imports System
Module Test
Class clsTest0
Sub New(ByVal strTest As String)
End Sub
End Class
Class clsTest1
Inherits clsTest0
Private strTest As String = "Hello"
Sub New(ByVal ArgX As String)
'COMPILEERROR: BC30148, "Console.WriteLine(ArgX)"
Console.WriteLine(ArgX)
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30148: First statement of this 'Sub New' must be a call to 'MyBase.New' or 'MyClass.New' because base class 'Test.clsTest0' of 'Test.clsTest1' does not have an accessible 'Sub New' that can be called with no arguments.
Sub New(ByVal ArgX As String)
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30157ERR_BadWithRef()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module M1
Sub Main()
.xxx = 3
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30157: Leading '.' or '!' can only appear inside a 'With' statement.
.xxx = 3
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30157ERR_BadWithRef_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Default Property P(x As String)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Sub M()
!A = Me!B
Me!A = !B
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30157: Leading '.' or '!' can only appear inside a 'With' statement.
!A = Me!B
~~
BC30157: Leading '.' or '!' can only appear inside a 'With' statement.
Me!A = !B
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30157ERR_BadWithRef_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Module M
Sub M()
Dim o As Object
o = .<x>
o = ...<x>
.@a = .@<a>
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30157: Leading '.' or '!' can only appear inside a 'With' statement.
o = .<x>
~~~~
BC30157: Leading '.' or '!' can only appear inside a 'With' statement.
o = ...<x>
~~~~~~
BC30157: Leading '.' or '!' can only appear inside a 'With' statement.
.@a = .@<a>
~~~
BC30157: Leading '.' or '!' can only appear inside a 'With' statement.
.@a = .@<a>
~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC30182_ERR_UnrecognizedType_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnrecognizedType">
<file name="a.vb">
Namespace NS
Class C1
Sub FOO()
Dim v = 1
Dim s = CType(v, NS)
End Sub
End Class
End Namespace
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30182: Type expected.
Dim s = CType(v, NS)
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30203ERR_ExpectedIdentifier()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30203ERR_ExpectedIdentifier">
<file name="a.vb">
Option Strict On
Class C1
Public Property
Public Property _ as Integer
Shared Public
End Class
</file>
</compilation>)
Dim expectedErrors1 =
<errors>
BC30203: Identifier expected.
Public Property
~
BC30301: 'Public Property As Object' and 'Public Property As Integer' cannot overload each other because they differ only by return types.
Public Property
~
BC30203: Identifier expected.
Public Property _ as Integer
~
BC30203: Identifier expected.
Shared Public
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30209ERR_StrictDisallowImplicitObject()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowImplicitObject">
<file name="a.vb">
Option Strict On
Structure myStruct
Dim s
End Structure
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Dim s
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30209ERR_StrictDisallowImplicitObject_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowImplicitObject">
<file name="a.vb">
Option Strict On
Structure myStruct
Sub Scen1()
'COMPILEERROR: BC30209, "i"
Dim i
End Sub
End Structure
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Dim i
~
BC42024: Unused local variable: 'i'.
Dim i
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(528749, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528749")>
Public Sub BC30209ERR_StrictDisallowImplicitObject_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowImplicitObject">
<file name="a.vb">
Option strict on
option infer off
imports system
Class C1
Public Const f1 = "foo"
Public Const f2 As Object = "foo"
Public Const f3 = 23
Public Const f4 As Object = 42
Public Shared Sub Main(args() As String)
console.writeline(f1)
console.writeline(f2)
console.writeline(f3)
console.writeline(f4)
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Public Const f1 = "foo"
~~
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Public Const f3 = 23
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30239ERR_ExpectedRelational_SelectCase()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="StrictDisallowImplicitObject">
<file name="a.vb">
<file name="a.vb"><![CDATA[
Imports System
Module M1
Sub Main()
Select Case 0
Case Is << 1
End Select
End Sub
End Module
]]></file>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30239: Relational operator expected.
Case Is << 1
~
]]></expected>)
End Sub
<Fact()>
Public Sub BC30272ERR_NamedParamNotFound2()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NamedParamNotFound2">
<file name="a.vb">
Module Module1
Class C0(Of T)
Public whichOne As String
Sub Foo(ByVal t1 As T)
whichOne = "T"
End Sub
End Class
Class C1(Of T, Y)
Inherits C0(Of T)
Overloads Sub Foo(ByVal y1 As Y)
whichOne = "Y"
End Sub
End Class
Sub GenUnif0060()
Dim tc1 As New C1(Of Integer, Integer)
' BC30272: 't1' is not a parameter of 'Public Overloads Sub Foo(y1 As Y)'.
Call tc1.Foo(t1:=1000)
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_NamedParamNotFound2, "t1").WithArguments("t1", "Public Overloads Sub Foo(y1 As Integer)"),
Diagnostic(ERRID.ERR_OmittedArgument2, "Foo").WithArguments("y1", "Public Overloads Sub Foo(y1 As Integer)"))
End Sub
<Fact()>
Public Sub BC30274ERR_NamedArgUsedTwice2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NamedArgUsedTwice2">
<file name="a.vb">
Module Module1
Class C0
Public whichOne As String
Sub Foo(ByVal t1 As String)
whichOne = "T"
End Sub
End Class
Class C1
Inherits C0
Overloads Sub Foo(ByVal y1 As String)
whichOne = "Y"
End Sub
End Class
Sub test()
Dim [ident1] As C0 = New C0()
Dim clsNarg2get As C1 = New C1()
Dim str1 As String = "Visual Basic"
'COMPILEERROR: BC30274, "y"
[ident1].Foo(1, t1:=2) = str1
'COMPILEERROR: BC30274, "x"
[ident1].Foo(t1:=1, t1:=1) = str1
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30274: Parameter 't1' of 'Public Sub Foo(t1 As String)' already has a matching argument.
[ident1].Foo(1, t1:=2) = str1
~~
BC30274: Parameter 't1' of 'Public Sub Foo(t1 As String)' already has a matching argument.
[ident1].Foo(t1:=1, t1:=1) = str1
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30277ERR_TypecharNoMatch2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypecharNoMatch2">
<file name="a.vb">
Imports Microsoft.VisualBasic.Information
Namespace NS30277
Public Class genClass1(Of CT)
Public Function genFun7(Of T)(ByVal x As T) As T()
Dim t1(2) As T
Return t1
End Function
End Class
Module MD30277
Sub GenMethod9102()
Const uiConst As UInteger = 1000
Dim o As New genClass1(Of Object)
Dim objTmp As Object = CShort(10)
' BC30277: type character does not match declared data type.
o.genFun7%(1&)
' BC30277: type character does not match declared data type.
o.genFun7%(True)
' BC30277: type character does not match declared data type.
o.genFun7%((True And False))
' BC30277: type character does not match declared data type.
o.genFun7%(CDbl(1))
' BC30277: type character does not match declared data type.
o.genFun7%(Fun1)
' BC30277: type character does not match declared data type.
o.genFun7%(TypeName(o))
' BC30277: type character does not match declared data type.
o.genFun7%(uiConst)
' BC30277: type character does not match declared data type.
o.genFun7%(objTmp)
End Sub
Function Fun1() As Byte
Return 1
End Function
End Module
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30277: Type character '%' does not match declared data type 'Long'.
o.genFun7%(1&)
~~~~~~~~~~~~~~
BC30277: Type character '%' does not match declared data type 'Boolean'.
o.genFun7%(True)
~~~~~~~~~~~~~~~~
BC30277: Type character '%' does not match declared data type 'Boolean'.
o.genFun7%((True And False))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30277: Type character '%' does not match declared data type 'Double'.
o.genFun7%(CDbl(1))
~~~~~~~~~~~~~~~~~~~
BC30277: Type character '%' does not match declared data type 'Byte'.
o.genFun7%(Fun1)
~~~~~~~~~~~~~~~~
BC30277: Type character '%' does not match declared data type 'String'.
o.genFun7%(TypeName(o))
~~~~~~~~~~~~~~~~~~~~~~~
BC30277: Type character '%' does not match declared data type 'UInteger'.
o.genFun7%(uiConst)
~~~~~~~~~~~~~~~~~~~
BC30277: Type character '%' does not match declared data type 'Object'.
o.genFun7%(objTmp)
~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30277ERR_TypecharNoMatch2_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypecharNoMatch2">
<file name="a.vb">
Class C
Public Shared Sub Main()
'declare with explicit type, use in next with a type char")
For Each x As Integer In New Integer() {1, 1, 1}
'COMPILEERROR: BC30277, "x#"
Next x#
For Each [me] As Integer In New Integer() {1, 1, 1}
Next me%
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30277: Type character '#' does not match declared data type 'Integer'.
Next x#
~~
</expected>)
End Sub
<WorkItem(528681, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528681")>
<Fact()>
Public Sub BC30277ERR_TypecharNoMatch2_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypecharNoMatch2">
<file name="a.vb">
Public Class MyClass1
Public Shared Sub Main()
For ivar% As Long = 1 To 10
Next
For dvar# As Single = 1 To 10
Next
For cvar@ As Decimal = 1 To 10
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
For ivar% As Long = 1 To 10
~~~~~
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
For dvar# As Single = 1 To 10
~~~~~
BC30302: Type character '@' cannot be used in a declaration with an explicit type.
For cvar@ As Decimal = 1 To 10
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30282ERR_InvalidConstructorCall1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidConstructorCall1">
<file name="a.vb">
Module Error30282
Class Class1
Sub New()
End Sub
End Class
Class Class2
Inherits Class1
Sub New()
'COMPILEERROR: BC30282, "Class1.New"
Class1.New()
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Class1.New()
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30282ERR_InvalidConstructorCall2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidConstructorCall2">
<file name="a.vb">
Imports System
Class C
Sub New(x As Integer)
Me.New(Of Integer)
End Sub
Sub New
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Me.New(Of Integer)
~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30282ERR_InvalidConstructorCall3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidConstructorCall3">
<file name="a.vb">
Imports System
Class C
Sub New(x As Integer)
Me.New
Me.New(Of Integer)
End Sub
Sub New
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Me.New(Of Integer)
~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30282ERR_InvalidConstructorCall4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidConstructorCall4">
<file name="a.vb">
Imports System
Class C
Sub New(x As Integer)
Me.New(Of Integer)(1.ToString(123, 2, 3, 4))
End Sub
Sub New
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Me.New(Of Integer)(1.ToString(123, 2, 3, 4))
~~~~~~~~~~~~~~~~~~
BC30516: Overload resolution failed because no accessible 'ToString' accepts this number of arguments.
Me.New(Of Integer)(1.ToString(123, 2, 3, 4))
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30282ERR_InvalidConstructorCall5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidConstructorCall5">
<file name="a.vb">
Imports System
Class C
Sub New(x As Integer)
Dim a = 1 + Me.New(Of Integer)
End Sub
Sub New
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Dim a = 1 + Me.New(Of Integer)
~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_1">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
Me.New()
End Sub
Public Sub New(t As Tests)
t.New(1)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
t.New(1)
~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_2">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
Me.New()
Me.New()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Me.New()
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_3">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
l1:
Me.New()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Me.New()
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_4">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New2()
Me.New()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Me.New()
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_5">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
#Const a = 1
#If a = 1 Then
Me.New()
#End If
Me.New()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Me.New()
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_6">
<file name="a.vb">
Class Tests
Public Sub New()
End Sub
Public Sub New(i As Integer)
Dim a As Integer = 1 + Me.New() + Me.New
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Dim a As Integer = 1 + Me.New() + Me.New
~~~~~~
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Dim a As Integer = 1 + Me.New() + Me.New
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_7">
<file name="a.vb">
Class Tests
Public Sub New(i As String)
End Sub
Public Sub New(i As Integer)
Dim a As Integer = 1 + Me.New(1, 2) + Me.New
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Dim a As Integer = 1 + Me.New(1, 2) + Me.New
~~~~~~
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Dim a As Integer = 1 + Me.New(1, 2) + Me.New
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_8()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30282ERR_ConstructorCallIsValidOnlyAsTheFirstStatementInAnInstanceConstructor_8">
<file name="a.vb">
Class Tests
Public Sub New(i As String)
End Sub
Public Sub New(i As Integer)
Tests.New(1, 2)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30282: Constructor call is valid only as the first statement in an instance constructor.
Tests.New(1, 2)
~~~~~~~~~
</errors>)
End Sub
<WorkItem(541012, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541012")>
<Fact()>
Public Sub BC30283ERR_CantOverrideConstructor()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CantOverrideConstructor">
<file name="a.vb">
Module Error30283
Class Class1
mustoverride Sub New()
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30364: 'Sub New' cannot be declared 'mustoverride'.
mustoverride Sub New()
~~~~~~~~~~~~
BC30429: 'End Sub' must be preceded by a matching 'Sub'.
End Sub
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30288ERR_DuplicateLocals1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateLocals1">
<file name="a.vb">
Public Class Class1
Public Sub foo(ByVal val As Short)
Dim i As Integer
Dim i As String
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42024: Unused local variable: 'i'.
Dim i As Integer
~
BC30288: Local variable 'i' is already declared in the current block.
Dim i As String
~
BC42024: Unused local variable: 'i'.
Dim i As String
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(531346, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531346")>
Public Sub UnicodeCaseInsensitiveLocals()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnicodeCaseInsensitiveLocals">
<file name="a.vb">
Public Class Class1
Public Sub foo()
Dim Xİ
'COMPILEERROR:BC30288, "xi"
Dim xi
Dim İ
'COMPILEERROR:BC30288, "i"
Dim i
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42024: Unused local variable: 'Xİ'.
Dim Xİ
~~
BC30288: Local variable 'xi' is already declared in the current block.
Dim xi
~~
BC42024: Unused local variable: 'xi'.
Dim xi
~~
BC42024: Unused local variable: 'İ'.
Dim İ
~
BC30288: Local variable 'i' is already declared in the current block.
Dim i
~
BC42024: Unused local variable: 'i'.
Dim i
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30290ERR_LocalSameAsFunc()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LocalSameAsFunc">
<file name="a.vb">
Module Error30290
Class Class1
Function Foo(ByVal Name As String)
'COMPILEERROR : BC30290, "Foo"
Dim Foo As Date
Return Name
End Function
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30290: Local variable cannot have the same name as the function containing it.
Dim Foo As Date
~~~
BC42024: Unused local variable: 'Foo'.
Dim Foo As Date
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30290ERR_LocalSameAsFunc_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="LocalSameAsFunc">
<file name="a.vb">
Class C
Shared Sub Main()
End Sub
Function foo() as Object
'COMPILEERROR: BC30290,
For Each foo As Integer In New Integer() {1, 2, 3}
Next
return nothing
End Function
Sub foo1()
For Each foo1 As Integer In New Integer() {1, 2, 3}
Next
End SUB
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30290: Local variable cannot have the same name as the function containing it.
For Each foo As Integer In New Integer() {1, 2, 3}
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30297ERR_ConstructorCannotCallItself_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30297ERR_ConstructorCannotCallItself_1">
<file name="a.vb">
Imports System
Class Tests
Public Sub New(i As Integer)
Me.New("")
End Sub
Public Sub New(i As String)
Me.New(1)
End Sub
Public Sub New(i As DateTime)
Me.New(1)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30298: Constructor 'Public Sub New(i As Integer)' cannot call itself:
'Public Sub New(i As Integer)' calls 'Public Sub New(i As String)'.
'Public Sub New(i As String)' calls 'Public Sub New(i As Integer)'.
Public Sub New(i As Integer)
~~~
BC30298: Constructor 'Public Sub New(i As String)' cannot call itself:
'Public Sub New(i As String)' calls 'Public Sub New(i As Integer)'.
'Public Sub New(i As Integer)' calls 'Public Sub New(i As String)'.
Public Sub New(i As String)
~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30297ERR_ConstructorCannotCallItself_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30297ERR_ConstructorCannotCallItself_2">
<file name="a.vb">
Imports System
Class Tests
Public Sub New(i As Byte)
Me.New(CType(i, Int16))
End Sub
Public Sub New(i As Int16)
Me.New(DateTime.Now)
End Sub
Public Sub New(i As DateTime)
Me.New(DateTime.Now)
End Sub
Public Sub New(i As Int64)
Me.New("")
End Sub
Public Sub New(i As Int32)
Me.New(ctype(1, UInt32))
End Sub
Public Sub New(i As UInt32)
Me.New("")
End Sub
Public Sub New(i As String)
Me.New(cint(1))
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30298: Constructor 'Public Sub New(i As Date)' cannot call itself:
'Public Sub New(i As Date)' calls 'Public Sub New(i As Date)'.
Public Sub New(i As DateTime)
~~~
BC30298: Constructor 'Public Sub New(i As Integer)' cannot call itself:
'Public Sub New(i As Integer)' calls 'Public Sub New(i As UInteger)'.
'Public Sub New(i As UInteger)' calls 'Public Sub New(i As String)'.
'Public Sub New(i As String)' calls 'Public Sub New(i As Integer)'.
Public Sub New(i As Int32)
~~~
BC30298: Constructor 'Public Sub New(i As UInteger)' cannot call itself:
'Public Sub New(i As UInteger)' calls 'Public Sub New(i As String)'.
'Public Sub New(i As String)' calls 'Public Sub New(i As Integer)'.
'Public Sub New(i As Integer)' calls 'Public Sub New(i As UInteger)'.
Public Sub New(i As UInt32)
~~~
BC30298: Constructor 'Public Sub New(i As String)' cannot call itself:
'Public Sub New(i As String)' calls 'Public Sub New(i As Integer)'.
'Public Sub New(i As Integer)' calls 'Public Sub New(i As UInteger)'.
'Public Sub New(i As UInteger)' calls 'Public Sub New(i As String)'.
Public Sub New(i As String)
~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30297ERR_ConstructorCannotCallItself_3()
' NOTE: Test case ensures that the error in calling the
' constructor suppresses the cycle detection
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30297ERR_ConstructorCannotCallItself_3">
<file name="a.vb">
Imports System
Class Tests
Public Sub New(i As Integer)
Me.New("")
End Sub
Public Sub New(i As String)
Me.New(qqq)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30451: 'qqq' is not declared. It may be inaccessible due to its protection level.
Me.New(qqq)
~~~
</errors>)
End Sub
<Fact()>
Public Sub BC30306ERR_MissingSubscript()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingSubscript">
<file name="a.vb">
Module Mod30306
Sub ArExtFrErr002()
Dim scen1(,) As Integer
ReDim scen1(2, 2)
Dim scen4() As Integer
'COMPILEERROR: BC30306, "(", BC30306, ","
ReDim scen4(, )
Dim scen8a(,,) As Integer
'COMPILEERROR: BC30306, "(", BC30306, ",", BC30306, ","
ReDim scen8a(, , )
Dim Scen8b(,,) As Integer
'COMPILEERROR: BC30306, ",", BC30306, ","
ReDim Scen8b(5, , )
Dim scen8c(,,) As Integer
'COMPILEERROR: BC30306, "(", BC30306, ","
ReDim scen8c(, , 5)
Exit Sub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30306: Array subscript expression missing.
ReDim scen4(, )
~
BC30306: Array subscript expression missing.
ReDim scen4(, )
~
BC30306: Array subscript expression missing.
ReDim scen8a(, , )
~
BC30306: Array subscript expression missing.
ReDim scen8a(, , )
~
BC30306: Array subscript expression missing.
ReDim scen8a(, , )
~
BC30306: Array subscript expression missing.
ReDim Scen8b(5, , )
~
BC30306: Array subscript expression missing.
ReDim Scen8b(5, , )
~
BC30306: Array subscript expression missing.
ReDim scen8c(, , 5)
~
BC30306: Array subscript expression missing.
ReDim scen8c(, , 5)
~
</expected>)
End Sub
' <Fact()>
' Public Sub BC30310ERR_FieldOfValueFieldOfMarshalByRef3()
' Dim compilation = CompilationUtils.CreateCompilationWithMscorlib(
'<compilation name="FieldOfValueFieldOfMarshalByRef3">
' <file name="a.vb">
' </file>
'</compilation>)
' CompilationUtils.AssertTheseErrors(compilation,
'<expected>
'BC30310: Local variable cannot have the same name as the function containing it.
' Dim Foo As Date
' ~~~~
'BC30310: Local variable cannot have the same name as the function containing it.
' Dim scen16 = 3
' ~~~~
'</expected>)
' End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Public Class C
Sub FOO()
Dim a As S1?
Dim b As E1?
Dim c As System.Exception
Dim d As I1
Dim e As C1.C2
Dim f As C1.C2(,)
Dim z = DirectCast (b, S1?)
z = DirectCast (b, System.Nullable)
z = DirectCast (a, E1?)
z = DirectCast (a, System.Nullable)
z = DirectCast (c, S1?)
z = DirectCast (c, E1?)
z = DirectCast (c, System.Nullable)
z = DirectCast (d, S1?)
z = DirectCast (d, E1?)
z = DirectCast (d, System.Nullable)
z = DirectCast (d, System.ValueType)
z = DirectCast (e, S1?)
z = DirectCast (e, E1?)
z = DirectCast (e, System.Nullable)
z = DirectCast (e, System.ValueType)
z = DirectCast (f, S1?)
z = DirectCast (f, E1?)
z = DirectCast (f, System.Nullable)
z = DirectCast (f, System.ValueType)
End Sub
End Class
Structure S1
End Structure
Enum E1
one
End Enum
Interface I1
End Interface
Class C1
Public Class C2
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'E1?' cannot be converted to 'S1?'.
Dim z = DirectCast (b, S1?)
~
BC30311: Value of type 'E1?' cannot be converted to 'Nullable'.
z = DirectCast (b, System.Nullable)
~
BC30311: Value of type 'S1?' cannot be converted to 'E1?'.
z = DirectCast (a, E1?)
~
BC30311: Value of type 'S1?' cannot be converted to 'Nullable'.
z = DirectCast (a, System.Nullable)
~
BC30311: Value of type 'Exception' cannot be converted to 'S1?'.
z = DirectCast (c, S1?)
~
BC42104: Variable 'c' is used before it has been assigned a value. A null reference exception could result at runtime.
z = DirectCast (c, S1?)
~
BC30311: Value of type 'Exception' cannot be converted to 'E1?'.
z = DirectCast (c, E1?)
~
BC30311: Value of type 'Exception' cannot be converted to 'Nullable'.
z = DirectCast (c, System.Nullable)
~
BC30311: Value of type 'I1' cannot be converted to 'S1?'.
z = DirectCast (d, S1?)
~
BC42104: Variable 'd' is used before it has been assigned a value. A null reference exception could result at runtime.
z = DirectCast (d, S1?)
~
BC30311: Value of type 'I1' cannot be converted to 'E1?'.
z = DirectCast (d, E1?)
~
BC30311: Value of type 'Nullable' cannot be converted to 'S1?'.
z = DirectCast (d, System.Nullable)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC42322: Runtime errors might occur when converting 'I1' to 'Nullable'.
z = DirectCast (d, System.Nullable)
~
BC30311: Value of type 'C1.C2' cannot be converted to 'S1?'.
z = DirectCast (e, S1?)
~
BC42104: Variable 'e' is used before it has been assigned a value. A null reference exception could result at runtime.
z = DirectCast (e, S1?)
~
BC30311: Value of type 'C1.C2' cannot be converted to 'E1?'.
z = DirectCast (e, E1?)
~
BC30311: Value of type 'C1.C2' cannot be converted to 'Nullable'.
z = DirectCast (e, System.Nullable)
~
BC30311: Value of type 'C1.C2' cannot be converted to 'ValueType'.
z = DirectCast (e, System.ValueType)
~
BC30311: Value of type 'C1.C2(*,*)' cannot be converted to 'S1?'.
z = DirectCast (f, S1?)
~
BC42104: Variable 'f' is used before it has been assigned a value. A null reference exception could result at runtime.
z = DirectCast (f, S1?)
~
BC30311: Value of type 'C1.C2(*,*)' cannot be converted to 'E1?'.
z = DirectCast (f, E1?)
~
BC30311: Value of type 'C1.C2(*,*)' cannot be converted to 'Nullable'.
z = DirectCast (f, System.Nullable)
~
BC30311: Value of type 'C1.C2(*,*)' cannot be converted to 'ValueType'.
z = DirectCast (f, System.ValueType)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Class C
Shared Sub Main()
For Each x As Integer In New Exception() {Nothing, Nothing}
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'Exception' cannot be converted to 'Integer'.
For Each x As Integer In New Exception() {Nothing, Nothing}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Public Shared Sub Main()
Dim numbers2D As Integer()() = New Integer()() {New Integer() {1, 2}, New Integer() {1, 2}}
For Each i As Integer In numbers2D
System.Console.Write("{0} ", i)
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'Integer()' cannot be converted to 'Integer'.
For Each i As Integer In numbers2D
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
End Sub
Private Function fun(Of T)(Parm1 As T) As T
Dim temp As T
Return If(temp, temp, 1)
End Function
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'T' cannot be converted to 'Boolean'.
Return If(temp, temp, 1)
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2_4()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Public Class Test
Public Sub Test()
Dim at1 = New With {.f1 = Nothing, .f2 = String.Empty}
Dim at2 = New With {.f2 = String.Empty, .f1 = Nothing}
at1 = at2
End Sub
End Class
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_TypeMismatch2, "at2").WithArguments("<anonymous type: f2 As String, f1 As Object>", "<anonymous type: f1 As Object, f2 As String>"))
End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module Program
Public Sub Main()
Dim arr1 As Integer(,) = New Integer(2, 1) {{1, 2}, {3, 4}, {5, 6}}
arr1 = 0 ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'Integer' cannot be converted to 'Integer(*,*)'.
arr1 = 0 ' Invalid
~
</expected>)
End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2_6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module Program
Public Sub Main()
Dim arr As Integer(,) = New Integer(2, 1) {{6, 7}, {5, 8}, {8, 10}}
Dim x As Integer
x = arr 'Invalid
arr = x 'Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'Integer(*,*)' cannot be converted to 'Integer'.
x = arr 'Invalid
~~~
BC30311: Value of type 'Integer' cannot be converted to 'Integer(*,*)'.
arr = x 'Invalid
~
</expected>)
End Sub
<Fact()>
Public Sub BC30311ERR_TypeMismatch2_7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Strict Off
Option Infer On
Class B
Public Shared Sub Main()
End Sub
Private Sub Foo(Of T)()
Dim x As T(,) = New T(1, 2) {}
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
End Sub
End Class
Public Class Class1(Of T)
Private x As T(,) = New T(1, 2) {}
Private Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
Private Sub Foo()
Dim x As T(,) = New T(1, 2) {}
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Private Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Private Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Private Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Private Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Private Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Private Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
BC30311: Value of type 'Integer' cannot be converted to 'T'.
Dim Y As T(,) = New T(1, 2) {{1, 2, 3}, {1, 2, 3}} ' invalid
~
</expected>)
End Sub
<Fact()>
Public Sub BC30332ERR_ConvertArrayMismatch4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvertArrayMismatch4">
<file name="a.vb">
Module M1
Class Cls2_1
End Class
Class Cls2_2
End Class
Sub Main()
Dim Ary1_1() As Integer
Dim Ary1_2() As Long = New Long() {1, 2}
'COMPILEERROR: BC30332, "Ary1_2"
Ary1_1 = CType(Ary1_2, Integer())
Dim Ary2_1() As Cls2_1 = New Cls2_1() {}
Dim Ary2_2(,) As Cls2_2
'COMPILEERROR: BC30332, "Ary2_1"
Ary2_2 = CType(Ary2_1, Cls2_2())
Dim Ary3_1(,) As Double = New Double(,) {}
Dim Ary3_2(,) As Cls2_2
'COMPILEERROR: BC30332, "Ary3_1"
Ary3_2 = CType(Ary3_1, Cls2_2(,))
'COMPILEERROR: BC30332, "Ary3_2"
Ary3_1 = CType(Ary3_2, Double(,))
Dim Ary4_1() As Integer
Dim Ary4_2() As Object = New Object() {}
Ary4_1 = CType(Ary4_2, Integer())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30332: Value of type 'Long()' cannot be converted to 'Integer()' because 'Long' is not derived from 'Integer'.
Ary1_1 = CType(Ary1_2, Integer())
~~~~~~
BC30332: Value of type 'M1.Cls2_1()' cannot be converted to 'M1.Cls2_2()' because 'M1.Cls2_1' is not derived from 'M1.Cls2_2'.
Ary2_2 = CType(Ary2_1, Cls2_2())
~~~~~~
BC30332: Value of type 'Double(*,*)' cannot be converted to 'M1.Cls2_2(*,*)' because 'Double' is not derived from 'M1.Cls2_2'.
Ary3_2 = CType(Ary3_1, Cls2_2(,))
~~~~~~
BC30332: Value of type 'M1.Cls2_2(*,*)' cannot be converted to 'Double(*,*)' because 'M1.Cls2_2' is not derived from 'Double'.
Ary3_1 = CType(Ary3_2, Double(,))
~~~~~~
BC30332: Value of type 'Object()' cannot be converted to 'Integer()' because 'Object' is not derived from 'Integer'.
Ary4_1 = CType(Ary4_2, Integer())
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30332ERR_ConvertArrayMismatch4_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvertArrayMismatch4">
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Sub Main()
Dim arrString$(,) = New Decimal(1, 2) {} ' Invalid
Dim arrInteger%(,) = New Decimal(1, 2) {} ' Invalid
Dim arrLong&(,) = New Decimal(1, 2) {} ' Invalid
Dim arrSingle!(,) = New Decimal(1, 2) {} ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30332: Value of type 'Decimal(*,*)' cannot be converted to 'String(*,*)' because 'Decimal' is not derived from 'String'.
Dim arrString$(,) = New Decimal(1, 2) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
BC30332: Value of type 'Decimal(*,*)' cannot be converted to 'Integer(*,*)' because 'Decimal' is not derived from 'Integer'.
Dim arrInteger%(,) = New Decimal(1, 2) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
BC30332: Value of type 'Decimal(*,*)' cannot be converted to 'Long(*,*)' because 'Decimal' is not derived from 'Long'.
Dim arrLong&(,) = New Decimal(1, 2) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
BC30332: Value of type 'Decimal(*,*)' cannot be converted to 'Single(*,*)' because 'Decimal' is not derived from 'Single'.
Dim arrSingle!(,) = New Decimal(1, 2) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30333ERR_ConvertObjectArrayMismatch3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvertObjectArrayMismatch3">
<file name="a.vb">
Module M1
Sub Main()
Dim Ary1() As Integer = New Integer() {}
Dim Ary2() As Object
Ary2 = CType(Ary1, Object())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30333: Value of type 'Integer()' cannot be converted to 'Object()' because 'Integer' is not a reference type.
Ary2 = CType(Ary1, Object())
~~~~
</expected>)
End Sub
<WorkItem(579764, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/579764")>
<Fact()>
Public Sub BC30311ERR_WithArray_ParseAndDeclarationErrors()
'This test is because previously in native command line compiler we would produce errors for both parsing and binding errors, now
' we won't produce the binding if parsing was not successful from the command line. However, the diagnostics will display both messages and
' hence the need for two tests to verify this behavior.
Dim source =
<compilation>
<file name="ParseErrorOnly.vb">
Module M
Dim x As Integer() {1, 2, 3}
Dim y = CType({1, 2, 3}, System.Collections.Generic.List(Of Integer))
Sub main
End Sub
End Module </file>
</compilation>
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source).VerifyDiagnostics(Diagnostic(ERRID.ERR_ExpectedEOS, "{"),
Diagnostic(ERRID.ERR_TypeMismatch2, "{1, 2, 3}").WithArguments("Integer()", "System.Collections.Generic.List(Of Integer)"))
' This 2nd scenario will produce 1 error because it passed the parsing stage and now
' fails in the binding
source =
<compilation>
<file name="ParseOK.vb">
Module M
Dim x As Integer() = {1, 2, 3}
Dim y = CType({1, 2, 3}, System.Collections.Generic.List(Of Integer))
Sub main
End Sub
End Module </file>
</compilation>
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source).VerifyDiagnostics(Diagnostic(ERRID.ERR_TypeMismatch2, "{1, 2, 3}").WithArguments("Integer()", "System.Collections.Generic.List(Of Integer)"))
End Sub
<Fact(), WorkItem(542069, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542069")>
Public Sub BC30337ERR_ForLoopType1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ForLoopType1">
<file name="a.vb">
Module M1
Sub Test()
'COMPILEERROR : BC30337, "i"
For i = New base To New first()
Next
For j = New base To New first() step new second()
Next
End Sub
End Module
Class base
End Class
Class first
Inherits base
Overloads Shared Widening Operator CType(ByVal d As first) As second
Return New second()
End Operator
End Class
Class second
Inherits base
Overloads Shared Widening Operator CType(ByVal d As second) As first
Return New first()
End Operator
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'Integer' cannot be converted to 'base'.
For i = New base To New first()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC33038: Type 'base' must define operator '+' to be used in a 'For' statement.
For j = New base To New first() step new second()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC33038: Type 'base' must define operator '-' to be used in a 'For' statement.
For j = New base To New first() step new second()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC33038: Type 'base' must define operator '<=' to be used in a 'For' statement.
For j = New base To New first() step new second()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC33038: Type 'base' must define operator '>=' to be used in a 'For' statement.
For j = New base To New first() step new second()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(542069, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542069")>
Public Sub BC30337ERR_ForLoopType1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ForLoopType1">
<file name="a.vb">
Option Strict On
Option Infer Off
Module Program
Sub Main(args As String())
For x As Date = #1/2/0003# To 10
Next
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30337: 'For' loop control variable cannot be of type 'Date' because the type does not support the required operators.
For x As Date = #1/2/0003# To 10
~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(542069, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542069"), WorkItem(544464, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544464")>
Public Sub BC30337ERR_ForLoopType1_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ForLoopType1">
<file name="a.vb">
Option Strict On
Option Infer Off
Interface IFoo
End Interface
Module Program
Sub Main(args As String())
For x As Boolean = False To True
Next
Dim foo as Boolean
For foo = False To True
Next
for z as IFoo = nothing to nothing
next
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30337: 'For' loop control variable cannot be of type 'Boolean' because the type does not support the required operators.
For x As Boolean = False To True
~~~~~~~~~~~~
BC30337: 'For' loop control variable cannot be of type 'Boolean' because the type does not support the required operators.
For foo = False To True
~~~
BC30337: 'For' loop control variable cannot be of type 'IFoo' because the type does not support the required operators.
for z as IFoo = nothing to nothing
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30367ERR_NoDefaultNotExtend1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared Sub M(Of T)(x As C, y As T)
N(x(0))
N(x!P)
x(0)
N(y(1))
N(y!Q)
y(1)
End Sub
Shared Sub N(o As Object)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30367: Class 'C' cannot be indexed because it has no default property.
N(x(0))
~
BC30367: Class 'C' cannot be indexed because it has no default property.
N(x!P)
~
BC30454: Expression is not a method.
x(0)
~
BC30547: 'T' cannot be indexed because it has no default property.
N(y(1))
~
BC30547: 'T' cannot be indexed because it has no default property.
N(y!Q)
~
BC30454: Expression is not a method.
y(1)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30369ERR_BadInstanceMemberAccess_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Structure S1
Dim b3 As Integer()
Public Shared Sub Scenario_6()
dim b4 = b3
End Sub
shared Function foo() As Integer()
Return b3
End Function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
dim b4 = b3
~~
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
Return b3
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30369ERR_BadInstanceMemberAccess_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Property P
Get
Return Nothing
End Get
Set
End Set
End Property
Shared Sub M()
Dim o = P
P = o
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
Dim o = P
~
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
P = o
~
</expected>)
End Sub
<Fact()>
Public Sub BC30369ERR_BadInstanceMemberAccess_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared Sub Main()
For Each x As Integer In F(x)
Next
End Sub
Private Sub F(x As Integer)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As Integer In F(x)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30369ERR_BadInstanceMemberAccess_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared Sub Main()
For Each x As Integer In F(x)
Next
End Sub
Private Function F(x As Integer) As Object
Return New Object()
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As Integer In F(x)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30369ERR_BadInstanceMemberAccess_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Property P1(ByVal x As Integer) As integer
Get
Return x +5
End Get
Set(ByVal Value As integer)
End Set
End Property
Public Shared Sub Main()
For Each x As integer In New integer() {P1(x), P1(x), P1(x)}
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As integer In New integer() {P1(x), P1(x), P1(x)}
~~
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As integer In New integer() {P1(x), P1(x), P1(x)}
~~
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As integer In New integer() {P1(x), P1(x), P1(x)}
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30369ERR_BadInstanceMemberAccess_6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Public Shared Sub Main()
For Each x As Integer In New Integer() {foo(x), foo(x), foo(x)}
Next
End Sub
Function foo(ByRef x As Integer) As Integer
x = 10
Return x + 10
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As Integer In New Integer() {foo(x), foo(x), foo(x)}
~~~
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As Integer In New Integer() {foo(x), foo(x), foo(x)}
~~~
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For Each x As Integer In New Integer() {foo(x), foo(x), foo(x)}
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30369ERR_BadInstanceMemberAccess_7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Strict Off
Option Infer On
Public Class MyClass1
Dim global_x As Integer = 10
Const global_y As Long = 20
Public Shared Sub Main()
For global_x = global_y To 10
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
For global_x = global_y To 10
~~~~~~~~
</expected>)
End Sub
<Fact, WorkItem(529193, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529193")>
Public Sub BC30369ERR_BadInstanceMemberAccess_8()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class derive
Shared Sub main()
TestEvents
End Sub
Shared Sub TestEvents()
Dim Obj As New Class1
RemoveHandler Obj.MyEvent, AddressOf EventHandler
End Sub
Function EventHandler()
Return Nothing
End Function
Public Class Class1
Public Event MyEvent(ByRef x As Decimal)
Sub CauseSomeEvent()
RaiseEvent MyEvent(x:=1)
End Sub
End Class
End Class
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadInstanceMemberAccess, "AddressOf EventHandler"))
End Sub
<Fact()>
Public Sub BC30375ERR_NewIfNullOnNonClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NewIfNullOnNonClass">
<file name="a.vb">
Module M1
Sub Foo()
Dim interf1 As New Interface1()
Dim interf2 = New Interface1()
End Sub
End Module
Interface Interface1
End Interface
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30375: 'New' cannot be used on an interface.
Dim interf1 As New Interface1()
~~~~~~~~~~~~~~~~
BC30375: 'New' cannot be used on an interface.
Dim interf2 = New Interface1()
~~~~~~~~~~~~~~~~
</expected>)
End Sub
''' We decided to not implement this for Roslyn as BC30569 and BC31411 cover the scenarios that BC30376 addresses.
<Fact()>
Public Sub BC30376ERR_NewIfNullOnAbstractClass1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NewIfNullOnAbstractClass1">
<file name="a.vb">
Module M1
Sub Foo()
Throw (New C1)
End Sub
End Module
MustInherit Class C1
MustOverride Sub foo()
End Class
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_NewOnAbstractClass, "New C1"),
Diagnostic(ERRID.ERR_CantThrowNonException, "Throw (New C1)"))
End Sub
<Fact(), WorkItem(999399, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/999399")>
Public Sub BC30387ERR_NoConstructorOnBase2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoConstructorOnBase2">
<file name="a.vb">
Module M1
Class Base
Sub New(ByVal x As Integer)
End Sub
End Class
Class c1
Inherits Base
End Class
End Module
</file>
</compilation>)
Dim expected =
<expected>
BC30387: Class 'M1.c1' must declare a 'Sub New' because its base class 'M1.Base' does not have an accessible 'Sub New' that can be called with no arguments.
Class c1
~~
</expected>
CompilationUtils.AssertTheseDiagnostics(compilation, expected)
CompilationUtils.AssertTheseDiagnostics(compilation.GetDiagnosticsForSyntaxTree(CompilationStage.Compile, compilation.SyntaxTrees.Single()), expected)
End Sub
<Fact()>
Public Sub BC30389ERR_InaccessibleSymbol2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module mod30389
Sub foo()
'COMPILEERROR: BC30389, "Namespace1.Module1.Class1.Struct1"
Dim Scen3 As Namespace1.Module1.Class1.Struct1
Exit Sub
End Sub
End Module
Namespace Namespace1
Module Module1
Private Class Class1
Public Structure Struct1
Public Int As Integer
End Structure
End Class
End Module
End Namespace
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42024: Unused local variable: 'Scen3'.
Dim Scen3 As Namespace1.Module1.Class1.Struct1
~~~~~
BC30389: 'Namespace1.Module1.Class1' is not accessible in this context because it is 'Private'.
Dim Scen3 As Namespace1.Module1.Class1.Struct1
~~~~~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30389ERR_InaccessibleSymbol2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Protected Structure S
End Structure
Private F As Integer
Private Property P As Integer
Protected Shared ReadOnly Property Q(o)
Get
Return Nothing
End Get
End Property
End Class
Class D
Shared Sub M(o)
Dim x As C = Nothing
M(New C.S())
M(x.F)
M(x.P)
M(C.Q(Nothing))
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30389: 'C.S' is not accessible in this context because it is 'Protected'.
M(New C.S())
~~~
BC30389: 'C.F' is not accessible in this context because it is 'Private'.
M(x.F)
~~~
BC30389: 'C.P' is not accessible in this context because it is 'Private'.
M(x.P)
~~~
BC30389: 'C.Q(o As Object)' is not accessible in this context because it is 'Protected'.
M(C.Q(Nothing))
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30390ERR_InaccessibleMember3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Protected Shared Function F()
Return Nothing
End Function
Private Sub M(o)
End Sub
End Class
Class D
Shared Sub M(x As C)
x.M(C.F())
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30390: 'C.Private Sub M(o As Object)' is not accessible in this context because it is 'Private'.
x.M(C.F())
~~~
BC30390: 'C.Protected Shared Function F() As Object' is not accessible in this context because it is 'Protected'.
x.M(C.F())
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30390ERR_InaccessibleMember3_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Class C1
Public Delegate Sub myDelegate()
private shared sub mySub()
end sub
End Class
Module M1
Sub Main()
Dim d1 As C1.myDelegate
d1 = New C1.myDelegate(addressof C1.mySub)
d1 = addressof C1.mysub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30390: 'C1.Private Shared Sub mySub()' is not accessible in this context because it is 'Private'.
d1 = New C1.myDelegate(addressof C1.mySub)
~~~~~~~~
BC30390: 'C1.Private Shared Sub mySub()' is not accessible in this context because it is 'Private'.
d1 = addressof C1.mysub
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30390ERR_InaccessibleMember3_2a()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30390ERR_InaccessibleMember3_2a">
<file name="a.vb">
Imports System
Module M1
Class B
Private Sub M()
Console.WriteLine("B.M()")
End Sub
End Class
Class D
Inherits B
Public Sub M()
Console.WriteLine("D.M()")
End Sub
Public Sub Test()
MyBase.M()
Me.M()
End Sub
End Class
Public Sub Main()
Call (New D()).Test()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30390: 'B.Private Sub M()' is not accessible in this context because it is 'Private'.
MyBase.M()
~~~~~~~~
</expected>)
End Sub
<WorkItem(540640, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540640")>
<Fact()>
Public Sub BC30390ERR_InaccessibleMember3_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30390ERR_InaccessibleMember3_3">
<file name="a.vb"><![CDATA[
Imports System
Namespace AttrRegress001
Public Class Attr
Inherits Attribute
Public Property PriSet() As Short
Get
Return 1
End Get
Private Set(ByVal value As Short)
End Set
End Property
Public Property ProSet() As Short
Get
Return 2
End Get
Protected Set(ByVal value As Short)
End Set
End Property
End Class
'COMPILEERROR: BC30390, "foo1"
<Attr(PriSet:=1)> Class Scen2
End Class
'COMPILEERROR: BC30390, "foo2"
<Attr(ProSet:=1)> Class Scen3
End Class
End Namespace
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InaccessibleMember3, "PriSet").WithArguments("AttrRegress001.Attr", "Public Property PriSet As Short", "Private"),
Diagnostic(ERRID.ERR_InaccessibleMember3, "ProSet").WithArguments("AttrRegress001.Attr", "Public Property ProSet As Short", "Protected"))
End Sub
<Fact()>
Public Sub BC30392ERR_CatchNotException1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CatchNotException1">
<file name="a.vb">
Module M1
Sub Foo()
Try
Catch o As Object
Throw
End Try
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30392: 'Catch' cannot catch type 'Object' because it is not 'System.Exception' or a class that inherits from 'System.Exception'.
Catch o As Object
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30393ERR_ExitTryNotWithinTry()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ExitTryNotWithinTry">
<file name="a.vb">
Class S1
sub FOO()
if (true)
exit try
End If
End sub
End CLASS
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30393: 'Exit Try' can only appear inside a 'Try' statement.
exit try
~~~~~~~~
</expected>)
End Sub
<WorkItem(542801, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542801")>
<Fact()>
Public Sub BC30393ERR_ExitTryNotWithinTry_ExitFromFinally()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ExitTryNotWithinTry">
<file name="a.vb">
Imports System
Imports System.Linq
Class BaseClass
Function Method() As String
Dim x = New Integer() {}
x.Where(Function(y)
Try
Exit Try
Catch ex1 As Exception When True
Exit Try
Finally
Exit Try
End Try
Return y = ""
End Function)
Return "x"
End Function
End Class
Class DerivedClass
Inherits BaseClass
Shared Sub Main()
End Sub
End Class
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30393: 'Exit Try' can only appear inside a 'Try' statement.
Exit Try
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30399ERR_MyBaseAbstractCall1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
MustInherit Class Base
MustOverride Sub Pearl()
End Class
MustInherit Class C2
Inherits Base
Sub foo()
Call MyBase.Pearl()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30399: 'MyBase' cannot be used with method 'Public MustOverride Sub Pearl()' because it is declared 'MustOverride'.
Call MyBase.Pearl()
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30399ERR_MyBaseAbstractCall1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
MustInherit Class A
MustOverride Property P
End Class
Class B
Inherits A
Overrides Property P
Get
Return Nothing
End Get
Set(ByVal value As Object)
End Set
End Property
Sub M()
MyBase.P = MyBase.P
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30399: 'MyBase' cannot be used with method 'Public MustOverride Property P As Object' because it is declared 'MustOverride'.
MyBase.P = MyBase.P
~~~~~~~~
BC30399: 'MyBase' cannot be used with method 'Public MustOverride Property P As Object' because it is declared 'MustOverride'.
MyBase.P = MyBase.P
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30399ERR_MyBaseAbstractCall1_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
MustInherit Class Base
MustOverride Sub Pearl()
End Class
MustInherit Class C2
Inherits Base
Sub foo()
Dim _action As Action = AddressOf MyBase.Pearl
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30399: 'MyBase' cannot be used with method 'Public MustOverride Sub Pearl()' because it is declared 'MustOverride'.
Dim _action As Action = AddressOf MyBase.Pearl
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30399ERR_MyBaseAbstractCall1_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
MustInherit Class Base
MustOverride Function GetBar(i As Integer) As Integer
End Class
MustInherit Class C2
Inherits Base
Sub foo()
Dim f As Func(Of Func(Of Integer, String)) = Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30399: 'MyBase' cannot be used with method 'Public MustOverride Function GetBar(i As Integer) As Integer' because it is declared 'MustOverride'.
Dim f As Func(Of Func(Of Integer, String)) = Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30399ERR_MyBaseAbstractCall1_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
MustInherit Class Base
MustOverride Function GetBar(i As Integer) As Integer
End Class
MustInherit Class C2
Inherits Base
Public FLD As Func(Of Func(Of Integer, String)) =
Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
Public Property PROP As Func(Of Func(Of Integer, String)) =
Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
Public Overrides Function GetBar(i As Integer) As Integer
Return Nothing
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30399: 'MyBase' cannot be used with method 'Public MustOverride Function GetBar(i As Integer) As Integer' because it is declared 'MustOverride'.
Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
~~~~~~~~~~~~~
BC30399: 'MyBase' cannot be used with method 'Public MustOverride Function GetBar(i As Integer) As Integer' because it is declared 'MustOverride'.
Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30399ERR_MyBaseAbstractCall1_6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Class Base
Function GetBar(i As Integer) As Integer
Return Nothing
End Function
End Class
Class C2
Inherits Base
Sub foo()
Dim f As Func(Of Func(Of Integer, String)) =
Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <errors></errors>)
End Sub
<Fact()>
Public Sub BC30399ERR_MyBaseAbstractCall1_7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Class Base
Shared Function GetBar(i As Integer) As Integer
Return 0
End Function
Function GetFoo(i As Integer) As Integer
Return 0
End Function
End Class
MustInherit Class C2
Inherits Base
Public FLD As Func(Of Func(Of Integer, String)) =
Function() New Func(Of Integer, String)(AddressOf MyBase.GetBar)
Public Property PROP As Func(Of Func(Of Integer, String)) =
Function() New Func(Of Integer, String)(AddressOf MyBase.GetFoo)
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <errors></errors>)
End Sub
<Fact>
Public Sub BC30399ERR_MyBaseAbstractCall1_8()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Runtime.InteropServices
Imports System.Runtime.CompilerServices
MustInherit Class B
Sub New()
End Sub
<DllImport("doo")>
Shared Function DllImp(i As Integer) As Integer
End Function
Declare Function DeclareFtn Lib "foo" (i As Integer) As Integer
End Class
MustInherit Class C
Inherits B
Public FLD1 As Func(Of Func(Of Integer, String)) =
Function() New Func(Of Integer, String)(AddressOf MyBase.DllImp)
Public FLD2 As Func(Of Func(Of Integer, String)) =
Function() New Func(Of Integer, String)(AddressOf MyBase.DeclareFtn)
End Class
]]>
</file>
</compilation>
CompileAndVerify(source)
End Sub
<Fact()>
Public Sub BC30414ERR_ConvertArrayRankMismatch2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvertArrayRankMismatch2">
<file name="a.vb">
Module M1
Sub Main()
Dim Ary1() As Integer = New Integer() {1}
Dim Ary2 As Integer(,) = CType(Ary1, Integer(,))
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30414: Value of type 'Integer()' cannot be converted to 'Integer(*,*)' because the array types have different numbers of dimensions.
Dim Ary2 As Integer(,) = CType(Ary1, Integer(,))
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30414ERR_ConvertArrayRankMismatch2_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvertArrayRankMismatch2">
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Sub Main()
Dim arr1 As Integer(,,) = New Integer(9, 5) {} ' Invalid
Dim arr2 As Integer() = New Integer(9, 5) {} ' Invalid
Dim arr3() As Integer = New Integer(2, 3) {} ' Invalid
Dim arr4(,) As Integer = New Integer(2, 3, 1) {} ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30414: Value of type 'Integer(*,*)' cannot be converted to 'Integer(*,*,*)' because the array types have different numbers of dimensions.
Dim arr1 As Integer(,,) = New Integer(9, 5) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
BC30414: Value of type 'Integer(*,*)' cannot be converted to 'Integer()' because the array types have different numbers of dimensions.
Dim arr2 As Integer() = New Integer(9, 5) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
BC30414: Value of type 'Integer(*,*)' cannot be converted to 'Integer()' because the array types have different numbers of dimensions.
Dim arr3() As Integer = New Integer(2, 3) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
BC30414: Value of type 'Integer(*,*,*)' cannot be converted to 'Integer(*,*)' because the array types have different numbers of dimensions.
Dim arr4(,) As Integer = New Integer(2, 3, 1) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30414ERR_ConvertArrayRankMismatch2_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvertArrayRankMismatch2">
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Sub Main()
Dim myArray10 As Integer(,) = {1, 2} ' Invalid
Dim myArray11 As Integer(,) = {{{1, 2}}} ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30414: Value of type 'Integer()' cannot be converted to 'Integer(*,*)' because the array types have different numbers of dimensions.
Dim myArray10 As Integer(,) = {1, 2} ' Invalid
~~~~~~
BC30414: Value of type 'Integer(*,*,*)' cannot be converted to 'Integer(*,*)' because the array types have different numbers of dimensions.
Dim myArray11 As Integer(,) = {{{1, 2}}} ' Invalid
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30415ERR_RedimRankMismatch()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RedimRankMismatch">
<file name="a.vb">
Class C1
Sub foo(ByVal Ary() As Date)
ReDim Ary(4, 4)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30415: 'ReDim' cannot change the number of dimensions of an array.
ReDim Ary(4, 4)
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30424ERR_ConstAsNonConstant()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ConstAsNonConstant">
<file name="a.vb">
Class C1(Of T)
Const f As T = Nothing
Const c As C1(Of T) = Nothing
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
Const f As T = Nothing
~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
Const c As C1(Of T) = Nothing
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30424ERR_ConstAsNonConstant02()
Dim source =
<compilation>
<file name="a.vb">
Option strict on
imports system
Enum E
foo
End Enum
structure S1
end structure
Class C1
' should work
public const f1 as E = E.foo
public const f2 as object = nothing
public const f3 as boolean = True
' should not work
public const f4 as C1 = nothing
public const f5 as S1 = nothing
public const f6() as integer = {1,2,3}
public const f7() as S1 = {new S1(), new S1(), new S1()}
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
public const f4 as C1 = nothing
~~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
public const f5 as S1 = nothing
~~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
public const f6() as integer = {1,2,3}
~~
BC30424: Constants must be of an intrinsic or enumerated type, not a class, structure, type parameter, or array type.
public const f7() as S1 = {new S1(), new S1(), new S1()}
~~
</expected>)
' todo: the last two errors need to be removed once collection initialization is supported
End Sub
<Fact()>
Public Sub BC30438ERR_ConstantWithNoValue()
Dim source =
<compilation>
<file name="a.vb">
Option Strict On
Option Infer On
imports system
Class C1
public const f1
public const f2 as object
public const f3 as boolean
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30438: Constants must have a value.
public const f1
~~
BC30438: Constants must have a value.
public const f2 as object
~~
BC30438: Constants must have a value.
public const f3 as boolean
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30439ERR_ExpressionOverflow1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ConvertArrayRankMismatch2">
<file name="a.vb">
Public Class C1
Shared Sub Main()
Dim i As Integer
i = 10000000000000
System.Console.WriteLine(i)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30439: Constant expression not representable in type 'Integer'.
i = 10000000000000
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30439ERR_ExpressionOverflow1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ConvertArrayRankMismatch2">
<file name="a.vb">
Public Class C1
Shared Sub Main()
Dim FIRST As UInteger = (0UI - 860UI)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30439: Constant expression not representable in type 'UInteger'.
Dim FIRST As UInteger = (0UI - 860UI)
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30451ERR_NameNotDeclared1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C1
function foo() as integer
return 1
End function
End Class
Class C2
function foo1() as integer
dim s = foo()
return 1
End function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30451: 'foo' is not declared. It may be inaccessible due to its protection level.
dim s = foo()
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30451ERR_NameNotDeclared1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared ReadOnly Property P
Get
Return Nothing
End Get
End Property
ReadOnly Property Q
Get
Return Nothing
End Get
End Property
Property R
Sub M()
set_P(get_P)
set_Q(get_Q)
set_R(get_R)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30451: 'set_P' is not declared. It may be inaccessible due to its protection level.
set_P(get_P)
~~~~~
BC30451: 'get_P' is not declared. It may be inaccessible due to its protection level.
set_P(get_P)
~~~~~
BC30451: 'set_Q' is not declared. It may be inaccessible due to its protection level.
set_Q(get_Q)
~~~~~
BC30451: 'get_Q' is not declared. It may be inaccessible due to its protection level.
set_Q(get_Q)
~~~~~
BC30451: 'set_R' is not declared. It may be inaccessible due to its protection level.
set_R(get_R)
~~~~~
BC30451: 'get_R' is not declared. It may be inaccessible due to its protection level.
set_R(get_R)
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30451ERR_NameNotDeclared1_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoDirectDelegateConstruction1">
<file name="a.vb">
Class C1
Public Delegate Sub myDelegate()
private shared sub mySub()
end sub
End Class
Module M1
Sub Main()
Dim d1 As C1.myDelegate
d1 = New C1.myDelegate(addressof BORG)
d1 = addressof BORG
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30451: 'BORG' is not declared. It may be inaccessible due to its protection level.
d1 = New C1.myDelegate(addressof BORG)
~~~~
BC30451: 'BORG' is not declared. It may be inaccessible due to its protection level.
d1 = addressof BORG
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30451ERR_NameNotDeclared1_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoDirectDelegateConstruction1">
<file name="a.vb">
Class C
Public Shared Sub Main()
For Each x As Integer In New Integer() {1, 1, 1}
'COMPILEERROR: BC30451, "y"
Next y
'escaped vs. nonescaped (should work)"
For Each [x] As Integer In New Integer() {1, 1, 1}
Next x
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30451: 'y' is not declared. It may be inaccessible due to its protection level.
Next y
~
</expected>)
End Sub
<Fact()>
Public Sub BC30451ERR_NameNotDeclared1_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoDirectDelegateConstruction1">
<file name="a.vb">
Option Infer Off
Option Strict On
Public Class MyClass1
Public Shared Sub Main()
For n = 0 To 2
For m = 1 To 2
Next n
Next m
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30451: 'n' is not declared. It may be inaccessible due to its protection level.
For n = 0 To 2
~
BC30451: 'm' is not declared. It may be inaccessible due to its protection level.
For m = 1 To 2
~
BC30451: 'n' is not declared. It may be inaccessible due to its protection level.
Next n
~
BC30451: 'm' is not declared. It may be inaccessible due to its protection level.
Next m
~
</expected>)
End Sub
<Fact()>
Public Sub BC30451ERR_NameNotDeclared1_NoErrorDuplicationForObjectInitializer()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30451ERR_NameNotDeclared1_NoErrorDuplicationForObjectInitializer">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Class S
Public Y As Object
End Class
Public Module Program
Public Sub Main(args() As String)
Dim a, b, c As New S() With {.Y = aaa}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30451: 'aaa' is not declared. It may be inaccessible due to its protection level.
Dim a, b, c As New S() With {.Y = aaa}
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30451ERR_NameNotDeclared1_NoWarningDuplicationForObjectInitializer()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30451ERR_NameNotDeclared1_NoWarningDuplicationForObjectInitializer">
<file name="a.vb">
Option Strict On
Imports System
Class S
Public Y As Byte
End Class
Public Module Program
Public Sub Main(args() As String)
Dim x As Integer = 1
Dim a, b, c As New S() With {.Y = x}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'Integer' to 'Byte'.
Dim a, b, c As New S() With {.Y = x}
~
</expected>)
End Sub
<Fact()>
Public Sub BC30452ERR_BinaryOperands3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BinaryOperands3">
<file name="a.vb">
option infer on
Class C1
dim d = new c1() + new c1.c2()
function foo() as integer
return 1
End function
Class C2
function foo1() as integer
dim d1 = new c1()
dim d2 = new c2()
dim d3 = d1 + d2
return 1
End function
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30452: Operator '+' is not defined for types 'C1' and 'C1.C2'.
dim d = new c1() + new c1.c2()
~~~~~~~~~~~~~~~~~~~~~~
BC30452: Operator '+' is not defined for types 'C1' and 'C1.C2'.
dim d3 = d1 + d2
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30452ERR_BinaryOperands3_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BinaryOperands3">
<file name="a.vb">
Class C1
Class C2
function foo1(byval d1 as c1, byval d2 as c2 )as integer
dim d3 as object = d1 + d2
return 1
End function
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30452: Operator '+' is not defined for types 'C1' and 'C1.C2'.
dim d3 as object = d1 + d2
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30452ERR_BinaryOperands3_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="None">
<file name="a.vb">
Imports System
class myClass1
shared result = New Guid() And New Guid()
End class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30452: Operator 'And' is not defined for types 'Guid' and 'Guid'.
shared result = New Guid() And New Guid()
~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30452ERR_BinaryOperands3_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="None">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Dim f1 As New Foo(), f2 As New Foo(), f3 As New Foo()
Dim b As Boolean = True
f3 = If(b, f1 = New Foo(), f2 = New Foo())
b = False
f3 = If(b, f1 = New Foo(), f2 = New Foo())
End Sub
End Module
Class Foo
Public i As Integer
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30452: Operator '=' is not defined for types 'Foo' and 'Foo'.
f3 = If(b, f1 = New Foo(), f2 = New Foo())
~~~~~~~~~~~~~~
BC30452: Operator '=' is not defined for types 'Foo' and 'Foo'.
f3 = If(b, f1 = New Foo(), f2 = New Foo())
~~~~~~~~~~~~~~
BC30452: Operator '=' is not defined for types 'Foo' and 'Foo'.
f3 = If(b, f1 = New Foo(), f2 = New Foo())
~~~~~~~~~~~~~~
BC30452: Operator '=' is not defined for types 'Foo' and 'Foo'.
f3 = If(b, f1 = New Foo(), f2 = New Foo())
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30452ERR_BinaryOperands3_4()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="None">
<file name="a.vb"><![CDATA[
Module Program
Sub Main()
Dim First = New With {.a = 1, .b = 2}
Dim Second = New With {.a = 1, .b = 2}
'COMPILEERROR: BC30452, "first = second"
If first = second Then
ElseIf second <> first Then
End If
End Sub
End Module
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BinaryOperands3, "first = second").WithArguments("=", "<anonymous type: a As Integer, b As Integer>", "<anonymous type: a As Integer, b As Integer>"),
Diagnostic(ERRID.ERR_BinaryOperands3, "second <> first").WithArguments("<>", "<anonymous type: a As Integer, b As Integer>", "<anonymous type: a As Integer, b As Integer>"))
End Sub
<Fact()>
Public Sub BC30452ERR_BinaryOperands3_4a()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30452ERR_BinaryOperands3_4a">
<file name="a.vb"><![CDATA[
Imports System
Module Program
Sub Main()
'COMPILEERROR: BC30452, "first = second"
If New With {.a = 1, .b = 2} = New With {.a = 1, .b = 2} Then
ElseIf New With {.a = 1, .b = 2} <> New With {.a = 1, .b = 2} Then
End If
End Sub
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30452: Operator '=' is not defined for types '<anonymous type: a As Integer, b As Integer>' and '<anonymous type: a As Integer, b As Integer>'.
If New With {.a = 1, .b = 2} = New With {.a = 1, .b = 2} Then
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30452: Operator '<>' is not defined for types '<anonymous type: a As Integer, b As Integer>' and '<anonymous type: a As Integer, b As Integer>'.
ElseIf New With {.a = 1, .b = 2} <> New With {.a = 1, .b = 2} Then
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></expected>)
End Sub
<Fact()>
Public Sub BC30454ERR_ExpectedProcedure()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ExpectedProcedure">
<file name="a.vb">
Module IsNotError001mod
Sub foo(byval value as integer())
value()
exit sub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30454: Expression is not a method.
value()
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30454ERR_ExpectedProcedure_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ExpectedProcedure">
<file name="a.vb">
Class C
Private s As String
Shared Sub M(x As C, y() As Integer)
Dim o As Object
o = x.s(3)
N(x.s(3))
x.s(3) ' BC30454
o = y(3)
N(y(3))
y(3) ' BC30454
End Sub
Shared Sub N(o)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30454: Expression is not a method.
x.s(3) ' BC30454
~~~
BC30454: Expression is not a method.
y(3) ' BC30454
~
</expected>)
End Sub
<Fact()>
Public Sub BC30455ERR_OmittedArgument2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Default ReadOnly Property P(x, y)
Get
Return Nothing
End Get
End Property
Shared Sub M(x As C)
N(x!Q)
End Sub
Shared Sub N(o As Object)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30455: Argument not specified for parameter 'y' of 'Public ReadOnly Default Property P(x As Object, y As Object) As Object'.
N(x!Q)
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30455ERR_OmittedArgument2_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Structure C1
<System.Runtime.InteropServices.FieldOffset()>
Dim i As Integer
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30455: Argument not specified for parameter 'offset' of 'Public Overloads Sub New(offset As Integer)'.
<System.Runtime.InteropServices.FieldOffset()>
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30456ERR_NameNotMember2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class Class1
Private Shared foo As S1
Class Class2
Sub Test()
foo.bar1()
End Sub
End Class
End Class
Structure S1
Public shared bar As String = "Hello"
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30456: 'bar1' is not a member of 'S1'.
foo.bar1()
~~~~~~~~
</expected>)
End Sub
<WorkItem(538903, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538903")>
<Fact()>
Public Sub BC30456ERR_NameNotMember2_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module M1
Sub FOO()
My.Application.Exit()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30451: 'My' is not declared. It may be inaccessible due to its protection level.
My.Application.Exit()
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30456ERR_NameNotMember2_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module M1
Sub FOO()
Dim blnReturn As Boolean = False
Dim x As System.Nullable(Of Integer)
blnReturn = system.nullable.hasvalue(x)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30456: 'hasvalue' is not a member of 'Nullable'.
blnReturn = system.nullable.hasvalue(x)
~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30456ERR_NameNotMember2_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared ReadOnly Property P
Get
Return Nothing
End Get
End Property
ReadOnly Property Q
Get
Return Nothing
End Get
End Property
Sub M()
C.set_P(C.get_P)
Me.set_Q(Me.get_Q)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30456: 'set_P' is not a member of 'C'.
C.set_P(C.get_P)
~~~~~~~
BC30456: 'get_P' is not a member of 'C'.
C.set_P(C.get_P)
~~~~~~~
BC30456: 'set_Q' is not a member of 'C'.
Me.set_Q(Me.get_Q)
~~~~~~~~
BC30456: 'get_Q' is not a member of 'C'.
Me.set_Q(Me.get_Q)
~~~~~~~~
</expected>)
End Sub
<WorkItem(10046, "DevDiv_Projects/Roslyn")>
<Fact()>
Public Sub BC30456ERR_NameNotMember2_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Infer On
Imports System
Class Program
Dim x As New Product With {.Name = "paperclips", .price1 = 1.29}
End Class
Class Product
Property price As Double
Property Name As String
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30456: 'price1' is not a member of 'Product'.
Dim x As New Product With {.Name = "paperclips", .price1 = 1.29}
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30456ERR_NameNotMember2_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30456ERR_NameNotMember2_4">
<file name="a.vb">
Module M1
Class B
End Class
Class D
Inherits B
Public Shadows Sub M()
End Sub
Public Sub Test()
MyBase.M()
Me.M()
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30456: 'M' is not a member of 'M1.B'.
MyBase.M()
~~~~~~~~
</expected>)
End Sub
<WorkItem(529710, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529710")>
<Fact()>
Public Sub BC30456ERR_NameNotMember3_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Namespace N
Module X
Sub Main()
N.Equals("", "")
End Sub
End Module
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30456: 'Equals' is not a member of 'N'.
N.Equals("", "")
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30469ERR_ObjectReferenceNotSupplied_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C1
function foo() as integer
return 1
End function
Class C2
function foo1() as integer
dim s = foo()
return 1
End function
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30469: Reference to a non-shared member requires an object reference.
dim s = foo()
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30469ERR_ObjectReferenceNotSupplied_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ObjectReferenceNotSupplied">
<file name="a.vb">
Class P(Of T)
Public ReadOnly son As T
Class P1
Sub New1(ByVal tval As T)
son = tval
End Sub
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30469: Reference to a non-shared member requires an object reference.
son = tval
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30469ERR_ObjectReferenceNotSupplied_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Property P
Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Shared Sub M()
Dim o = C.P
C.P = o
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30469: Reference to a non-shared member requires an object reference.
Dim o = C.P
~~~
BC30469: Reference to a non-shared member requires an object reference.
C.P = o
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30469ERR_ObjectReferenceNotSupplied_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class A
Property P
Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Class B
Sub M(ByVal value)
P = value
value = P
End Sub
End Class
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30469: Reference to a non-shared member requires an object reference.
P = value
~
BC30469: Reference to a non-shared member requires an object reference.
value = P
~
</expected>)
End Sub
<Fact()>
Public Sub BC30469ERR_ObjectReferenceNotSupplied_FieldInitializers()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C1
public f1 as integer
public shared f2 as integer = C1.f1
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30469: Reference to a non-shared member requires an object reference.
public shared f2 as integer = C1.f1
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30469ERR_ObjectReferenceNotSupplied_DelegateCreation()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoDirectDelegateConstruction1">
<file name="a.vb">
Class C1
Public Delegate Sub myDelegate()
public sub mySub()
end sub
End Class
Module M1
Sub foo()
Dim d1 As C1.myDelegate
d1 = New C1.myDelegate(addressof C1.mySub)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30469: Reference to a non-shared member requires an object reference.
d1 = New C1.myDelegate(addressof C1.mySub)
~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30470ERR_MyClassNotInClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MyClassNotInClass">
<file name="a.vb">
Module M1
Sub FOO()
MyClass.New()
End Sub
Sub New()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30470: 'MyClass' cannot be used outside of a class.
MyClass.New()
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30487ERR_UnaryOperand2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnaryOperand2">
<file name="a.vb">
Class C1
Shared Sub FOO()
Dim expr As c2 = new c2()
expr = -expr
End Sub
End Class
Class C2
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30487: Operator '-' is not defined for type 'C2'.
expr = -expr
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30491ERR_VoidValue()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VoidValue">
<file name="a.vb">
Structure C1
Sub FOO()
'Dim a1 = If (True, New Object, TestMethod)
'Dim a2 = If (True, {TestMethod()}, {TestMethod()})
Dim a3 = TestMethod() = TestMethod()
End Sub
Sub TestMethod()
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30491: Expression does not produce a value.
Dim a3 = TestMethod() = TestMethod()
~~~~~~~~~~~~
BC30491: Expression does not produce a value.
Dim a3 = TestMethod() = TestMethod()
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30491ERR_VoidValue_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VoidValue">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Dim x = If(True, Console.WriteLine(0), Console.WriteLine(1))
Dim y = If(True, fun_void(), fun_int(1))
Dim z = If(True, fun_Exception(1), fun_int(1))
Dim r = If(True, fun_long(0), fun_int(1))
Dim s = If(False, fun_long(0), fun_int(1))
End Sub
Private Sub fun_void()
Return
End Sub
Private Function fun_int(x As Integer) As Integer
Return x
End Function
Private Function fun_long(x As Integer) As Long
Return CLng(x)
End Function
Private Function fun_Exception(x As Integer) As Exception
Return New Exception()
End Function
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30491: Expression does not produce a value.
Dim x = If(True, Console.WriteLine(0), Console.WriteLine(1))
~~~~~~~~~~~~~~~~~~~~
BC30491: Expression does not produce a value.
Dim x = If(True, Console.WriteLine(0), Console.WriteLine(1))
~~~~~~~~~~~~~~~~~~~~
BC30491: Expression does not produce a value.
Dim y = If(True, fun_void(), fun_int(1))
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30491ERR_VoidValue_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VoidValue">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Dim x As Integer = 1
Dim y As Object = 0
Dim s = If(True, fun(x), y)
Dim s1 = If(False, sub1(x), y)
End Sub
Private Function fun(Of T)(Parm1 As T) As T
Return Parm1
End Function
Private Sub sub1(Of T)(Parm1 As T)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30491: Expression does not produce a value.
Dim s1 = If(False, sub1(x), y)
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30491ERR_VoidValue_SelectCase()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VoidValue">
<file name="a.vb">
Structure C1
Sub Foo()
Select Case TestMethod()
End Select
End Sub
Sub TestMethod()
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30491: Expression does not produce a value.
Select Case TestMethod()
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30500ERR_CircularEvaluation1()
Dim source =
<compilation>
<file name="a.vb">
Option strict on
imports system
Class C1
Enum E
A = A
End Enum
public const f1 as integer = f2
public const f2 as integer = f1
Public shared Sub Main(args() as string)
Console.WriteLine(E.A)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30500: Constant 'A' cannot depend on its own value.
A = A
~
BC30500: Constant 'f1' cannot depend on its own value.
public const f1 as integer = f2
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30500ERR_CircularEvaluation1_02()
Dim source =
<compilation>
<file name="a.vb">
Option Strict On
Option Infer On
imports system
Class C1
private const f1 = f2
private const f2 = f1
Public shared Sub Main(args() as string)
console.writeline(f1)
console.writeline(f2)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30500: Constant 'f1' cannot depend on its own value.
private const f1 = f2
~~
</expected>)
End Sub
<Fact(), WorkItem(528728, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528728")>
Public Sub BC30500ERR_CircularEvaluation1_03()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CircularEvaluation1">
<file name="a.vb">
Module M1
Sub New()
Const Val As Integer = Val
End Sub
End Module
</file>
</compilation>)
compilation.AssertTheseDiagnostics(
<expected>
BC30500: Constant 'Val' cannot depend on its own value.
Const Val As Integer = Val
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30500ERR_CircularEvaluation1_04()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Const c0, c1 = c2 + 1
Const c2, c3 = c0 + 1
End Class
</file>
</compilation>)
compilation.AssertTheseDiagnostics(
<expected>
BC30500: Constant 'c0' cannot depend on its own value.
Const c0, c1 = c2 + 1
~~
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
Const c0, c1 = c2 + 1
~~~~~~~~~~~~~~~
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
Const c2, c3 = c0 + 1
~~~~~~~~~~~~~~~
BC30060: Conversion from 'Integer' to 'Object' cannot occur in a constant expression.
Const c2, c3 = c0 + 1
~
</expected>)
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NarrowingConversionDisallowed2">
<file name="a.vb">
Option Strict On
Imports System
Module M1
Sub Foo()
Dim b As Byte = 2
Dim c As Byte = 3
Dim s As Short = 2
Dim t As Short = 3
Dim i As Integer = 2
Dim j As Integer = 3
Dim l As Long = 2
Dim m As Long = 3
b = b < c
b = b ^ c
s = s < t
s = s ^ t
i = i > j
i = i ^ j
l = l > m
l = l ^ m
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'Boolean' to 'Byte'.
b = b < c
~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Byte'.
b = b ^ c
~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Boolean' to 'Short'.
s = s < t
~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Short'.
s = s ^ t
~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Boolean' to 'Integer'.
i = i > j
~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Integer'.
i = i ^ j
~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Boolean' to 'Long'.
l = l > m
~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Long'.
l = l ^ m
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Strict On
Class C
Default ReadOnly Property P(i As Integer) As Object
Get
Return Nothing
End Get
End Property
Shared Sub M(x As C)
N(x("Q"))
N(x!Q)
End Sub
Shared Sub N(o As Object)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Integer'.
N(x("Q"))
~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Integer'.
N(x!Q)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_2()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Module Program
Sub Main(args As String())
Dim S1 As String = "3"
Dim S1_b As Object = If(S1, 3, 2)
Dim S2 As SByte = 4
Dim S2_b As Object = If(S2, 4, 2)
Dim S3 As Byte = 5
Dim S3_b As Object = If(S3, 5, 2)
Dim S4 As Short = 6
Dim S4_b As Object = If(S4, 6, 2)
Dim S5 As UShort = 7
Dim S5_b As Object = If(S5, 7, 2)
Dim S6 As Integer = 8
Dim S6_b As Object = If(S6, 8, 2)
Dim S7 As UInteger = 9
Dim S7_b As Object = If(S7, 9, 2)
Dim S8 As Long = 10
Dim S8_b As Object = If(S8, 10, 2)
Dim S9 As Short? = 5
Dim S9_b As Object = If(S9, 3, 2)
Dim S10 As Integer? = 51
Dim S10_b As Object = If(S10, 3, 2)
Dim S11 As Boolean? = Nothing
Dim S11_b As Object = If(S11, 3, 2)
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S1").WithArguments("String", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S2").WithArguments("SByte", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S3").WithArguments("Byte", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S4").WithArguments("Short", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S5").WithArguments("UShort", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S6").WithArguments("Integer", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S7").WithArguments("UInteger", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S8").WithArguments("Long", "Boolean"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S9").WithArguments("Short?", "Boolean?"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "S10").WithArguments("Integer?", "Boolean?"))
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Imports System
Module Program
Sub Main(args As String())
Dim S1_a As Short? = 5
Dim S1_b As Integer? = 51
Dim S1_c As Short? = If(True, S1_a, S1_b)
Dim S1_d As Boolean? = If(True, S1_a, S1_b)
Dim S2_a As Char
Dim S2_b As String = "31"
Dim S2_c As String = If(True, S2_a, S2_b)
Dim S2_d As Char = If(False, S2_a, S2_b)
Dim S2_e As Short = If(False, S2_a, S2_b)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'Integer?' to 'Short?'.
Dim S1_c As Short? = If(True, S1_a, S1_b)
~~~~~~~~~~~~~~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Integer?' to 'Boolean?'.
Dim S1_d As Boolean? = If(True, S1_a, S1_b)
~~~~~~~~~~~~~~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.
Dim S2_d As Char = If(False, S2_a, S2_b)
~~~~~~~~~~~~~~~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Short'.
Dim S2_e As Short = If(False, S2_a, S2_b)
~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Strict On
Public Class MyClass1
Public Shared Sub Main()
For ivar As Integer = 0.1 To 10
Next
For dvar As Double = #12:00:00 AM# To 10
Next
For dvar As Double = True To 10
Next
For dvar1 As Double = 123& To 10
'ok
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Integer'.
For ivar As Integer = 0.1 To 10
~~~
BC30532: Conversion from 'Date' to 'Double' requires calling the 'Date.ToOADate' method.
For dvar As Double = #12:00:00 AM# To 10
~~~~~~~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Boolean' to 'Double'.
For dvar As Double = True To 10
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Sub Main()
Dim arr As Integer(,) = New Integer(1.0, 4) {} ' Invalid
Dim arr1 As Integer(,) = New Integer(CDbl(5), 4) {} ' Invalid
Dim arr2 As Integer(,) = New Integer(CDec(5), 4) {} ' Invalid
Dim arr3 As Integer(,) = New Integer(CSng(5), 4) {} ' Invalid
Dim x As Double = 5
Dim arr4 As Integer(,) = New Integer(x, 4) {} ' Invalid
Dim y As Single = 5
Dim arr5 As Integer(,) = New Integer(y, 4) {} ' Invalid
Dim z As Decimal = 5
Dim arr6 As Integer(,) = New Integer(z, 4) {} ' Invalid
Dim m As Boolean = True
Dim arr7 As Integer(,) = New Integer(m, 4) {} ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Integer'.
Dim arr As Integer(,) = New Integer(1.0, 4) {} ' Invalid
~~~
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Integer'.
Dim arr1 As Integer(,) = New Integer(CDbl(5), 4) {} ' Invalid
~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Decimal' to 'Integer'.
Dim arr2 As Integer(,) = New Integer(CDec(5), 4) {} ' Invalid
~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Single' to 'Integer'.
Dim arr3 As Integer(,) = New Integer(CSng(5), 4) {} ' Invalid
~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Integer'.
Dim arr4 As Integer(,) = New Integer(x, 4) {} ' Invalid
~
BC30512: Option Strict On disallows implicit conversions from 'Single' to 'Integer'.
Dim arr5 As Integer(,) = New Integer(y, 4) {} ' Invalid
~
BC30512: Option Strict On disallows implicit conversions from 'Decimal' to 'Integer'.
Dim arr6 As Integer(,) = New Integer(z, 4) {} ' Invalid
~
BC30512: Option Strict On disallows implicit conversions from 'Boolean' to 'Integer'.
Dim arr7 As Integer(,) = New Integer(m, 4) {} ' Invalid
~
</expected>)
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Sub Main()
Dim myArray9 As Char(,) = New Char(2, 1) {{"a", "b"}, {"c", "d"}, {"e", "f"}}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.
Dim myArray9 As Char(,) = New Char(2, 1) {{"a", "b"}, {"c", "d"}, {"e", "f"}}
~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.
Dim myArray9 As Char(,) = New Char(2, 1) {{"a", "b"}, {"c", "d"}, {"e", "f"}}
~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.
Dim myArray9 As Char(,) = New Char(2, 1) {{"a", "b"}, {"c", "d"}, {"e", "f"}}
~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.
Dim myArray9 As Char(,) = New Char(2, 1) {{"a", "b"}, {"c", "d"}, {"e", "f"}}
~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.
Dim myArray9 As Char(,) = New Char(2, 1) {{"a", "b"}, {"c", "d"}, {"e", "f"}}
~~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.
Dim myArray9 As Char(,) = New Char(2, 1) {{"a", "b"}, {"c", "d"}, {"e", "f"}}
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Infer On
Option Strict On
Imports System
Imports Microsoft.VisualBasic.Strings
Module Module1
Sub Main(args As String())
Dim arr As Integer(,) = New Integer(4, 4) {}
Dim x As Integer = 0
Dim idx As Double = 2.0
Dim idx1 As ULong = 0
Dim idx2 As Char = ChrW(3)
arr(idx, 3) = 100 ' Invalid
arr(idx1, x) = 100 ' Invalid
arr(idx2, 3) = 100 'Invalid
arr(" "c, 32) = 100 'Invalid
Dim arr1 As Integer(,,) = {{{1, 2}, {1, 2}}, {{1, 2}, {1, 2}}}
Dim i1 As ULong = 0
Dim i2 As UInteger = 0
Dim i3 As Integer = 0
arr1(i1, i2, i3) = 9 ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Integer'.
arr(idx, 3) = 100 ' Invalid
~~~
BC30512: Option Strict On disallows implicit conversions from 'ULong' to 'Integer'.
arr(idx1, x) = 100 ' Invalid
~~~~
BC32006: 'Char' values cannot be converted to 'Integer'. Use 'Microsoft.VisualBasic.AscW' to interpret a character as a Unicode value or 'Microsoft.VisualBasic.Val' to interpret it as a digit.
arr(idx2, 3) = 100 'Invalid
~~~~
BC32006: 'Char' values cannot be converted to 'Integer'. Use 'Microsoft.VisualBasic.AscW' to interpret a character as a Unicode value or 'Microsoft.VisualBasic.Val' to interpret it as a digit.
arr(" "c, 32) = 100 'Invalid
~~~~
BC30512: Option Strict On disallows implicit conversions from 'ULong' to 'Integer'.
arr1(i1, i2, i3) = 9 ' Invalid
~~
BC30512: Option Strict On disallows implicit conversions from 'UInteger' to 'Integer'.
arr1(i1, i2, i3) = 9 ' Invalid
~~
</expected>)
End Sub
<WorkItem(528762, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528762")>
<Fact>
Public Sub BC30512ERR_NarrowingConversionDisallowed2_8()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Option Infer On
Public Class Class2(Of T As Res)
Private x As T(,) = New T(1, 1) {{New Res(), New Res()}, {New Res(), New Res()}} ' invalid
Public Sub Foo()
Dim x As T(,) = New T(1, 2) {}
End Sub
End Class
Public Class Res
End Class
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "New Res()").WithArguments("Res", "T"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "New Res()").WithArguments("Res", "T"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "New Res()").WithArguments("Res", "T"),
Diagnostic(ERRID.ERR_NarrowingConversionDisallowed2, "New Res()").WithArguments("Res", "T"))
End Sub
<Fact()>
Public Sub BC30512ERR_SelectCaseNarrowingConversionErrors()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Imports System
Module M1
Sub Main()
Dim success As Boolean = True
For count = 0 To 13
Test(count, success)
Next
If success Then
Console.Write("Success")
Else
Console.Write("Fail")
End If
End Sub
Sub Test(count As Integer, ByRef success As Boolean)
Dim Bo As Boolean
Dim Ob As Object
Dim SB As SByte
Dim By As Byte
Dim Sh As Short
Dim US As UShort
Dim [In] As Integer
Dim UI As UInteger
Dim Lo As Long
Dim UL As ULong
Dim De As Decimal
Dim Si As Single
Dim [Do] As Double
Dim St As String
Bo = False
Ob = 1
SB = 2
By = 3
Sh = 4
US = 5
[In] = 6
UI = 7
Lo = 8
UL = 9
Si = 10
[Do] = 11
De = 12D
St = "13"
Select Case count
Case Bo
success = success AndAlso If(count = 0, True, False)
Case Is < Ob
success = success AndAlso If(count = 1, True, False)
Case SB
success = success AndAlso If(count = 2, True, False)
Case By
success = success AndAlso If(count = 3, True, False)
Case Sh
success = success AndAlso If(count = 4, True, False)
Case US
success = success AndAlso If(count = 5, True, False)
Case [In]
success = success AndAlso If(count = 6, True, False)
Case UI To Lo
success = success AndAlso If(count = 7, True, False)
Case Lo
success = success AndAlso If(count = 8, True, False)
Case UL
success = success AndAlso If(count = 9, True, False)
Case Si
success = success AndAlso If(count = 10, True, False)
Case [Do]
success = success AndAlso If(count = 11, True, False)
Case De
success = success AndAlso If(count = 12, True, False)
Case St
success = success AndAlso If(count = 13, True, False)
Case Else
success = False
End Select
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30512: Option Strict On disallows implicit conversions from 'Boolean' to 'Integer'.
Case Bo
~~
BC30038: Option Strict On prohibits operands of type Object for operator '<'.
Case Is < Ob
~~
BC30512: Option Strict On disallows implicit conversions from 'UInteger' to 'Integer'.
Case UI To Lo
~~
BC30512: Option Strict On disallows implicit conversions from 'Long' to 'Integer'.
Case UI To Lo
~~
BC30512: Option Strict On disallows implicit conversions from 'Long' to 'Integer'.
Case Lo
~~
BC30512: Option Strict On disallows implicit conversions from 'ULong' to 'Integer'.
Case UL
~~
BC30512: Option Strict On disallows implicit conversions from 'Single' to 'Integer'.
Case Si
~~
BC30512: Option Strict On disallows implicit conversions from 'Double' to 'Integer'.
Case [Do]
~~~~
BC30512: Option Strict On disallows implicit conversions from 'Decimal' to 'Integer'.
Case De
~~
BC30512: Option Strict On disallows implicit conversions from 'String' to 'Integer'.
Case St
~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
End Sub
<Fact()>
Public Sub BC30516ERR_NoArgumentCountOverloadCandidates1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoArgumentCountOverloadCandidates1">
<file name="a.vb">
Module Module1
Class C0
Public whichOne As String
Sub Foo(ByVal t1 As String)
whichOne = "T"
End Sub
End Class
Class C1
Inherits C0
Overloads Sub Foo(ByVal y1 As String)
whichOne = "Y"
End Sub
End Class
Sub test()
Dim [ident1] As C0 = New C0()
Dim clsNarg2get As C1 = New C1()
Dim str1 As String = "Visual Basic"
'COMPILEERROR: BC30516, "y"
clsNarg2get.Foo(1, y1:=2)
'COMPILEERROR: BC30516, "x"
clsNarg2get.Foo(y1:=1, y1:=1)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30516: Overload resolution failed because no accessible 'Foo' accepts this number of arguments.
clsNarg2get.Foo(1, y1:=2)
~~~
BC30516: Overload resolution failed because no accessible 'Foo' accepts this number of arguments.
clsNarg2get.Foo(y1:=1, y1:=1)
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30517ERR_NoViableOverloadCandidates1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoViableOverloadCandidates1">
<file name="a.vb">
Imports System
<AttributeUsage(AttributeTargets.All)> Class attr2
Inherits Attribute
Private Sub New(ByVal i As Integer)
End Sub
Protected Sub New(ByVal i As Char)
End Sub
End Class
<attr2(1)> Class target2
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30517: Overload resolution failed because no 'New' is accessible.
<attr2(1)> Class target2
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30518ERR_NoCallableOverloadCandidates2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoCallableOverloadCandidates2">
<file name="a.vb">
class M1
Sub sub1(Of U, V) (ByVal p1 As U, ByVal p2 As V)
End Sub
Sub sub1(Of U, V) (ByVal p1() As V, ByVal p2() As U)
End Sub
Sub GenMethod6210()
sub1(Of String, Integer) (17@, #3/3/2003#)
sub1(Of Integer, String) (New Integer() {1, 2, 3}, New String() {"a", "b"})
End Sub
End class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30518: Overload resolution failed because no accessible 'sub1' can be called with these arguments:
'Public Sub sub1(Of String, Integer)(p1 As String, p2 As Integer)': Value of type 'Date' cannot be converted to 'Integer'.
'Public Sub sub1(Of String, Integer)(p1 As Integer(), p2 As String())': Value of type 'Decimal' cannot be converted to 'Integer()'.
'Public Sub sub1(Of String, Integer)(p1 As Integer(), p2 As String())': Value of type 'Date' cannot be converted to 'String()'.
sub1(Of String, Integer) (17@, #3/3/2003#)
~~~~~~~~~~~~~~~~~~~~~~~~
BC30518: Overload resolution failed because no accessible 'sub1' can be called with these arguments:
'Public Sub sub1(Of Integer, String)(p1 As Integer, p2 As String)': Value of type 'Integer()' cannot be converted to 'Integer'.
'Public Sub sub1(Of Integer, String)(p1 As Integer, p2 As String)': Value of type 'String()' cannot be converted to 'String'.
'Public Sub sub1(Of Integer, String)(p1 As String(), p2 As Integer())': Value of type 'Integer()' cannot be converted to 'String()' because 'Integer' is not derived from 'String'.
'Public Sub sub1(Of Integer, String)(p1 As String(), p2 As Integer())': Value of type 'String()' cannot be converted to 'Integer()' because 'String' is not derived from 'Integer'.
sub1(Of Integer, String) (New Integer() {1, 2, 3}, New String() {"a", "b"})
~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<WorkItem(546763, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546763")>
<Fact()>
Public Sub BC30518ERR_NoCallableOverloadCandidates_LateBindingDisabled()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb">
Option Strict On
Option Infer On
Imports System
Imports System.Threading.Tasks
Public Module Program
Sub Main()
Dim a As Object = Nothing
Parallel.ForEach(a, Sub(x As Object) Console.WriteLine(x))
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30518: Overload resolution failed because no accessible 'ForEach' can be called with these arguments:
'Public Shared Overloads Function ForEach(Of TSource)(source As IEnumerable(Of TSource), body As Action(Of TSource)) As ParallelLoopResult': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
'Public Shared Overloads Function ForEach(Of TSource)(source As IEnumerable(Of TSource), body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
'Public Shared Overloads Function ForEach(Of TSource)(source As IEnumerable(Of TSource), body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
'Public Shared Overloads Function ForEach(Of TSource)(source As Partitioner(Of TSource), body As Action(Of TSource)) As ParallelLoopResult': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
'Public Shared Overloads Function ForEach(Of TSource)(source As Partitioner(Of TSource), body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
'Public Shared Overloads Function ForEach(Of TSource)(source As OrderablePartitioner(Of TSource), body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
Parallel.ForEach(a, Sub(x As Object) Console.WriteLine(x))
~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(542956, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542956")>
Public Sub BC30518ERR_NoCallableOverloadCandidates2_trycatch()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ExitTryNotWithinTry">
<file name="a.vb">
Imports System
Imports System.Linq
Class BaseClass
Function Method() As String
Dim x = New Integer() {}
x.Where(Function(y)
Try
Exit Try
Catch ex1 As Exception When True
Exit Try
Finally
Exit Function
End Try
Return y = ""
End Function)
Return "x"
End Function
End Class
Class DerivedClass
Inherits BaseClass
Shared Sub Main()
End Sub
End Class
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30101: Branching out of a 'Finally' is not valid.
Exit Function
~~~~~~~~~~~~~
BC42353: Function '<anonymous method>' doesn't return a value on all code paths. Are you missing a 'Return' statement?
End Function)
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30519ERR_NoNonNarrowingOverloadCandidates2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoNonNarrowingOverloadCandidates2">
<file name="a.vb">
Module Module1
Class C0(Of T)
Public whichOne As String
Sub Foo(ByVal t1 As T)
whichOne = "T"
End Sub
Default Property Prop1(ByVal t1 As T) As Integer
Get
Return 100
End Get
Set(ByVal Value As Integer)
whichOne = "T"
End Set
End Property
End Class
Class C1(Of T, Y)
Inherits C0(Of T)
Overloads Sub Foo(ByVal y1 As Y)
whichOne = "Y"
End Sub
Default Overloads Property Prop1(ByVal y1 As Y) As Integer
Get
Return 200
End Get
Set(ByVal Value As Integer)
whichOne = "Y"
End Set
End Property
End Class
Structure S1
Dim i As Integer
End Structure
Class Scenario11
Public Shared Narrowing Operator CType(ByVal Arg As Scenario11) As C1(Of Integer, Integer)
Return New C1(Of Integer, Integer)
End Operator
Public Shared Narrowing Operator CType(ByVal Arg As Scenario11) As S1
Return New S1
End Operator
End Class
Sub GenUnif0060()
Dim iTmp As Integer = 2000
Dim dTmp As Decimal = CDec(2000000)
Dim tc2 As New C1(Of S1, C1(Of Integer, Integer))
Dim tc3 As New C1(Of Short, Long)
Dim sc11 As New Scenario11
' COMPILEERROR: BC30519,"Call tc2.Foo (New Scenario11)"
Call tc2.Foo(New Scenario11)
' COMPILEERROR: BC30519,"Call tc2.Foo (sc11)"
Call tc2.Foo(sc11)
' COMPILEERROR: BC30519,"Call tc3.Foo (dTmp)"
Call tc3.Foo(dTmp)
' COMPILEERROR: BC30519,"tc2 (New Scenario11) = 1000"
tc2(New Scenario11) = 1000
' COMPILEERROR: BC30519,"tc2 (New Scenario11)"
iTmp = tc2(New Scenario11)
' COMPILEERROR: BC30519,"tc3 (dTmp) = 2000"
tc3(dTmp) = 2000
' COMPILEERROR: BC30519,"tc3 (dTmp)"
iTmp = tc3(dTmp)
End Sub
End Module
</file>
</compilation>)
compilation.VerifyDiagnostics(
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "Foo").WithArguments("Foo", <![CDATA[
'Public Overloads Sub Foo(y1 As Module1.C1(Of Integer, Integer))': Argument matching parameter 'y1' narrows from 'Module1.Scenario11' to 'Module1.C1(Of Integer, Integer)'.
'Public Sub Foo(t1 As Module1.S1)': Argument matching parameter 't1' narrows from 'Module1.Scenario11' to 'Module1.S1'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "Foo").WithArguments("Foo", <![CDATA[
'Public Overloads Sub Foo(y1 As Module1.C1(Of Integer, Integer))': Argument matching parameter 'y1' narrows from 'Module1.Scenario11' to 'Module1.C1(Of Integer, Integer)'.
'Public Sub Foo(t1 As Module1.S1)': Argument matching parameter 't1' narrows from 'Module1.Scenario11' to 'Module1.S1'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "Foo").WithArguments("Foo", <![CDATA[
'Public Overloads Sub Foo(y1 As Long)': Argument matching parameter 'y1' narrows from 'Decimal' to 'Long'.
'Public Sub Foo(t1 As Short)': Argument matching parameter 't1' narrows from 'Decimal' to 'Short'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "tc2").WithArguments("Prop1", <![CDATA[
'Public Overloads Default Property Prop1(y1 As Module1.C1(Of Integer, Integer)) As Integer': Argument matching parameter 'y1' narrows from 'Module1.Scenario11' to 'Module1.C1(Of Integer, Integer)'.
'Public Default Property Prop1(t1 As Module1.S1) As Integer': Argument matching parameter 't1' narrows from 'Module1.Scenario11' to 'Module1.S1'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "tc2").WithArguments("Prop1", <![CDATA[
'Public Overloads Default Property Prop1(y1 As Module1.C1(Of Integer, Integer)) As Integer': Argument matching parameter 'y1' narrows from 'Module1.Scenario11' to 'Module1.C1(Of Integer, Integer)'.
'Public Default Property Prop1(t1 As Module1.S1) As Integer': Argument matching parameter 't1' narrows from 'Module1.Scenario11' to 'Module1.S1'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "tc3").WithArguments("Prop1", <![CDATA[
'Public Overloads Default Property Prop1(y1 As Long) As Integer': Argument matching parameter 'y1' narrows from 'Decimal' to 'Long'.
'Public Default Property Prop1(t1 As Short) As Integer': Argument matching parameter 't1' narrows from 'Decimal' to 'Short'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "tc3").WithArguments("Prop1", <![CDATA[
'Public Overloads Default Property Prop1(y1 As Long) As Integer': Argument matching parameter 'y1' narrows from 'Decimal' to 'Long'.
'Public Default Property Prop1(t1 As Short) As Integer': Argument matching parameter 't1' narrows from 'Decimal' to 'Short'.]]>.Value.Replace(vbLf, Environment.NewLine))
)
End Sub
<Fact()>
Public Sub BC30520ERR_ArgumentNarrowing3_RoslynBC30519()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ArgumentNarrowing3">
<file name="a.vb">
Option Strict Off
Module Module1
Class sample7C1(Of X)
Enum E
e1
e2
e3
End Enum
End Class
Class sample7C2(Of T, Y)
Public whichOne As String
Sub Foo(ByVal p1 As sample7C1(Of T).E)
whichOne = "1"
End Sub
Sub Foo(ByVal p1 As sample7C1(Of Y).E)
whichOne = "2"
End Sub
Sub Scenario8(ByVal p1 As sample7C1(Of T).E)
Call Me.Foo(p1)
End Sub
End Class
Sub test()
Dim tc7 As New sample7C2(Of Integer, Integer)
Dim sc7 As New sample7C1(Of Byte)
'COMPILEERROR: BC30520, "sample7C1(Of Long).E.e1"
Call tc7.Foo (sample7C1(Of Long).E.e1)
'COMPILEERROR: BC30520, "sample7C1(Of Short).E.e2"
Call tc7.Foo (sample7C1(Of Short).E.e2)
'COMPILEERROR: BC30520, "sc7.E.e3"
Call tc7.Foo (sc7.E.e3)
End Sub
End Module
</file>
</compilation>)
' BC0000 - Test bug
' Roslyn BC30519 - Dev11 BC30520
compilation.VerifyDiagnostics(
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "Foo").WithArguments("Foo", <![CDATA[
'Public Sub Foo(p1 As Module1.sample7C1(Of Integer).E)': Argument matching parameter 'p1' narrows from 'Module1.sample7C1(Of Long).E' to 'Module1.sample7C1(Of Integer).E'.
'Public Sub Foo(p1 As Module1.sample7C1(Of Integer).E)': Argument matching parameter 'p1' narrows from 'Module1.sample7C1(Of Long).E' to 'Module1.sample7C1(Of Integer).E'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "Foo").WithArguments("Foo", <![CDATA[
'Public Sub Foo(p1 As Module1.sample7C1(Of Integer).E)': Argument matching parameter 'p1' narrows from 'Module1.sample7C1(Of Short).E' to 'Module1.sample7C1(Of Integer).E'.
'Public Sub Foo(p1 As Module1.sample7C1(Of Integer).E)': Argument matching parameter 'p1' narrows from 'Module1.sample7C1(Of Short).E' to 'Module1.sample7C1(Of Integer).E'.]]>.Value.Replace(vbLf, Environment.NewLine)),
Diagnostic(ERRID.WRN_SharedMemberThroughInstance, "sc7.E"),
Diagnostic(ERRID.ERR_NoNonNarrowingOverloadCandidates2, "Foo").WithArguments("Foo", <![CDATA[
'Public Sub Foo(p1 As Module1.sample7C1(Of Integer).E)': Argument matching parameter 'p1' narrows from 'Module1.sample7C1(Of Byte).E' to 'Module1.sample7C1(Of Integer).E'.
'Public Sub Foo(p1 As Module1.sample7C1(Of Integer).E)': Argument matching parameter 'p1' narrows from 'Module1.sample7C1(Of Byte).E' to 'Module1.sample7C1(Of Integer).E'.]]>.Value.Replace(vbLf, Environment.NewLine))
)
'CompilationUtils.AssertTheseErrors(compilation,
' <expected>
'BC30520: Argument matching parameter 'p1' narrows from 'ConsoleApplication10.Module1.sample7C1(Of Long).E' to 'ConsoleApplication10.Module1.sample7C1(Of Integer).E'.
' Call tc7.Foo (sample7C1(Of Long).E.e1)
' ~~~~
'BC30520: Argument matching parameter 'p1' narrows from 'ConsoleApplication10.Module1.sample7C1(Of Short).E' to 'ConsoleApplication10.Module1.sample7C1(Of Integer).E'.
' Call tc7.Foo (sample7C1(Of Short).E.e2)
' ~~~~
'BC30520: Argument matching parameter 'p1' narrows from 'ConsoleApplication10.Module1.sample7C1(Of Byte).E' to 'ConsoleApplication10.Module1.sample7C1(Of Integer).E'.
' Call tc7.Foo (sc7.E.e3)
' ~~~~
'</expected>)
End Sub
<Fact()>
Public Sub BC30521ERR_NoMostSpecificOverload2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoMostSpecificOverload2">
<file name="a.vb">
Module Module1
Class C0(Of T)
Sub Foo(ByVal t1 As T)
End Sub
End Class
Class C1(Of T, Y)
Inherits C0(Of T)
Overloads Sub Foo(ByVal y1 As Y)
End Sub
End Class
Structure S1
Dim i As Integer
End Structure
Class C2
Public Shared Widening Operator CType(ByVal Arg As C2) As C1(Of Integer, Integer)
Return New C1(Of Integer, Integer)
End Operator
Public Shared Widening Operator CType(ByVal Arg As C2) As S1
Return New S1
End Operator
End Class
Sub test()
Dim C As New C1(Of S1, C1(Of Integer, Integer))
Call C.Foo(New C2)
End Sub
End Module
</file>
</compilation>)
compilation.VerifyDiagnostics(Diagnostic(ERRID.ERR_NoMostSpecificOverload2, "Foo").WithArguments("Foo", <![CDATA[
'Public Overloads Sub Module1.C1(Of Module1.S1, Module1.C1(Of Integer, Integer)).Foo(y1 As Module1.C1(Of Integer, Integer))': Not most specific.
'Public Sub Module1.C0(Of Module1.S1).Foo(t1 As Module1.S1)': Not most specific.]]>.Value.Replace(vbLf, Environment.NewLine))
)
End Sub
<Fact()>
Public Sub BC30524ERR_NoGetProperty1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
WriteOnly Property P
Set
End Set
End Property
Shared WriteOnly Property Q
Set
End Set
End Property
Sub M()
Dim o
o = P
o = Me.P
o = Q
o = C.Q
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30524: Property 'P' is 'WriteOnly'.
o = P
~
BC30524: Property 'P' is 'WriteOnly'.
o = Me.P
~~~~
BC30524: Property 'Q' is 'WriteOnly'.
o = Q
~
BC30524: Property 'Q' is 'WriteOnly'.
o = C.Q
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30524ERR_NoGetProperty1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Interface I
Default WriteOnly Property P(s As String)
End Interface
Structure S
Default WriteOnly Property Q(s As String)
Set(value)
End Set
End Property
End Structure
Class C
Default WriteOnly Property R(s As String)
Set(value)
End Set
End Property
Shared Sub M(x As I, y As S, z As C)
x!Q = x!R
y!Q = y!R
z!Q = z!R
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30524: Property 'P' is 'WriteOnly'.
x!Q = x!R
~~~
BC30524: Property 'Q' is 'WriteOnly'.
y!Q = y!R
~~~
BC30524: Property 'R' is 'WriteOnly'.
z!Q = z!R
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30524ERR_NoGetProperty1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module M1
Sub Main()
foo(p)
End Sub
WriteOnly Property p() As Single
Set(ByVal Value As Single)
End Set
End Property
Public Sub foo(ByRef x As Single)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30524: Property 'p' is 'WriteOnly'.
foo(p)
~
</expected>)
End Sub
<Fact(), WorkItem(6810, "DevDiv_Projects/Roslyn")>
Public Sub BC30524ERR_NoGetProperty1_3()
CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
WriteOnly Property P As Object()
Set(value As Object())
End Set
End Property
WriteOnly Property Q As System.Action(Of Object)
Set(value As System.Action(Of Object))
End Set
End Property
WriteOnly Property R As C
Set(value As C)
End Set
End Property
Default ReadOnly Property S(i As Integer)
Get
Return Nothing
End Get
End Property
Sub M()
Dim o
o = P()(1)
o = Q()(2)
o = R()(3)
o = P(1)
o = Q(2)
o = R(3)
End Sub
End Class
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_NoGetProperty1, "P()").WithArguments("P"),
Diagnostic(ERRID.ERR_NoGetProperty1, "Q()").WithArguments("Q"),
Diagnostic(ERRID.ERR_NoGetProperty1, "R()").WithArguments("R"),
Diagnostic(ERRID.ERR_NoGetProperty1, "P").WithArguments("P"),
Diagnostic(ERRID.ERR_NoGetProperty1, "Q").WithArguments("Q"),
Diagnostic(ERRID.ERR_NoGetProperty1, "R").WithArguments("R"))
End Sub
''' <summary>
''' Report BC30524 even in cases when the
''' expression will be ignored.
''' </summary>
''' <remarks></remarks>
<Fact()>
Public Sub BC30524ERR_NoGetProperty1_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Class A
Class B
Friend Const F As Object = Nothing
End Class
Shared WriteOnly Property P As A
Set(value As A)
End Set
End Property
Shared ReadOnly Property Q As A
Get
Return Nothing
End Get
End Property
Shared Sub M()
Dim o As Object
o = P.B.F
o = Q.B.F
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30524: Property 'P' is 'WriteOnly'.
o = P.B.F
~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
o = Q.B.F
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30526ERR_NoSetProperty1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
ReadOnly Property P
Get
Return Nothing
End Get
End Property
Shared ReadOnly Property Q
Get
Return Nothing
End Get
End Property
Sub M()
P = Nothing
Me.P = Nothing
Q = Nothing
C.Q = Nothing
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30526: Property 'P' is 'ReadOnly'.
P = Nothing
~~~~~~~~~~~
BC30526: Property 'P' is 'ReadOnly'.
Me.P = Nothing
~~~~~~~~~~~~~~
BC30526: Property 'Q' is 'ReadOnly'.
Q = Nothing
~~~~~~~~~~~
BC30526: Property 'Q' is 'ReadOnly'.
C.Q = Nothing
~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30526ERR_NoSetProperty1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Interface I
Default ReadOnly Property P(s As String)
End Interface
Structure S
Default ReadOnly Property Q(s As String)
Get
Return Nothing
End Get
End Property
End Structure
Class C
Default ReadOnly Property R(s As String)
Get
Return Nothing
End Get
End Property
Shared Sub M(x As I, y As S, z As C)
x!Q = x!R
y!Q = y!R
z!Q = z!R
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30526: Property 'P' is 'ReadOnly'.
x!Q = x!R
~~~~~~~~~
BC30526: Property 'Q' is 'ReadOnly'.
y!Q = y!R
~~~~~~~~~
BC30526: Property 'R' is 'ReadOnly'.
z!Q = z!R
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30532ERR_DateToDoubleConversion()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DateToDoubleConversion">
<file name="a.vb">
Structure s1
function foo() as double
return #1/1/2000#
End function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30532: Conversion from 'Date' to 'Double' requires calling the 'Date.ToOADate' method.
return #1/1/2000#
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30532ERR_DateToDoubleConversion_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DateToDoubleConversion">
<file name="a.vb">
Imports System
Class C
Shared Sub Main()
For Each x As Double In New Date() {#12:00:00 AM#}
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30532: Conversion from 'Date' to 'Double' requires calling the 'Date.ToOADate' method.
For Each x As Double In New Date() {#12:00:00 AM#}
~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30533ERR_DoubleToDateConversion()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DoubleToDateConversion">
<file name="a.vb">
Structure s1
Function foo() As Date
Dim a As Double = 12
Return a
End Function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30533: Conversion from 'Double' to 'Date' requires calling the 'Date.FromOADate' method.
Return a
~
</expected>)
End Sub
<Fact()>
Public Sub BC30542ERR_ZeroDivide()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DateToDoubleConversion">
<file name="a.vb">
Module M1
'Const z = 0
Sub foo()
Dim s = 1 \ Nothing
Dim m = 1 \ 0
'Dim n = 1 \ z
If (1 \ 0 = 1) Then
End If
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30542: Division by zero occurred while evaluating this expression.
Dim s = 1 \ Nothing
~~~~~~~~~~~
BC30542: Division by zero occurred while evaluating this expression.
Dim m = 1 \ 0
~~~~~
BC30542: Division by zero occurred while evaluating this expression.
If (1 \ 0 = 1) Then
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30545ERR_PropertyAccessIgnored()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PropertyAccessIgnored">
<file name="a.vb">
Class C
Shared Property P
ReadOnly Property Q
Get
Return Nothing
End Get
End Property
Property R(o)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Sub M(o)
P
M(P)
C.P
C.P = Nothing
Q
M(Q)
Me.Q
M(Me.Q)
R(Nothing)
R(Nothing) = Nothing
Me.R(Nothing)
M(Me.R(Nothing))
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30545: Property access must assign to the property or use its value.
P
~
BC30545: Property access must assign to the property or use its value.
C.P
~~~
BC30545: Property access must assign to the property or use its value.
Q
~
BC30545: Property access must assign to the property or use its value.
Me.Q
~~~~
BC30545: Property access must assign to the property or use its value.
R(Nothing)
~~~~~~~~~~
BC30545: Property access must assign to the property or use its value.
Me.R(Nothing)
~~~~~~~~~~~~~
</expected>)
End Sub
<WorkItem(531311, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531311")>
<Fact()>
Public Sub BC30545ERR_PropertyAccessIgnored_Latebound()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="PropertyAccessIgnored">
<file name="a.vb">
Structure s1
Dim z As Integer
Property foo(ByVal i As Integer)
Get
Return Nothing
End Get
Set(ByVal Value)
End Set
End Property
Property foo(ByVal i As Double)
Get
Return Nothing
End Get
Set(ByVal Value)
End Set
End Property
Sub goo()
Dim o As Object = 1
'COMPILEERROR: BC30545, "foo(o)"
foo(o)
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30545: Property access must assign to the property or use its value.
foo(o)
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30547ERR_InterfaceNoDefault1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Namespace N
Interface I
End Interface
Class C
Shared Sub M(x As I)
N(x(0))
N(x!P)
End Sub
Shared Sub N(o As Object)
End Sub
End Class
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30547: 'I' cannot be indexed because it has no default property.
N(x(0))
~
BC30547: 'I' cannot be indexed because it has no default property.
N(x!P)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30554ERR_AmbiguousInUnnamedNamespace1()
Dim Lib1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="App1">
<file name="a.vb">
Public Class C1
End Class
</file>
</compilation>)
Dim Lib2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="App2">
<file name="a.vb">
Public Class C1
End Class
</file>
</compilation>)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="APP">
<file name="a.vb">
Imports System
Module Module1
Sub Main()
Dim obj = New C1()
End Sub
End Module
</file>
</compilation>)
Dim ref1 = New VisualBasicCompilationReference(Lib1)
Dim ref2 = New VisualBasicCompilationReference(Lib2)
compilation1 = compilation1.AddReferences(ref1)
compilation1 = compilation1.AddReferences(ref2)
Dim expectedErrors1 = <errors>
BC30554: 'C1' is ambiguous.
Dim obj = New C1()
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30555ERR_DefaultMemberNotProperty1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Class C
Shared Sub M(a As Array, f As Func(Of Dictionary(Of Object, Object)))
Dim o As Object
o = Function()
Return New Dictionary(Of String, String)
End Function!a
o = a!b
o = f!c
o = f()!d
End Sub
End Class
</file>
</compilation>)
' For now, lambdas result in BC30491 which differs from Dev10.
' This should change once lambda support is complete.
Dim expectedErrors1 = <errors>
BC30555: Default member of 'Function <generated method>() As Dictionary(Of String, String)' is not a property.
o = Function()
~~~~~~~~~~~
BC30555: Default member of 'Array' is not a property.
o = a!b
~
BC30555: Default member of 'Func(Of Dictionary(Of Object, Object))' is not a property.
o = f!c
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30565ERR_ArrayInitializerTooFewDimensions()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ArrayInitializerTooFewDimensions">
<file name="a.vb">
Module Module1
Sub test()
Dim FixedRankArray_1(,) As Double
'COMPILEERROR: BC30565, "(0", BC30198, ","
FixedRankArray_1 = New Double(,) {(0.1), {2.4, 4.6}}
Exit Sub
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30565: Array initializer has too few dimensions.
FixedRankArray_1 = New Double(,) {(0.1), {2.4, 4.6}}
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30566ERR_ArrayInitializerTooManyDimensions()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ArrayInitializerTooManyDimensions">
<file name="a.vb">
Module Module1
Structure S1
Public x As Long
Public s As String
End Structure
Sub foo()
Dim obj = New S1() {{1, "one"}}
Exit Sub
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ArrayInitializerTooManyDimensions, "{1, ""one""}"))
End Sub
' Roslyn too many extra errors (last 4)
<Fact()>
Public Sub BC30566ERR_ArrayInitializerTooManyDimensions_1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ArrayInitializerTooManyDimensions">
<file name="a.vb">
Module Module1
Sub foo()
Dim myArray As Integer(,) = New Integer(2, 1) {{{1, 2}, {3, 4}, {5, 6}}}
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_ArrayInitializerTooManyDimensions, "{1, 2}"),
Diagnostic(ERRID.ERR_ArrayInitializerTooManyDimensions, "{3, 4}"),
Diagnostic(ERRID.ERR_ArrayInitializerTooManyDimensions, "{5, 6}"),
Diagnostic(ERRID.ERR_InitializerTooManyElements1, "{{1, 2}, {3, 4}, {5, 6}}").WithArguments("1"),
Diagnostic(ERRID.ERR_InitializerTooFewElements1, "{{{1, 2}, {3, 4}, {5, 6}}}").WithArguments("2"))
End Sub
<Fact()>
Public Sub BC30567ERR_InitializerTooFewElements1()
CreateCompilationWithMscorlib40(
<compilation name="InitializerTooFewElements1">
<file name="a.vb">
Class A
Sub foo()
Dim x = {{1, 2, 3}, {4, 5}}
End Sub
End Class
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InitializerTooFewElements1, "{4, 5}").WithArguments("1"))
End Sub
<Fact()>
Public Sub BC30567ERR_InitializerTooFewElements1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InitializerTooFewElements1">
<file name="a.vb">
Class A
Sub foo()
Dim x127 As Object(,) = New System.Exception(,) {{New System.AccessViolationException, New System.ArgumentException}, {New System.Exception}}
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30567: Array initializer is missing 1 elements.
Dim x127 As Object(,) = New System.Exception(,) {{New System.AccessViolationException, New System.ArgumentException}, {New System.Exception}}
~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30567ERR_InitializerTooFewElements1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Private A() As Object = New Object(0) {}
Private B As Object() = New Object(2) {}
Private C As Object(,) = New Object(1, 0) {}
Private D As Object(,) = New Object(1, 0) {{}, {2}}
Private E As Object(,) = New Object(0, 2) {}
Private F()() As Object = New Object(0)() {}
Private G()() As Object = New Object(0)() {New Object(0) {}}
End Class
</file>
</compilation>)
compilation.AssertTheseDiagnostics(
<expected>
BC30567: Array initializer is missing 1 elements.
Private D As Object(,) = New Object(1, 0) {{}, {2}}
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30568ERR_InitializerTooManyElements1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InitializerTooManyElements1">
<file name="a.vb">
Class A
Sub foo()
Dim x127 As Object(,) = New System.Exception(,) {{New System.AccessViolationException}, {New System.Exception, New System.ArgumentException}}
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30568: Array initializer has 1 too many elements.
Dim x127 As Object(,) = New System.Exception(,) {{New System.AccessViolationException}, {New System.Exception, New System.ArgumentException}}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30569ERR_NewOnAbstractClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NewOnAbstractClass">
<file name="a.vb">
Class C1
MustInherit Class C2
Public foo As New C2()
End Class
Public foo As New C2()
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30569: 'New' cannot be used on a class that is declared 'MustInherit'.
Public foo As New C2()
~~~~~~~~
BC30569: 'New' cannot be used on a class that is declared 'MustInherit'.
Public foo As New C2()
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30574ERR_StrictDisallowsLateBinding()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="StrictDisallowsLateBinding">
<file name="a.vb">
Module Module1
Dim bol As Boolean
Class C1
Property Prop As Long
End Class
Sub foo()
Dim Obj As Object = New C1()
bol = Obj(1)
bol = Obj!P
End Sub
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30574: Option Strict On disallows late binding.
bol = Obj(1)
~~~
BC30574: Option Strict On disallows late binding.
bol = Obj!P
~~~~~
</expected>)
compilation = compilation.WithOptions(compilation.Options.WithOptionStrict(OptionStrict.Custom))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42017: Late bound resolution; runtime errors could occur.
bol = Obj(1)
~~~
BC42016: Implicit conversion from 'Object' to 'Boolean'.
bol = Obj(1)
~~~~~~
BC42016: Implicit conversion from 'Object' to 'Boolean'.
bol = Obj!P
~~~~~
BC42017: Late bound resolution; runtime errors could occur.
bol = Obj!P
~~~~~
</expected>)
End Sub
<WorkItem(546763, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546763")>
<Fact()>
Public Sub BC30574ERR_StrictDisallowsLateBinding_16745()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Option Infer On
Public Module Program
Sub Main()
Dim a As Object = Nothing
a.DoSomething()
End Sub
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30574: Option Strict On disallows late binding.
a.DoSomething()
~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30574ERR_StrictDisallowsLateBinding1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="StrictDisallowsLateBinding">
<file name="a.vb">
Imports System
Module Program
Delegate Sub d1(ByRef x As Integer, y As Integer)
Sub Main()
Dim obj As Object = New cls1
Dim o As d1 = AddressOf obj.foo
Dim l As Integer = 0
o(l, 2)
Console.WriteLine(l)
End Sub
Class cls1
Shared Sub foo(ByRef x As Integer, y As Integer)
x = 42
Console.WriteLine(x + y)
End Sub
End Class
End Module
</file>
</compilation>, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30574: Option Strict On disallows late binding.
Dim o As d1 = AddressOf obj.foo
~~~~~~~
</expected>)
compilation = compilation.WithOptions(compilation.Options.WithOptionStrict(OptionStrict.Custom))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42017: Late bound resolution; runtime errors could occur.
Dim o As d1 = AddressOf obj.foo
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30577ERR_AddressOfOperandNotMethod()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AddressOfOperandNotMethod">
<file name="a.vb">
Delegate Function MyDelegate()
Module M1
Enum MyEnum
One
End Enum
Sub Main()
Dim x As MyDelegate
Dim oEnum As MyEnum
x = AddressOf oEnum
x.Invoke()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30577: 'AddressOf' operand must be the name of a method (without parentheses).
x = AddressOf oEnum
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30581ERR_AddressOfNotDelegate1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AddressOfNotDelegate1">
<file name="a.vb">
Module M
Sub Main()
Dim x = New Object()
Dim f = AddressOf x.GetType
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30581: 'AddressOf' expression cannot be converted to 'Object' because 'Object' is not a delegate type.
Dim f = AddressOf x.GetType
~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30582ERR_SyncLockRequiresReferenceType1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SyncLockRequiresReferenceType1">
<file name="a.vb">
Imports System
Module M1
Class C
Private Shared count = 0
Sub IncrementCount()
Dim i As Integer
SyncLock i = 0
count = count + 1
End SyncLock
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30582: 'SyncLock' operand cannot be of type 'Boolean' because 'Boolean' is not a reference type.
SyncLock i = 0
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30582ERR_SyncLockRequiresReferenceType1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SyncLockRequiresReferenceType1">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Dim S1_a As New Object()
Dim S1_b As Integer? = 4
Dim S1_c As Integer? = 41
SyncLock If(False, S1_a, S1_a)
End SyncLock
SyncLock If(True, S1_b, S1_b)
End SyncLock
SyncLock If(False, S1_b, 1)
End SyncLock
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30582: 'SyncLock' operand cannot be of type 'Integer?' because 'Integer?' is not a reference type.
SyncLock If(True, S1_b, S1_b)
~~~~~~~~~~~~~~~~~~~~
BC30582: 'SyncLock' operand cannot be of type 'Integer?' because 'Integer?' is not a reference type.
SyncLock If(False, S1_b, 1)
~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30582ERR_SyncLockRequiresReferenceType1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SyncLockRequiresReferenceType1">
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class C
Shared Sub M(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)(_1 As T1, _2 As T2, _3 As T3, _4 As T4, _5 As T5, _6 As T6, _7 As T7)
SyncLock _1
End SyncLock
SyncLock _2
End SyncLock
SyncLock _3
End SyncLock
SyncLock _4
End SyncLock
SyncLock _5
End SyncLock
SyncLock _6
End SyncLock
SyncLock _7
End SyncLock
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30582: 'SyncLock' operand cannot be of type 'T1' because 'T1' is not a reference type.
SyncLock _1
~~
BC30582: 'SyncLock' operand cannot be of type 'T3' because 'T3' is not a reference type.
SyncLock _3
~~
BC30582: 'SyncLock' operand cannot be of type 'T4' because 'T4' is not a reference type.
SyncLock _4
~~
BC30582: 'SyncLock' operand cannot be of type 'T5' because 'T5' is not a reference type.
SyncLock _5
~~
BC30582: 'SyncLock' operand cannot be of type 'T7' because 'T7' is not a reference type.
SyncLock _7
~~
</expected>)
End Sub
<Fact>
Public Sub BC30587ERR_NamedParamArrayArgument()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NamedParamArrayArgument">
<file name="a.vb">
Class C1
Shared Sub Main()
Dim a As New C1
a.abc(s:=10)
End Sub
Sub abc(ByVal ParamArray s() As Integer)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30587: Named argument cannot match a ParamArray parameter.
a.abc(s:=10)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30588ERR_OmittedParamArrayArgument()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OmittedParamArrayArgument">
<file name="a.vb">
Imports System
Imports C1(Of String, Integer)
Class C1(Of T As {Class}, U As Structure)
Public Shared Property Overloaded(ByVal ParamArray y() As Exception) As C2
Get
Return New C2
End Get
Set(ByVal value As C2)
End Set
End Property
End Class
Class C2
End Class
Module M1
Sub FOO()
Overloaded(, , ) = Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30588: Omitted argument cannot match a ParamArray parameter.
Overloaded(, , ) = Nothing
~
BC30588: Omitted argument cannot match a ParamArray parameter.
Overloaded(, , ) = Nothing
~
BC30588: Omitted argument cannot match a ParamArray parameter.
Overloaded(, , ) = Nothing
~
</expected>)
End Sub
<Fact()>
Public Sub BC30611ERR_NegativeArraySize()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NegativeArraySize">
<file name="a.vb">
Class C1
Sub foo()
Dim x8(-2) As String
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30611: Array dimensions cannot have a negative size.
Dim x8(-2) As String
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30611ERR_NegativeArraySize_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NegativeArraySize">
<file name="a.vb">
Class C1
Sub foo()
Dim arr11 As Integer(,) = New Integer(-2, -2) {} ' Invalid
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30611: Array dimensions cannot have a negative size.
Dim arr11 As Integer(,) = New Integer(-2, -2) {} ' Invalid
~~
BC30611: Array dimensions cannot have a negative size.
Dim arr11 As Integer(,) = New Integer(-2, -2) {} ' Invalid
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30611ERR_NegativeArraySize_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NegativeArraySize">
<file name="a.vb">
Class C1
Sub foo()
Dim arr(0 To 0, 0 To -2) As Integer 'Invalid
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30611: Array dimensions cannot have a negative size.
Dim arr(0 To 0, 0 To -2) As Integer 'Invalid
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30614ERR_MyClassAbstractCall1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30614ERR_MyClassAbstractCall1_1">
<file name="a.vb">
MustInherit Class C1
Public Sub UseMyClass()
MyClass.foo()
End Sub
MustOverride Sub foo()
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30614: 'MustOverride' method 'Public MustOverride Sub foo()' cannot be called with 'MyClass'.
MyClass.foo()
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30614ERR_MyClassAbstractCall1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30614ERR_MyClassAbstractCall1_2">
<file name="a.vb">
Public MustInherit Class Base1
Public MustOverride Property P1()
Public Sub M2()
MyClass.P1 = MyClass.P1
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30614: 'MustOverride' method 'Public MustOverride Property P1 As Object' cannot be called with 'MyClass'.
MyClass.P1 = MyClass.P1
~~~~~~~~~~
BC30614: 'MustOverride' method 'Public MustOverride Property P1 As Object' cannot be called with 'MyClass'.
MyClass.P1 = MyClass.P1
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30614ERR_MyClassAbstractCall1_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30614ERR_MyClassAbstractCall1_3">
<file name="a.vb">
Imports System
Public MustInherit Class Base1
Public MustOverride Function F1() As Integer
Public Sub M2()
Dim _func As Func(Of Integer) = AddressOf MyClass.F1
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30614: 'MustOverride' method 'Public MustOverride Function F1() As Integer' cannot be called with 'MyClass'.
Dim _func As Func(Of Integer) = AddressOf MyClass.F1
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30614ERR_MyClassAbstractCall1_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30614ERR_MyClassAbstractCall1_4">
<file name="a.vb">
Imports System
Public MustInherit Class Base1
Public MustOverride Function F1() As Integer
Public Function F2() As Integer
Return 1
End Function
Public Sub M2()
Dim _func As Func(Of Func(Of Integer)) = Function() New Func(Of Integer)(AddressOf MyClass.F1)
Dim _func2 As Func(Of Func(Of Integer)) = Function() New Func(Of Integer)(AddressOf MyClass.F2)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30614: 'MustOverride' method 'Public MustOverride Function F1() As Integer' cannot be called with 'MyClass'.
Dim _func As Func(Of Func(Of Integer)) = Function() New Func(Of Integer)(AddressOf MyClass.F1)
~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30614ERR_MyClassAbstractCall1_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30614ERR_MyClassAbstractCall1_5">
<file name="a.vb">
Imports System
Public MustInherit Class Base1
Public MustOverride Function F1() As Integer
Public Function F2() As Integer
Return 1
End Function
Public FLD As Func(Of Func(Of Integer)) =
Function() New Func(Of Integer)(AddressOf MyClass.F1)
Public Property PROP As Func(Of Func(Of Integer)) =
Function() New Func(Of Integer)(AddressOf MyClass.F1)
Public FLD2 As Func(Of Func(Of Integer)) =
Function() New Func(Of Integer)(AddressOf MyClass.F2)
Public Property PROP2 As Func(Of Func(Of Integer)) =
Function() New Func(Of Integer)(AddressOf MyClass.F2)
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30614: 'MustOverride' method 'Public MustOverride Function F1() As Integer' cannot be called with 'MyClass'.
Function() New Func(Of Integer)(AddressOf MyClass.F1)
~~~~~~~~~~
BC30614: 'MustOverride' method 'Public MustOverride Function F1() As Integer' cannot be called with 'MyClass'.
Function() New Func(Of Integer)(AddressOf MyClass.F1)
~~~~~~~~~~
</expected>)
End Sub
' Different error
<Fact()>
Public Sub BC30615ERR_EndDisallowedInDllProjects()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EndDisallowedInDllProjects">
<file name="a.vb">
Class C1
Function foo()
End
End Class
</file>
</compilation>, options:=TestOptions.ReleaseDll)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30027: 'End Function' expected.
Function foo()
~~~~~~~~~~~~~~
BC30615: 'End' statement cannot be used in class library projects.
End
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Class C1
Sub foo()
dim s = 10
if s>5
dim s = 5
if s > 7
dim s = 7
End If
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30616: Variable 's' hides a variable in an enclosing block.
dim s = 5
~
BC30616: Variable 's' hides a variable in an enclosing block.
dim s = 7
~
</expected>)
End Sub
' spec changes in Roslyn
<WorkItem(528680, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528680")>
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Class C
Private field As Integer = 0
Private Property [property]() As Integer
Get
Return m_property
End Get
Set(value As Integer)
m_property = value
End Set
End Property
Property prop() As Integer
Get
Return 1
End Get
Set(ByVal Value As Integer)
' Was Dev10: COMPILEERROR: BC30616, "value"
' now Dev10: BC30734: 'value' is already declared as a parameter of this method.
For Each value As Byte In New Byte() {1, 2, 3}
Next
End Set
End Property
Private m_property As Integer
Shared Sub Main()
Dim ints As Integer() = New Integer() {1, 2, 3}
Dim strings As String() = New String() {"1", "2", "3"}
Dim conflict As Integer = 1
For Each field As Integer In ints
Next
For Each [property] As String In strings
Next
For Each conflict As String In strings
Next
Dim [qq] As Integer = 23
'COMPILEERROR: BC30616, "qq"
For Each qq As Integer In New Integer() {1, 2, 3}
Next
Dim ww As Integer = 23
'COMPILEERROR: BC30616, "[ww]"
For Each [ww] As Integer In New Integer() {1, 2, 3}
Next
For Each z As Integer In New Integer() {1, 2, 3}
'COMPILEERROR: BC30616, "z"
For Each z As Decimal In New Decimal() {1, 2, 3}
Next
Next
For Each t As Long In New Long() {1, 2, 3}
For Each u As Boolean In New Boolean() {False, True}
'COMPILEERROR: BC30616, "t"
Dim t As Integer
Next
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30734: 'value' is already declared as a parameter of this method.
For Each value As Byte In New Byte() {1, 2, 3}
~~~~~
BC30616: Variable 'conflict' hides a variable in an enclosing block.
For Each conflict As String In strings
~~~~~~~~
BC30616: Variable 'qq' hides a variable in an enclosing block.
For Each qq As Integer In New Integer() {1, 2, 3}
~~
BC30616: Variable 'ww' hides a variable in an enclosing block.
For Each [ww] As Integer In New Integer() {1, 2, 3}
~~~~
BC30616: Variable 'z' hides a variable in an enclosing block.
For Each z As Decimal In New Decimal() {1, 2, 3}
~
BC30616: Variable 't' hides a variable in an enclosing block.
Dim t As Integer
~
BC42024: Unused local variable: 't'.
Dim t As Integer
~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Option Strict Off
Option Infer On
Public Class MyClass1
Public Shared Sub Main()
Dim var1 As Integer
For var1 As Integer = 1 To 10
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42024: Unused local variable: 'var1'.
Dim var1 As Integer
~~~~
BC30616: Variable 'var1' hides a variable in an enclosing block.
For var1 As Integer = 1 To 10
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Public Class MyClass1
Public Shared Sub Main()
Static var2 As Long
For var2 As Short = 0 To 10
Next
var2 = 0
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30616: Variable 'var2' hides a variable in an enclosing block.
For var2 As Short = 0 To 10
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Public Class MyClass1
Public Shared Sub Main()
For varo As Integer = 0 To 10
For varo As Integer = 0 To 10
Next
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30616: Variable 'varo' hides a variable in an enclosing block.
For varo As Integer = 0 To 10
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Public Class MyClass1
Public Shared Sub Main()
For varo As Integer = 0 To 10
Dim [qqq] As Integer
For qqq As Integer = 0 To 10
Next
Dim www As Integer
For [www] As Integer = 0 To 10
Next
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42024: Unused local variable: 'qqq'.
Dim [qqq] As Integer
~~~~~
BC30616: Variable 'qqq' hides a variable in an enclosing block.
For qqq As Integer = 0 To 10
~~~
BC42024: Unused local variable: 'www'.
Dim www As Integer
~~~
BC30616: Variable 'www' hides a variable in an enclosing block.
For [www] As Integer = 0 To 10
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Public Class MyClass1
Public Shared Sub Main()
For x As Integer = 0 To 10
Dim x As Integer
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30616: Variable 'x' hides a variable in an enclosing block.
Dim x As Integer
~
BC42024: Unused local variable: 'x'.
Dim x As Integer
~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_8()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Public Class MyClass1
Public Shared Sub Main()
For var1 As Integer = 0 To 10
For var2 As Integer = 0 To 10
Dim var1 As Integer
Next
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30616: Variable 'var1' hides a variable in an enclosing block.
Dim var1 As Integer
~~~~
BC42024: Unused local variable: 'var1'.
Dim var1 As Integer
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30616ERR_BlockLocalShadowing1_9()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateLocals1">
<file name="a.vb">
Class C
Shared Sub Main()
For Each r As Integer In New Integer() {1, 2, 3}
'Was COMPILEERROR: BC30288, "r" in Dev10
'Now BC30616
Dim r As Integer
Next
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30616: Variable 'r' hides a variable in an enclosing block.
Dim r As Integer
~
BC42024: Unused local variable: 'r'.
Dim r As Integer
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30647ERR_ReturnFromNonFunction()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ReturnFromNonFunction">
<file name="a.vb">
Structure S1
shared sub foo()
return 1
end sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30647: 'Return' statement in a Sub or a Set cannot return a value.
return 1
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30654ERR_ReturnWithoutValue()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ReturnWithoutValue">
<file name="a.vb">
Structure S1
shared Function foo
return
end Function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30654: 'Return' statement in a Function, Get, or Operator must return a value.
return
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30657ERR_UnsupportedMethod1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnsupportedMethod1">
<file name="a.vb">
Class C1
Dim x As System.Threading.IOCompletionCallback
Sub Sub1()
End Sub
Sub New()
x = New System.Threading.IOCompletionCallback(AddressOf Sub1)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30657: 'IOCompletionCallback' has a return type that is not supported or parameter types that are not supported.
x = New System.Threading.IOCompletionCallback(AddressOf Sub1)
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30658ERR_NoNonIndexProperty1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoNonIndexProperty1">
<file name="a.vb">
Option Explicit On
Imports System
Module M1
Class MyAttr
Inherits Attribute
Public Property Prop(ByVal i As Integer) As Integer
Get
Return Nothing
End Get
Set(ByVal Value As Integer)
End Set
End Property
End Class
<MyAttr(Prop:=1)>'BIND:"Prop"
Class C1
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30658: Property 'Prop' with no parameters cannot be found.
<MyAttr(Prop:=1)>'BIND:"Prop"
~~~~
</expected>)
VerifyOperationTreeForTest(Of IdentifierNameSyntax)(compilation, "a.vb", <![CDATA[
IPropertyReferenceOperation: Property M1.MyAttr.Prop(i As System.Int32) As System.Int32 (OperationKind.PropertyReference, Type: System.Int32, IsInvalid) (Syntax: 'Prop')
Instance Receiver:
null]]>.Value)
End Sub
<Fact()>
Public Sub BC30659ERR_BadAttributePropertyType1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadAttributePropertyType1">
<file name="a.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True, Inherited:=True)>
Class MultiUseAttribute
Inherits System.Attribute
Public Sub New(ByVal Value As Integer)
End Sub
End Class
<AttributeUsage(AttributeTargets.Class, Inherited:=True)>
Class SingleUseAttribute
Inherits Attribute
Property A() As Date
Get
Return Nothing
End Get
Set(value As Date)
End Set
End Property
Public Sub New(ByVal Value As Integer)
End Sub
End Class
<SingleUse(1, A:=1.1), MultiUse(1)>
Class Base
End Class
<SingleUse(0, A:=1.1), MultiUse(0)>
Class Derived
Inherits Base
End Class
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_BadAttributePropertyType1, "A").WithArguments("A"),
Diagnostic(ERRID.ERR_DoubleToDateConversion, "1.1"),
Diagnostic(ERRID.ERR_BadAttributePropertyType1, "A").WithArguments("A"),
Diagnostic(ERRID.ERR_DoubleToDateConversion, "1.1")) ' BC30533: Dev10 NOT report
End Sub
<Fact()>
Public Sub BC30661ERR_PropertyOrFieldNotDefined1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PropertyOrFieldNotDefined1">
<file name="a.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class GeneralAttribute
Inherits Attribute
End Class
<General(NotExist:=10)>
Class C1
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_PropertyOrFieldNotDefined1, "NotExist").WithArguments("NotExist"))
End Sub
<Fact()>
Public Sub BC30665ERR_CantThrowNonException()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module M1
Sub Foo()
Throw (Nothing)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30665: 'Throw' operand must derive from 'System.Exception'.
Throw (Nothing)
~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30665ERR_CantThrowNonException_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Class A
End Class
Class C
Shared Sub M1(Of T As System.Exception)(e As T)
Throw e
End Sub
Shared Sub M2(Of T As {System.Exception, New})()
Throw New T()
End Sub
Shared Sub M3(Of T As A)(a As T)
Throw a
End Sub
Shared Sub M4(Of U As New)()
Throw New U()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30665: 'Throw' operand must derive from 'System.Exception'.
Throw a
~~~~~~~
BC30665: 'Throw' operand must derive from 'System.Exception'.
Throw New U()
~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30666ERR_MustBeInCatchToRethrow()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustBeInCatchToRethrow">
<file name="a.vb">
Imports System
Class C1
Sub foo()
Try
Throw
Catch ex As Exception
End Try
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30666: 'Throw' statement cannot omit operand outside a 'Catch' statement or inside a 'Finally' statement.
Throw
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30671ERR_InitWithMultipleDeclarators()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InitWithMultipleDeclarators">
<file name="a.vb">
Imports System
Public Structure Class1
implements IDisposable
Public Sub Dispose() implements Idisposable.Dispose
End Sub
End Structure
Public Class Class2
Sub foo()
Dim a, b As Class1 = New Class1
a = nothing
b = nothing
Using c, d as Class1 = nothing
End Using
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
Dim a, b As Class1 = New Class1
~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36011: 'Using' resource variable must have an explicit initialization.
Using c, d as Class1 = nothing
~
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
Using c, d as Class1 = nothing
~~~~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30671ERR_InitWithMultipleDeclarators02()
Dim source =
<compilation>
<file name="a.vb">
Option strict on
imports system
Class C1
' not so ok
public i, j as integer = 23
' ok enough :)
public k as integer,l as integer = 23
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC30671: Explicit initialization is not permitted with multiple variables declared with a single type specifier.
public i, j as integer = 23
~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30672ERR_InitWithExplicitArraySizes()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InitWithExplicitArraySizes">
<file name="a.vb">
Structure myStruct1
sub foo()
Dim a6(,) As Integer
Dim b6(5, 5) As Integer = a6
end Sub
End structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30672: Explicit initialization is not permitted for arrays declared with explicit bounds.
Dim b6(5, 5) As Integer = a6
~~~~~~~~
BC42104: Variable 'a6' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim b6(5, 5) As Integer = a6
~~
</expected>)
End Sub
<WorkItem(542258, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542258")>
<Fact()>
Public Sub BC30672ERR_InitWithExplicitArraySizes_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InitWithExplicitArraySizes">
<file name="a.vb">
Class Cls1
Public Arr(3) As Cls1 = New Cls1() {New Cls1}
Sub foo
Dim Arr(3) As Cls1 = New Cls1() {New Cls1}
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30672: Explicit initialization is not permitted for arrays declared with explicit bounds.
Public Arr(3) As Cls1 = New Cls1() {New Cls1}
~~~~~~
BC30672: Explicit initialization is not permitted for arrays declared with explicit bounds.
Dim Arr(3) As Cls1 = New Cls1() {New Cls1}
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30672ERR_InitWithExplicitArraySizes_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InitWithExplicitArraySizes">
<file name="a.vb">
Option Infer On
Imports System
Module Module1
Sub Main()
Dim arr14(1, 2) = New Double(1, 2) {} ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30672: Explicit initialization is not permitted for arrays declared with explicit bounds.
Dim arr14(1, 2) = New Double(1, 2) {} ' Invalid
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30676ERR_NameNotEvent2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NameNotEvent2">
<file name="a.vb">
Option Strict Off
Module M
Sub Foo()
Dim x As C1 = New C1
AddHandler x.E, Sub() Console.WriteLine()
End Sub
End Module
Class C1
Public Dim E As String
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30676: 'E' is not an event of 'C1'.
AddHandler x.E, Sub() Console.WriteLine()
~
</expected>)
End Sub
<Fact()>
Public Sub BC30677ERR_AddOrRemoveHandlerEvent()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AddOrRemoveHandlerEvent">
<file name="a.vb">
Module M
Sub Main()
AddHandler Nothing, Nothing
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AddOrRemoveHandlerEvent, "Nothing"))
End Sub
<Fact(), WorkItem(918579, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/918579"), WorkItem(34, "CodePlex")>
Public Sub BC30685ERR_AmbiguousAcrossInterfaces3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AmbiguousAcrossInterfaces3">
<file name="a.vb">
Interface A
Sub fun(ByVal i As Integer)
End Interface
Interface AB
Inherits A
Shadows Sub fun(ByVal i As Integer)
End Interface
Interface AC
Inherits A
Shadows Sub fun(ByVal i As Integer)
End Interface
Interface ABS
Inherits AB, AC
End Interface
Class Test
Sub D(ByVal d As ABS)
d.fun(2)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30521: Overload resolution failed because no accessible 'fun' is most specific for these arguments:
'Sub AB.fun(i As Integer)': Not most specific.
'Sub AC.fun(i As Integer)': Not most specific.
d.fun(2)
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30686ERR_DefaultPropertyAmbiguousAcrossInterfaces4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DefaultPropertyAmbiguousAcrossInterfaces4">
<file name="a.vb">
Option Strict On
Interface IA(Of T)
Default ReadOnly Property P(o As T) As Object
End Interface
Interface IB1(Of T)
Inherits IA(Of T)
End Interface
Interface IB2(Of T)
Inherits IA(Of T)
Default Overloads ReadOnly Property P(x As T, y As T) As Object
End Interface
Interface IB3(Of T)
Inherits IA(Of T)
Default Overloads ReadOnly Property Q(x As Integer, y As Integer, z As Integer) As Object
End Interface
Interface IC1
Inherits IA(Of String), IB1(Of String)
End Interface
Interface IC2
Inherits IA(Of String), IB1(Of Object)
End Interface
Interface IC3
Inherits IA(Of String), IB2(Of String)
End Interface
Interface IC4
Inherits IA(Of String), IB3(Of String)
End Interface
Module M
Sub M(c1 As IC1, c2 As IC2, c3 As IC3, c4 As IC4)
Dim value As Object
value = c1("")
value = c2("")
value = c3("")
value = c4("")
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC40007: Default property 'Q' conflicts with the default property 'P' in the base interface 'IA'. 'Q' will be the default property. 'Q' should be declared 'Shadows'.
Default Overloads ReadOnly Property Q(x As Integer, y As Integer, z As Integer) As Object
~
BC30686: Default property access is ambiguous between the inherited interface members 'ReadOnly Default Property P(o As String) As Object' of interface 'IA(Of String)' and 'ReadOnly Default Property P(o As Object) As Object' of interface 'IA(Of Object)'.
value = c2("")
~~
BC30686: Default property access is ambiguous between the inherited interface members 'ReadOnly Default Property P(o As String) As Object' of interface 'IA(Of String)' and 'ReadOnly Default Property P(x As String, y As String) As Object' of interface 'IB2(Of String)'.
value = c3("")
~~
BC30686: Default property access is ambiguous between the inherited interface members 'ReadOnly Default Property P(o As String) As Object' of interface 'IA(Of String)' and 'ReadOnly Default Property Q(x As Integer, y As Integer, z As Integer) As Object' of interface 'IB3(Of String)'.
value = c4("")
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30690ERR_StructureNoDefault1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Namespace N
Structure S
End Structure
End Namespace
Namespace M
Class C
Shared Sub M(x As N.S)
N(x(0))
N(x!P)
End Sub
Shared Sub N(o As Object)
End Sub
End Class
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30690: Structure 'S' cannot be indexed because it has no default property.
N(x(0))
~
BC30690: Structure 'S' cannot be indexed because it has no default property.
N(x!P)
~
</expected>)
End Sub
<Fact()>
Public Sub BC30734ERR_LocalNamedSameAsParam1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="LocalNamedSameAsParam1">
<file name="a.vb">
Class cls0(Of G)
Sub foo(Of T) (ByVal x As T)
Dim x As T
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30734: 'x' is already declared as a parameter of this method.
Dim x As T
~
BC42024: Unused local variable: 'x'.
Dim x As T
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30734ERR_LocalNamedSameAsParam1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30734ERR_LocalNamedSameAsParam1_2">
<file name="a.vb">
Class C
Private field As Integer = 0
Private Property [property]() As Integer
Get
Return m_property
End Get
Set(value As Integer)
m_property = value
End Set
End Property
Property prop() As Integer
Get
Return 1
End Get
Set(ByVal Value As Integer)
' Was Dev10: COMPILEERROR: BC30616, "value"
' Now: BC30734
For Each value As Byte In New Byte() {1, 2, 3}
Next
End Set
End Property
Private m_property As Integer
Shared Sub Main()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30734: 'value' is already declared as a parameter of this method.
For Each value As Byte In New Byte() {1, 2, 3}
~~~~~
</expected>)
End Sub
<WorkItem(528680, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528680")>
<Fact()>
Public Sub BC30734ERR_LocalNamedSameAsParam1_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BlockLocalShadowing1">
<file name="a.vb">
Public Class MyClass1
Public Shared Sub Main()
End Sub
Sub foo(ByVal p1 As Integer)
For p1 As Integer = 1 To 10
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30734: 'p1' is already declared as a parameter of this method.
For p1 As Integer = 1 To 10
~~
</expected>)
End Sub
<Fact()>
Public Sub BC30742ERR_CannotConvertValue2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports microsoft.visualbasic.strings
Module M1
Sub foo()
Dim i As Integer
Dim c As Char
I% = Asc("")
i% = Asc("" + "" + "" + "" + "" + "" + "" + "" + "")
c = ChrW(65536)
c = ChrW(-68888)
End Sub
End module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30742: Value '' cannot be converted to 'Integer'.
I% = Asc("")
~~~~~~~
BC30742: Value '' cannot be converted to 'Integer'.
i% = Asc("" + "" + "" + "" + "" + "" + "" + "" + "")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30742: Value '65536' cannot be converted to 'Char'.
c = ChrW(65536)
~~~~~~~~~~~
BC30742: Value '-68888' cannot be converted to 'Char'.
c = ChrW(-68888)
~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30742ERR_CannotConvertValue2_2()
Dim source =
<compilation>
<file name="a.vb">
Option strict on
imports system
imports microsoft.visualbasic.strings
Imports System.Text
Class C1
private const f1 as integer = Asc("") ' empty string
private const f2 as integer = AscW("") ' empty string
private const f3 as integer = Asc(CStr(nothing)) ' nothing string
private const f4 as integer = AscW(CStr(nothing)) ' nothing string
private const f5 as Char = ChrW(65536)
Public shared Sub Main(args() as string)
End sub
End Class
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
AssertTheseDiagnostics(c1,
<expected>
BC30742: Value '' cannot be converted to 'Integer'.
private const f1 as integer = Asc("") ' empty string
~~~~~~~
BC30742: Value '' cannot be converted to 'Integer'.
private const f2 as integer = AscW("") ' empty string
~~~~~~~~
BC30742: Value '' cannot be converted to 'Integer'.
private const f3 as integer = Asc(CStr(nothing)) ' nothing string
~~~~~~~~~~~~~~~~~~
BC30742: Value '' cannot be converted to 'Integer'.
private const f4 as integer = AscW(CStr(nothing)) ' nothing string
~~~~~~~~~~~~~~~~~~~
BC30742: Value '65536' cannot be converted to 'Char'.
private const f5 as Char = ChrW(65536)
~~~~~~~~~~~
</expected>)
End Sub
<WorkItem(574290, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/574290")>
<Fact()>
Public Sub BC30742ERR_PassVBNullToAsc()
Dim source =
<compilation name="ExpressionContext">
<file name="a.vb">
Imports Microsoft.VisualBasic
Module Module1
Sub Main
Asc(vbnullstring)
End Sub
End MOdule
</file>
</compilation>
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source).VerifyDiagnostics(Diagnostic(ERRID.ERR_CannotConvertValue2, "Asc(vbnullstring)").WithArguments("", "Integer"))
End Sub
<Fact()>
Public Sub BC30752ERR_OnErrorInSyncLock()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OnErrorInSyncLock">
<file name="a.vb">
Imports System
Class C
Sub IncrementCount()
SyncLock GetType(C)
On Error GoTo 0
End SyncLock
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30752: 'On Error' statements are not valid within 'SyncLock' statements.
On Error GoTo 0
~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30753ERR_NarrowingConversionCollection2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NarrowingConversionCollection2">
<file name="a.vb">
option strict on
Imports System
class C1
Function Main() As Microsoft.VisualBasic.Collection
'Dim collection As Microsoft.VisualBasic. = Nothing
Dim _collection As _Collection = Nothing
return _collection
End function
End Class
Interface _Collection
End Interface
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30753: Option Strict On disallows implicit conversions from '_Collection' to 'Collection'; the Visual Basic 6.0 collection type is not compatible with the .NET Framework collection type.
return _collection
~~~~~~~~~~~
BC42322: Runtime errors might occur when converting '_Collection' to 'Collection'.
return _collection
~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30754ERR_GotoIntoTryHandler()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoTryHandler">
<file name="a.vb">
Imports System
Class C1
Sub Main()
Do While (True)
GoTo LB1
Loop
Try
Catch ex As Exception
Finally
LB1:
End Try
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30754: 'GoTo LB1' is not valid because 'LB1' is inside a 'Try', 'Catch' or 'Finally' statement that does not contain this statement.
GoTo LB1
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(543055, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543055")>
<Fact()>
Public Sub BC30754ERR_GotoIntoTryHandler_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoTryHandler">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Try
GoTo label
GoTo label5
Catch ex As Exception
label:
Finally
label5:
End Try
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30754: 'GoTo label' is not valid because 'label' is inside a 'Try', 'Catch' or 'Finally' statement that does not contain this statement.
GoTo label
~~~~~
BC30754: 'GoTo label5' is not valid because 'label5' is inside a 'Try', 'Catch' or 'Finally' statement that does not contain this statement.
GoTo label5
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30755ERR_GotoIntoSyncLock()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoSyncLock">
<file name="a.vb">
Imports System
Class C
Sub IncrementCount()
SyncLock GetType(C)
label:
End SyncLock
GoTo label
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30755: 'GoTo label' is not valid because 'label' is inside a 'SyncLock' statement that does not contain this statement.
GoTo label
~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30756ERR_GotoIntoWith()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoWith">
<file name="a.vb">
Class C1
Sub Main()
Dim s = New Type1()
With s
.x = 1
GoTo lab1
End With
With s
lab1:
.x = 1
End With
End Sub
End Class
Class Type1
Public x As Short
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30756: 'GoTo lab1' is not valid because 'lab1' is inside a 'With' statement that does not contain this statement.
GoTo lab1
~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30756ERR_GotoIntoWith_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoWith">
<file name="a.vb">
Class C1
Function Main()
Dim s = New Type1()
With s
lab1:
.x = 1
End With
GoTo lab1
End Function
End Class
Class Type1
Public x As Short
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30756: 'GoTo lab1' is not valid because 'lab1' is inside a 'With' statement that does not contain this statement.
GoTo lab1
~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30757ERR_GotoIntoFor()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoFor">
<file name="a.vb">
Class C1
Sub Main()
Dim s = New Type1()
With s
.x = 1
GoTo label1
End With
For i = 0 To 5
GoTo label1
label1:
Continue For
Next
End Sub
End Class
Class Type1
Public x As Short
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30757: 'GoTo label1' is not valid because 'label1' is inside a 'For' or 'For Each' statement that does not contain this statement.
GoTo label1
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30757ERR_GotoIntoFor_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoFor">
<file name="a.vb">
Class C1
Function Main()
if (true)
GoTo label1
End If
For i as Integer = 0 To 5
GoTo label1
label1:
Continue For
Next
return 1
End Function
End Class
Class Type1
Public x As Short
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30757: 'GoTo label1' is not valid because 'label1' is inside a 'For' or 'For Each' statement that does not contain this statement.
GoTo label1
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30757ERR_GotoIntoFor_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GotoIntoFor">
<file name="a.vb">
Option Infer On
Option Strict Off
Class C1
Function Main()
Dim s As Type1 = New Type1()
If (True)
GoTo label1
End If
For Each i In s
GoTo label1
label1:
Continue For
Next
Return 1
End Function
End Class
Class Type1
Public x As Short
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30757: 'GoTo label1' is not valid because 'label1' is inside a 'For' or 'For Each' statement that does not contain this statement.
GoTo label1
~~~~~~
BC32023: Expression is of type 'Type1', which is not a collection type.
For Each i In s
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540627, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540627")>
<Fact()>
Public Sub BC30758ERR_BadAttributeNonPublicConstructor()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadAttributeNonPublicConstructor">
<file name="at30758.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public MustInherit Class MyAttribute
Inherits Attribute
Friend Sub New()
End Sub
End Class
<My()>
Class Foo
End Class
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_AttributeCannotBeAbstract, "My").WithArguments("MyAttribute"),
Diagnostic(ERRID.ERR_BadAttributeNonPublicConstructor, "My"))
End Sub
<Fact()>
Public Sub BC30782ERR_ContinueDoNotWithinDo()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ContinueDoNotWithinDo">
<file name="a.vb">
Class C1
Sub Main()
While True
Continue Do
End While
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30782: 'Continue Do' can only appear inside a 'Do' statement.
Continue Do
~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30783ERR_ContinueForNotWithinFor()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ContinueForNotWithinFor">
<file name="a.vb">
Class C1
Sub Main()
Continue for
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30783: 'Continue For' can only appear inside a 'For' statement.
Continue for
~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30784ERR_ContinueWhileNotWithinWhile()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ContinueWhileNotWithinWhile">
<file name="a.vb">
Class C1
Sub Main()
Continue while
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30784: 'Continue While' can only appear inside a 'While' statement.
Continue while
~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30793ERR_TryCastOfUnconstrainedTypeParam1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TryCastOfUnconstrainedTypeParam1">
<file name="a.vb">
Module M1
Sub Foo(Of T) (ByVal x As T)
Dim o As Object = TryCast(x, T)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30793: 'TryCast' operands must be class-constrained type parameter, but 'T' has no class constraint.
Dim o As Object = TryCast(x, T)
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30794ERR_AmbiguousDelegateBinding2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AmbiguousDelegateBinding2">
<file name="a.vb">
Module Module1
Public Delegate Sub Bar(ByVal x As Integer, ByVal y As Integer)
Public Sub Foo(Of T, R)(ByVal x As T, ByVal y As R)
End Sub
Public Sub Foo(Of T)(ByVal x As T, ByVal y As T)
End Sub
End Module
Class C1
Sub FOO()
Dim x1 As Module1.Bar = AddressOf Module1.Foo
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30794: No accessible 'Foo' is most specific:
Public Sub Foo(Of Integer, Integer)(x As Integer, y As Integer)
Public Sub Foo(Of Integer)(x As Integer, y As Integer)
Dim x1 As Module1.Bar = AddressOf Module1.Foo
~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30917ERR_NoNonObsoleteConstructorOnBase3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoNonObsoleteConstructorOnBase3">
<file name="a.vb">
Imports System
Class C1
<Obsolete(Nothing, True)>
Sub New()
End Sub
End Class
Class C2
Inherits C1
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30917: Class 'C2' must declare a 'Sub New' because the 'Public Sub New()' in its base class 'C1' is marked obsolete.
Class C2
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30918ERR_NoNonObsoleteConstructorOnBase4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoNonObsoleteConstructorOnBase4">
<file name="a.vb">
Imports System
Class C1
<Obsolete("hello", True)>
Sub New()
End Sub
End Class
Class C2
Inherits C1
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30918: Class 'C2' must declare a 'Sub New' because the 'Public Sub New()' in its base class 'C1' is marked obsolete: 'hello'.
Class C2
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30919ERR_RequiredNonObsoleteNewCall3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RequiredNonObsoleteNewCall3">
<file name="a.vb">
Imports System
Class C1
<Obsolete(Nothing, True)>
Sub New()
End Sub
End Class
Class C2
Inherits C1
Sub New()
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30919: First statement of this 'Sub New' must be an explicit call to 'MyBase.New' or 'MyClass.New' because the 'Public Sub New()' in the base class 'C1' of 'C2' is marked obsolete.
Sub New()
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30920ERR_RequiredNonObsoleteNewCall4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RequiredNonObsoleteNewCall4">
<file name="a.vb">
Imports System
Class C1
<Obsolete("hello", True)>
Sub New()
End Sub
End Class
Class C2
Inherits C1
Sub New()
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30920: First statement of this 'Sub New' must be an explicit call to 'MyBase.New' or 'MyClass.New' because the 'Public Sub New()' in the base class 'C1' of 'C2' is marked obsolete: 'hello'.
Sub New()
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(531309, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531309")>
<Fact()>
Public Sub BC30933ERR_LateBoundOverloadInterfaceCall1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LateBoundOverloadInterfaceCall1">
<file name="a.vb">
Module m1
Interface i1
Sub s1(ByVal p1 As Integer)
Sub s1(ByVal p1 As Double)
End Interface
Class c1
Implements i1
Public Overloads Sub s1(ByVal p1 As Integer) Implements i1.s1
End Sub
Public Overloads Sub s2(ByVal p1 As Double) Implements i1.s1
End Sub
End Class
Sub Main()
Dim refer As i1 = New c1
Dim o1 As Object = 3.1415
refer.s1(o1)
End Sub
End Module
Module m2
Interface i1
Property s1(ByVal p1 As Integer)
Property s1(ByVal p1 As Double)
End Interface
Class c1
Implements i1
Public Property s1(p1 As Double) As Object Implements i1.s1
Get
Return Nothing
End Get
Set(value As Object)
End Set
End Property
Public Property s1(p1 As Integer) As Object Implements i1.s1
Get
Return Nothing
End Get
Set(value As Object)
End Set
End Property
End Class
Sub Main()
Dim refer As i1 = New c1
Dim o1 As Object = 3.1415
refer.s1(o1) = 1
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30933: Late bound overload resolution cannot be applied to 's1' because the accessing instance is an interface type.
refer.s1(o1)
~~
BC30933: Late bound overload resolution cannot be applied to 's1' because the accessing instance is an interface type.
refer.s1(o1) = 1
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30934ERR_RequiredAttributeConstConversion2()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
<A(<a/>)>
Class A
Inherits Attribute
Public Sub New(o As Object)
End Sub
End Class
]]></file>
</compilation>, references:=XmlReferences)
compilation.VerifyDiagnostics(Diagnostic(ERRID.ERR_RequiredAttributeConstConversion2, "<a/>").WithArguments("System.Xml.Linq.XElement", "Object"))
End Sub
<Fact()>
Public Sub BC30939ERR_AddressOfNotCreatableDelegate1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AddressOfNotCreatableDelegate1">
<file name="a.vb">
Imports System
Module M1
Sub foo()
Dim x As [Delegate] = AddressOf main
End Sub
Sub main()
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30939: 'AddressOf' expression cannot be converted to '[Delegate]' because type '[Delegate]' is declared 'MustInherit' and cannot be created.
Dim x As [Delegate] = AddressOf main
~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(529157, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529157")>
Public Sub BC30940ERR_ReturnFromEventMethod() 'diag behavior change by design- not worth investing in.
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ReturnFromEventMethod">
<file name="a.vb">
Class C1
Delegate Sub EH()
Custom Event e1 As EH
AddHandler(ByVal value As EH)
Return value
End AddHandler
RemoveHandler(ByVal value As EH)
Return value
End RemoveHandler
RaiseEvent()
Return value
End RaiseEvent
End Event
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30647: 'Return' statement in a Sub or a Set cannot return a value.
Return value
~~~~~~~~~~~~
BC30647: 'Return' statement in a Sub or a Set cannot return a value.
Return value
~~~~~~~~~~~~
BC30647: 'Return' statement in a Sub or a Set cannot return a value.
Return value
~~~~~~~~~~~~
BC30451: 'value' is not declared. It may be inaccessible due to its protection level.
Return value
~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542270, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542270")>
<Fact()>
Public Sub BC30949ERR_ArrayInitializerForNonConstDim()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ArrayInitializerForNonConstDim">
<file name="a.vb">
Option Strict On
Module M
Sub Main()
Dim x as integer = 1
Dim y as Object = New Integer(x) {1, 2}
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30949: Array initializer cannot be specified for a non constant dimension; use the empty initializer '{}'.
Dim y as Object = New Integer(x) {1, 2}
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542270, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542270")>
<Fact()>
Public Sub BC30949ERR_ArrayInitializerForNonConstDim_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ArrayInitializerForNonConstDim">
<file name="a.vb">
Option Strict On
Imports System
Class M1
Public Shared Sub Main()
Dim myLength As Integer = 2
Dim arr As Integer(,) = New Integer(myLength - 1, 1) {{1, 2}, {3, 4}, {5, 6}}
End Sub
Private Class A
Private x As Integer = 1
Private arr As Integer(,) = New Integer(x, 1) {{1, 2}, {3, 4}, {5, 6}}
End Class
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30949: Array initializer cannot be specified for a non constant dimension; use the empty initializer '{}'.
Dim arr As Integer(,) = New Integer(myLength - 1, 1) {{1, 2}, {3, 4}, {5, 6}}
~~~~~~~~~~~~~~~~~~~~~~~~
BC30949: Array initializer cannot be specified for a non constant dimension; use the empty initializer '{}'.
Private arr As Integer(,) = New Integer(x, 1) {{1, 2}, {3, 4}, {5, 6}}
~~~~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30950ERR_DelegateBindingFailure3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DelegateBindingFailure3">
<file name="a.vb">
Option Strict On
Imports System
Module M
Dim f As Action(Of Object) = CType(AddressOf 1.ToString, Action(Of Object))
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30978ERR_IterationVariableShadowLocal1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="IterationVariableShadowLocal1">
<file name="a.vb">
Option Infer On
Option Strict Off
Imports System.Linq
Module M
Sub Bar()
Dim x = From bar In ""
End Sub
Function Foo()
Dim x = From foo In ""
Return Nothing
End Function
End Module
</file>
</compilation>, {Net40.References.SystemCore})
Dim expectedErrors1 = <errors>
BC30978: Range variable 'foo' hides a variable in an enclosing block or a range variable previously defined in the query expression.
Dim x = From foo In ""
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30978ERR_IterationVariableShadowLocal1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="IterationVariableShadowLocal1">
<file name="a.vb">
Option Infer Off
Imports System
Imports System.Linq
Module Program
Sub Main(args As String())
Dim arr As String() = New String() {"aaa", "bbb", "ccc"}
Dim arr_int As Integer() = New Integer() {111, 222, 333}
Dim x = 1
Dim s = If(True, (From x In arr Select x).ToList(), From y As Integer In arr_int Select y)
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore}, options:=TestOptions.ReleaseExe)
Dim expectedErrors1 = <errors>
BC30978: Range variable 'x' hides a variable in an enclosing block or a range variable previously defined in the query expression.
Dim s = If(True, (From x In arr Select x).ToList(), From y As Integer In arr_int Select y)
~
BC30978: Range variable 'x' hides a variable in an enclosing block or a range variable previously defined in the query expression.
Dim s = If(True, (From x In arr Select x).ToList(), From y As Integer In arr_int Select y)
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30980ERR_CircularInference1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CircularInference2">
<file name="a.vb">
Module M
Const x = 1
Sub Main()
Dim x = Function() x
End Sub
End Module
</file>
</compilation>)
' Extra Warning in Roslyn
compilation1.VerifyDiagnostics(
Diagnostic(ERRID.ERR_CircularInference1, "x").WithArguments("x")
)
End Sub
<Fact()>
Public Sub BC30980ERR_CircularInference1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CircularInference2">
<file name="a.vb">
Option Infer On
Imports System
Class C
Shared Sub Main()
Dim f As Func(Of Integer) = Function()
For Each x In x + 1
Return x
Next
return 0
End Function
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30980: Type of 'x' cannot be inferred from an expression containing 'x'.
For Each x In x + 1
~
BC42104: Variable 'x' is used before it has been assigned a value. A null reference exception could result at runtime.
For Each x In x + 1
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30980ERR_CircularInference2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CircularInference2_2">
<file name="a.vb">
Class C
Shared Sub Main()
For Each y In New Object() {New With {Key .y = y}}
Next
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30980: Type of 'y' cannot be inferred from an expression containing 'y'.
For Each y In New Object() {New With {Key .y = y}}
~
BC42104: Variable 'y' is used before it has been assigned a value. A null reference exception could result at runtime.
For Each y In New Object() {New With {Key .y = y}}
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30980ERR_CircularInference2_2a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CircularInference2_2a">
<file name="a.vb">
Class C
Shared Sub Main()
'For Each y As Object In New Object() {y}
For Each y As Object In New Object() {New With {Key .y = y}}
Next
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42104: Variable 'y' is used before it has been assigned a value. A null reference exception could result at runtime.
For Each y As Object In New Object() {New With {Key .y = y}}
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542268, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542268")>
<Fact()>
Public Sub BC30980ERR_CircularInference2_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CircularInference2_3">
<file name="a.vb">
Option Infer On
Class C
Shared Sub Main()
Dim a = a.b
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30980: Type of 'a' cannot be inferred from an expression containing 'a'.
Dim a = a.b
~
BC42104: Variable 'a' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim a = a.b
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542268, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542268")>
<Fact()>
Public Sub BC30980ERR_CircularInference2_3a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CircularInference2_3a">
<file name="a.vb">
Option Infer Off
Class C
Shared Sub Main()
Dim a = a.ToString()
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42104: Variable 'a' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim a = a.ToString()
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(542191, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542191")>
Public Sub BC30982ERR_NoSuitableWidestType1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoSuitableWidestType1">
<file name="a.vb">
Option Infer On
Module M
Sub Main()
Dim stepVar = "1"c
For i = 1 To 10 Step stepVar
Next
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30982: Type of 'i' cannot be inferred because the loop bounds and the step clause do not convert to the same type.
For i = 1 To 10 Step stepVar
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(12261, "DevDiv_Projects/Roslyn")>
Public Sub BC30983ERR_AmbiguousWidestType3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AmbiguousWidestType3">
<file name="a.vb">
Module modErr30983
Sub Test()
'COMPILEERROR : BC30983, "i"
For i = New first(1) To New second(2) Step New third(3)
Next
End Sub
End Module
Class base
End Class
Class first
Inherits base
Dim m_count As ULong
Sub New(ByVal d As ULong)
m_count = d
End Sub
Overloads Shared Widening Operator CType(ByVal d As first) As second
Return New second(d.m_count)
End Operator
End Class
Class second
Inherits base
Dim m_count As ULong
Sub New(ByVal d As ULong)
m_count = d
End Sub
Overloads Shared Widening Operator CType(ByVal d As second) As first
Return New first(d.m_count)
End Operator
End Class
Class third
Inherits first
Sub New(ByVal d As ULong)
MyBase.New(d)
End Sub
Overloads Shared Widening Operator CType(ByVal d As third) As Integer
Return 1
End Operator
End Class
</file>
</compilation>)
'BC30983: Type of 'i' is ambiguous because the loop bounds and the step clause do not convert to the same type.
'For i = New first(1) To New second(2) Step New third(3)
' ~
compilation.VerifyDiagnostics(Diagnostic(ERRID.ERR_AmbiguousWidestType3, "i").WithArguments("i"))
End Sub
<Fact()>
Public Sub BC30989ERR_DuplicateAggrMemberInit1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateAggrMemberInit1">
<file name="a.vb">
Module M
Sub Main()
Dim cust = New Customer() With {.Name = "Bob", .Name = "Robert"}
End Sub
End Module
Class Customer
Property Name As String
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30989: Multiple initializations of 'Name'. Fields and properties can be initialized only once in an object initializer expression.
Dim cust = New Customer() With {.Name = "Bob", .Name = "Robert"}
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30990ERR_NonFieldPropertyAggrMemberInit1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NonFieldPropertyAggrMemberInit1">
<file name="a.vb">
Module M1
Class WithSubX
Public Sub x()
End Sub
End Class
Sub foo()
Dim z As WithSubX = New WithSubX With {.x = 5}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30990: Member 'x' cannot be initialized in an object initializer expression because it is not a field or property.
Dim z As WithSubX = New WithSubX With {.x = 5}
~
</expected>)
End Sub
<Fact()>
Public Sub BC30991ERR_SharedMemberAggrMemberInit1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SharedMemberAggrMemberInit1">
<file name="a.vb">
Module M
Sub Main()
Dim cust As New Customer With {.totalCustomers = 21}
End Sub
End Module
Public Class Customer
Public Shared totalCustomers As Integer
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30991: Member 'totalCustomers' cannot be initialized in an object initializer expression because it is shared.
Dim cust As New Customer With {.totalCustomers = 21}
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30992ERR_ParameterizedPropertyInAggrInit1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ParameterizedPropertyInAggrInit1">
<file name="a.vb">
Module M
Sub Main()
Dim strs As New C1() With {.defaultProp = "One"}
End Sub
End Module
Public Class C1
Private myStrings() As String
Default Property defaultProp(ByVal index As Integer) As String
Get
Return myStrings(index)
End Get
Set(ByVal Value As String)
myStrings(index) = Value
End Set
End Property
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30992: Property 'defaultProp' cannot be initialized in an object initializer expression because it requires arguments.
Dim strs As New C1() With {.defaultProp = "One"}
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30993ERR_NoZeroCountArgumentInitCandidates1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoZeroCountArgumentInitCandidates1">
<file name="a.vb">
Module M
Sub Main()
Dim aCoinObject = nothing
Dim coinCollection As New C1 With {.Item = aCoinObject}
End Sub
End Module
Class C1
WriteOnly Property Item(ByVal Key As String) As Object
Set(ByVal value As Object)
End Set
End Property
WriteOnly Property Item(ByVal Index As Integer) As Object
Set(ByVal value As Object)
End Set
End Property
private WriteOnly Property Item(ByVal Index As Long) As Object
Set(ByVal value As Object)
End Set
End Property
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30993: Property 'Item' cannot be initialized in an object initializer expression because all accessible overloads require arguments.
Dim coinCollection As New C1 With {.Item = aCoinObject}
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC30994ERR_AggrInitInvalidForObject()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AggrInitInvalidForObject">
<file name="a.vb">
Module M
Sub Main()
Dim obj = New Object With {.ToString = "hello"}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30994: Object initializer syntax cannot be used to initialize an instance of 'System.Object'.
Dim obj = New Object With {.ToString = "hello"}
~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31080ERR_ReferenceComparison3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ReferenceComparison3">
<file name="a.vb">
Interface I1
Interface I2
End Interface
End Interface
Class C1
Sub FOO()
Dim scenario1 As I1.I2
If scenario1 = Nothing Then
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42104: Variable 'scenario1' is used before it has been assigned a value. A null reference exception could result at runtime.
If scenario1 = Nothing Then
~~~~~~~~~
BC31080: Operator '=' is not defined for types 'I1.I2' and 'I1.I2'. Use 'Is' operator to compare two reference types.
If scenario1 = Nothing Then
~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31082ERR_CatchVariableNotLocal1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CatchVariableNotLocal1">
<file name="a.vb">
Imports System
Module M
Dim ex As Exception
Sub Main()
Try
Catch ex
End Try
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31082: 'ex' is not a local variable or parameter, and so cannot be used as a 'Catch' variable.
Catch ex
~~
</expected>)
End Sub
<WorkItem(538613, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538613")>
<Fact()>
Public Sub BC30251_ModuleConstructorCall()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module M
Sub [New]()
M.New()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30251: Type 'M' has no constructors.
M.New()
~~~~~
</expected>)
End Sub
<WorkItem(538613, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538613")>
<Fact()>
Public Sub BC30251_ModuleGenericConstructorCall()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module M
Sub [New](Of T)()
M.New(Of Integer)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30251: Type 'M' has no constructors.
M.New(Of Integer)
~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(570936, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/570936")>
Public Sub BC31092ERR_ParamArrayWrongType()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ParamArrayWrongType">
<file name="a.vb">
Module M1
Sub Foo()
Dim x As New C1
Dim sResult As String = x.Foo(1, 2, 3, 4)
End Sub
End Module
Class C1
Function Foo(<System.[ParamArray]()> ByVal x As Integer) As String
Return "He"
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31092: ParamArray parameters must have an array type.
Dim sResult As String = x.Foo(1, 2, 3, 4)
~~~
</expected>)
End Sub
<Fact(), WorkItem(570936, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/570936")>
Public Sub BC31092ERR_ParamArrayWrongType_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ParamArrayWrongType">
<file name="a.vb">
Module M1
Sub Foo()
Dim x As New C1
Dim sResult As String = x.Foo(1)
End Sub
End Module
Class C1
Function Foo(<System.[ParamArray]()> ByVal x As Integer) As String
Return "He"
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31092: ParamArray parameters must have an array type.
Dim sResult As String = x.Foo(1)
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31095ERR_InvalidMyClassReference()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC31095ERR_InvalidMyClassReference">
<file name="a.vb">
Class cls0
Public s2 As String
End Class
Class Cls1
Inherits cls0
Sub New(ByVal x As Short)
End Sub
Sub New()
'COMPILEERROR: BC31095, "MyClass"
MyClass.New(MyClass.s2)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31095: Reference to object under construction is not valid when calling another constructor.
MyClass.New(MyClass.s2)
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31095ERR_InvalidMyBaseReference()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC31095ERR_InvalidMyBaseReference">
<file name="a.vb">
Class cls0
Public s2 As String
End Class
Class Cls1
Inherits cls0
Sub New(ByVal x As Short)
End Sub
Sub New()
'COMPILEERROR: BC31095, "MyBase"
MyClass.New(MyBase.s2)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31095: Reference to object under construction is not valid when calling another constructor.
MyClass.New(MyBase.s2)
~~~~~~
</expected>)
End Sub
<WorkItem(541798, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541798")>
<Fact()>
Public Sub BC31095ERR_InvalidMeReference()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidMeReference">
<file name="a.vb">
Class cls0
Public s2 As String
End Class
Class Cls1
Inherits cls0
Sub New(ByVal x As String)
End Sub
Sub New(ByVal x As Short)
Me.New(Me.s2) 'COMPILEERROR: BC31095, "Me"
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31095: Reference to object under construction is not valid when calling another constructor.
Me.New(Me.s2) 'COMPILEERROR: BC31095, "Me"
~~
</expected>)
End Sub
<WorkItem(541799, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541799")>
<Fact()>
Public Sub BC31096ERR_InvalidImplicitMeReference()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidImplicitMeReference">
<file name="a.vb">
Imports System
Module M1
Class clsTest1
Private strTest As String = "Hello"
Sub New()
'COMPILEERROR: BC31096, "strTest"
Me.New(strTest)
End Sub
Sub New(ByVal ArgX As String)
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31096: Implicit reference to object under construction is not valid when calling another constructor.
Me.New(strTest)
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31096ERR_InvalidImplicitMeReference_MyClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC31096ERR_InvalidImplicitMeReference_MyClass">
<file name="a.vb">
Imports System
Module M1
Class clsTest1
Private strTest As String = "Hello"
Sub New()
'COMPILEERROR: BC31096, "strTest"
MyClass.New(strTest)
End Sub
Sub New(ByVal ArgX As String)
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31096: Implicit reference to object under construction is not valid when calling another constructor.
MyClass.New(strTest)
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31096ERR_InvalidImplicitMeReference_MyBase()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC31096ERR_InvalidImplicitMeReference_MyBase">
<file name="a.vb">
Imports System
Module M1
Class clsTest0
Public Sub New(ByVal strTest As String)
End Sub
End Class
Class clsTest1
Inherits clsTest0
Private strTest As String = "Hello"
Sub New()
'COMPILEERROR: BC31096, "strTest"
MyBase.New(strTest)
End Sub
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31096: Implicit reference to object under construction is not valid when calling another constructor.
MyBase.New(strTest)
~~~~~~~
</expected>)
End Sub
' Different error
<Fact()>
Public Sub BC31109ERR_InAccessibleCoClass3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="C">
<file name="a.vb">
Imports System.Runtime.InteropServices
<Assembly: ImportedFromTypeLib("NoPIANew1-PIA2.dll")>
<Assembly: Guid("f9c2d51d-4f44-45f0-9eda-c9d599b58257")>
Public Class Class1
<Guid("bd60d4b3-f50b-478b-8ef2-e777df99d810")> _
<ComImport()> _
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
<CoClass(GetType(FooImpl))> _
Public Interface IFoo
End Interface
<Guid("c9dcf748-b634-4504-a7ce-348cf7c61891")> _
Friend Class FooImpl
End Class
End Class
</file>
</compilation>)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InAccessibleCoClass3">
<file name="a.vb">
Public Module Module1
Public Sub Main()
Dim i1 As New Class1.IFoo(1)
Dim i2 = New Class1.IFoo(Nothing)
End Sub
End Module
</file>
</compilation>)
Dim compRef = New VisualBasicCompilationReference(compilation)
compilation1 = compilation1.AddReferences(compRef)
compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_InAccessibleCoClass3, "New Class1.IFoo(1)").WithArguments("Class1.FooImpl", "Class1.IFoo", "Friend"),
Diagnostic(ERRID.ERR_InAccessibleCoClass3, "New Class1.IFoo(Nothing)").WithArguments("Class1.FooImpl", "Class1.IFoo", "Friend"))
End Sub
<WorkItem(6977, "DevDiv_Projects/Roslyn")>
<Fact()>
Public Sub BC31110ERR_MissingValuesForArraysInApplAttrs()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingValuesForArraysInApplAttrs">
<file name="a.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
Inherits Attribute
Public Sub New(ByVal o As Object)
End Sub
End Class
Namespace AttributeRegress003
Friend Module AttributeRegress003mod
'COMPILEERROR: BC31110, "{}"
<My(New Integer(3) {})> Class Test
End Class
End Module
End Namespace
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_MissingValuesForArraysInApplAttrs, "{}"))
End Sub
<Fact()>
Public Sub BC31102ERR_NoAccessibleSet()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoAccessibleSet">
<file name="a.vb">
Class A
Shared Property P
Get
Return Nothing
End Get
Private Set
End Set
End Property
Property Q
Get
Return Nothing
End Get
Private Set
End Set
End Property
End Class
Class B
Sub M(ByVal x As A)
A.P = Nothing
x.Q = Nothing
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31102: 'Set' accessor of property 'P' is not accessible.
A.P = Nothing
~~~~~~~~~~~~~
BC31102: 'Set' accessor of property 'Q' is not accessible.
x.Q = Nothing
~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31103ERR_NoAccessibleGet()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoAccessibleGet">
<file name="a.vb">
Class A
Shared Property P
Private Get
Return Nothing
End Get
Set
End Set
End Property
Property Q
Private Get
Return Nothing
End Get
Set
End Set
End Property
End Class
Class B
Sub M(ByVal x As A)
N(A.P)
N(x.Q)
End Sub
Sub N(ByVal o As Object)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31103: 'Get' accessor of property 'P' is not accessible.
N(A.P)
~~~
BC31103: 'Get' accessor of property 'Q' is not accessible.
N(x.Q)
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31143ERR_DelegateBindingIncompatible2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DelegateBindingIncompatible2">
<file name="a.vb">
Public Class C1
Delegate Function FunDel(ByVal i As Integer, ByVal d As Double) As Integer
Function ExampleMethod1(ByVal m As Integer, ByVal aDate As Date) As Integer
Return 1
End Function
Sub Main()
Dim d1 As FunDel = AddressOf ExampleMethod1
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31143: Method 'Public Function ExampleMethod1(m As Integer, aDate As Date) As Integer' does not have a signature compatible with delegate 'Delegate Function C1.FunDel(i As Integer, d As Double) As Integer'.
Dim d1 As FunDel = AddressOf ExampleMethod1
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31148ERR_UndefinedXmlPrefix()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns:p0="http://roslyn/">
Module M
Private F1 = GetXmlNamespace(p1)
Private F2 = <%= GetXmlNamespace(p0) %>
Private F3 = <%= GetXmlNamespace(p3) %>
Private F4 = <p4:x xmlns:p4="http://roslyn/"><%= GetXmlNamespace(p4) %></p4:x>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31148: XML namespace prefix 'p1' is not defined.
Private F1 = GetXmlNamespace(p1)
~~
BC31172: An embedded expression cannot be used here.
Private F2 = <%= GetXmlNamespace(p0) %>
~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31172: An embedded expression cannot be used here.
Private F3 = <%= GetXmlNamespace(p3) %>
~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31148: XML namespace prefix 'p3' is not defined.
Private F3 = <%= GetXmlNamespace(p3) %>
~~
BC31148: XML namespace prefix 'p4' is not defined.
Private F4 = <p4:x xmlns:p4="http://roslyn/"><%= GetXmlNamespace(p4) %></p4:x>
~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31148ERR_UndefinedXmlPrefix_1()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports System.Xml.Linq
Class C
Private F1 As XElement = <p1:a q1:b="c" xmlns:p1="..." xmlns:q1="..."/>
Private F2 As XElement = <p2:a q2:b="c"><b xmlns:p2="..." xmlns:q2="..."/></p2:a>
Private F3 As String = <p3:a q3:b="c" xmlns:p3="..." xmlns:q3="..."/>.<p3:a>.@q3:b
End Class
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31148: XML namespace prefix 'p2' is not defined.
Private F2 As XElement = <p2:a q2:b="c"><b xmlns:p2="..." xmlns:q2="..."/></p2:a>
~~
BC31148: XML namespace prefix 'q2' is not defined.
Private F2 As XElement = <p2:a q2:b="c"><b xmlns:p2="..." xmlns:q2="..."/></p2:a>
~~
BC31148: XML namespace prefix 'p3' is not defined.
Private F3 As String = <p3:a q3:b="c" xmlns:p3="..." xmlns:q3="..."/>.<p3:a>.@q3:b
~~
BC31148: XML namespace prefix 'q3' is not defined.
Private F3 As String = <p3:a q3:b="c" xmlns:p3="..." xmlns:q3="..."/>.<p3:a>.@q3:b
~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31148ERR_UndefinedXmlPrefix_2()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns:p0="...">
Module M
Private F = <x1 xmlns:p1="...">
<x2 xmlns:p2="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
<%=
<x3>
<x4 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
<%=
<x5>
<x6 xmlns:p6="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
<%=
<x7 xmlns:p7="...">
<x8 xmlns:p8="...">
<x9 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="..."/>
</x8>
</x7>
%>
</x6>
</x5>
%>
</x4>
</x3>
%>
</x2>
</x1>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31148: XML namespace prefix 'p6' is not defined.
<x2 xmlns:p2="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p7' is not defined.
<x2 xmlns:p2="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p8' is not defined.
<x2 xmlns:p2="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p1' is not defined.
<x4 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p2' is not defined.
<x4 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p6' is not defined.
<x4 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p7' is not defined.
<x4 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p8' is not defined.
<x4 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p1' is not defined.
<x6 xmlns:p6="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p2' is not defined.
<x6 xmlns:p6="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p7' is not defined.
<x6 xmlns:p6="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p8' is not defined.
<x6 xmlns:p6="..." p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="...">
~~
BC31148: XML namespace prefix 'p1' is not defined.
<x9 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="..."/>
~~
BC31148: XML namespace prefix 'p2' is not defined.
<x9 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="..."/>
~~
BC31148: XML namespace prefix 'p6' is not defined.
<x9 p0:a0="..." p1:a1="..." p2:a2="..." p6:a6="..." p7:a7="..." p8:a8="..."/>
~~
]]></errors>)
End Sub
<WorkItem(531633, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531633")>
<Fact()>
Public Sub BC31148ERR_UndefinedXmlPrefix_3()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Module M
Sub Main()
Dim x As Object
x = <x/>.@Return:a
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31148: XML namespace prefix 'Return' is not defined.
x = <x/>.@Return:a
~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31149ERR_DuplicateXmlAttribute()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Module M
Private F1 = <x a="b" a="c" A="d" A="e"/>
Private F2 = <x a="b" a="c" a="d" xmlns="http://roslyn"/>
Private F3 = <x p:a="b" p:a="c" xmlns:p="http://roslyn"/>
Private F4 = <x xmlns:a="b" xmlns:a="c"/>
Private F5 = <x p:a="b" q:a="c" xmlns:p="http://roslyn" xmlns:q="http://roslyn"/>
Private F6 = <x p:a="b" P:a="c" xmlns:p="http://roslyn/p" xmlns:P="http://roslyn/P"/>
Private F7 = <x a="b" <%= "a" %>="c" <%= "a" %>="d"/>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31149: Duplicate XML attribute 'a'.
Private F1 = <x a="b" a="c" A="d" A="e"/>
~
BC31149: Duplicate XML attribute 'A'.
Private F1 = <x a="b" a="c" A="d" A="e"/>
~
BC31149: Duplicate XML attribute 'a'.
Private F2 = <x a="b" a="c" a="d" xmlns="http://roslyn"/>
~
BC31149: Duplicate XML attribute 'a'.
Private F2 = <x a="b" a="c" a="d" xmlns="http://roslyn"/>
~
BC31149: Duplicate XML attribute 'p:a'.
Private F3 = <x p:a="b" p:a="c" xmlns:p="http://roslyn"/>
~~~
BC31149: Duplicate XML attribute 'xmlns:a'.
Private F4 = <x xmlns:a="b" xmlns:a="c"/>
~~~~~~~
BC31149: Duplicate XML attribute 'q:a'.
Private F5 = <x p:a="b" q:a="c" xmlns:p="http://roslyn" xmlns:q="http://roslyn"/>
~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31149ERR_DuplicateXmlAttribute_1()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports <xmlns="http://roslyn/">
Imports <xmlns:p="http://roslyn/">
Imports <xmlns:q="">
Class C
Private Shared F1 As Object = <x a="b" a="c"/>
Private Shared F2 As Object = <x p:a="b" a="c"/>
Private Shared F3 As Object = <x q:a="b" a="c"/>
End Class
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31149: Duplicate XML attribute 'a'.
Private Shared F1 As Object = <x a="b" a="c"/>
~
BC31149: Duplicate XML attribute 'a'.
Private Shared F3 As Object = <x q:a="b" a="c"/>
~
]]></errors>)
End Sub
' Should report duplicate xmlns attributes, even for xmlns
' attributes that match Imports since those have special handling.
<Fact()>
Public Sub BC31149ERR_DuplicateXmlAttribute_2()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"<xmlns:p=""http://roslyn/p"">"}))
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports <xmlns:q="http://roslyn/q">
Module M
Private F1 As Object = <x xmlns:p="http://roslyn/p" xmlns:p="http://roslyn/other"/>
Private F2 As Object = <x xmlns:q="http://roslyn/other" xmlns:q="http://roslyn/q"/>
End Module
]]></file>
</compilation>, references:=XmlReferences, options:=options)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31149: Duplicate XML attribute 'xmlns:p'.
Private F1 As Object = <x xmlns:p="http://roslyn/p" xmlns:p="http://roslyn/other"/>
~~~~~~~
BC31149: Duplicate XML attribute 'xmlns:q'.
Private F2 As Object = <x xmlns:q="http://roslyn/other" xmlns:q="http://roslyn/q"/>
~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31152ERR_ReservedXmlPrefix()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns="http://roslyn/">
Imports <xmlns:xml="http://roslyn/xml">
Imports <xmlns:xmlns="http://roslyn/xmlns">
Imports <xmlns:Xml="http://roslyn/xml">
Imports <xmlns:Xmlns="http://roslyn/xmlns">
Module M
Private F1 As Object = <x
xmlns="http://roslyn/"
xmlns:xml="http://roslyn/xml"
xmlns:xmlns="http://roslyn/xmlns"/>
Private F2 As Object = <x
xmlns:XML="http://roslyn/xml"
xmlns:XMLNS="http://roslyn/xmlns"/>
Private F3 As Object = <x
xmlns=""
xmlns:xml=""
xmlns:xmlns=""/>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31152: XML namespace prefix 'xml' is reserved for use by XML and the namespace URI cannot be changed.
Imports <xmlns:xml="http://roslyn/xml">
~~~
BC31152: XML namespace prefix 'xmlns' is reserved for use by XML and the namespace URI cannot be changed.
Imports <xmlns:xmlns="http://roslyn/xmlns">
~~~~~
BC31152: XML namespace prefix 'xml' is reserved for use by XML and the namespace URI cannot be changed.
xmlns:xml="http://roslyn/xml"
~~~
BC31152: XML namespace prefix 'xmlns' is reserved for use by XML and the namespace URI cannot be changed.
xmlns:xmlns="http://roslyn/xmlns"/>
~~~~~
BC31152: XML namespace prefix 'xml' is reserved for use by XML and the namespace URI cannot be changed.
xmlns:xml=""
~~~
BC31152: XML namespace prefix 'xmlns' is reserved for use by XML and the namespace URI cannot be changed.
xmlns:xmlns=""/>
~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31152ERR_ReservedXmlPrefix_1()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns:xml="http://www.w3.org/XML/1998/namespace">
Imports <xmlns:xmlns="http://www.w3.org/XML/1998/namespace">
Module M
Private F1 As Object = <x
xmlns:xml="http://www.w3.org/2000/xmlns/"
xmlns:xmlns="http://www.w3.org/2000/xmlns/"/>
Private F2 As Object = <x
xmlns:xml="http://www.w3.org/XML/1998/NAMESPACE"/>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31152: XML namespace prefix 'xmlns' is reserved for use by XML and the namespace URI cannot be changed.
Imports <xmlns:xmlns="http://www.w3.org/XML/1998/namespace">
~~~~~
BC31152: XML namespace prefix 'xml' is reserved for use by XML and the namespace URI cannot be changed.
xmlns:xml="http://www.w3.org/2000/xmlns/"
~~~
BC31152: XML namespace prefix 'xmlns' is reserved for use by XML and the namespace URI cannot be changed.
xmlns:xmlns="http://www.w3.org/2000/xmlns/"/>
~~~~~
BC31152: XML namespace prefix 'xml' is reserved for use by XML and the namespace URI cannot be changed.
xmlns:xml="http://www.w3.org/XML/1998/NAMESPACE"/>
~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31168ERR_NoXmlAxesLateBinding()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Module M1
Sub M()
Dim a = Nothing
Dim b As Object = Nothing
Dim c As Object
c = a.<x>
c = b.@a
End Sub
End Module
]]></file>
<file name="b.vb"><![CDATA[
Option Strict On
Module M2
Sub M()
Dim a As Object = Nothing
Dim b = Nothing
Dim c As Object
c = a...<x>
c = b.@<a>
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31168: XML axis properties do not support late binding.
c = a.<x>
~~~~~
BC31168: XML axis properties do not support late binding.
c = b.@a
~~~~
BC31168: XML axis properties do not support late binding.
c = a...<x>
~~~~~~~
BC31168: XML axis properties do not support late binding.
c = b.@<a>
~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31172ERR_EmbeddedExpression()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"<xmlns:p=<%= M1.F %>>"}))
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns:q=<%= M1.F %>>
Module M1
Private F = "..."
End Module
Module M2
Public F = <x xmlns=<%= M1.F %>/>
End Module
]]></file>
</compilation>, references:=XmlReferences, options:=options)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31172: Error in project-level import '<xmlns:p=<%= M1.F %>>' at '<%= M1.F %>' : An embedded expression cannot be used here.
BC31172: An embedded expression cannot be used here.
Imports <xmlns:q=<%= M1.F %>>
~~~~~~~~~~~
BC31172: An embedded expression cannot be used here.
Public F = <x xmlns=<%= M1.F %>/>
~~~~~~~~~~~
BC30389: 'M1.F' is not accessible in this context because it is 'Private'.
Public F = <x xmlns=<%= M1.F %>/>
~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31183ERR_ReservedXmlNamespace()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"<xmlns=""http://www.w3.org/XML/1998/namespace"">", "<xmlns:p1=""http://www.w3.org/2000/xmlns/"">"}))
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns="http://www.w3.org/XML/1998/namespace">
Imports <xmlns:p2="http://www.w3.org/2000/xmlns/">
Module M
Private F1 As Object = <x
xmlns="http://www.w3.org/2000/xmlns/"
xmlns:p3="http://www.w3.org/XML/1998/namespace"/>
Private F2 As Object = <x
xmlns="http://www.w3.org/2000/XMLNS/"
xmlns:p4="http://www.w3.org/XML/1998/NAMESPACE"/>
End Module
]]></file>
</compilation>, references:=XmlReferences, options:=options)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31183: Error in project-level import '<xmlns:p1="http://www.w3.org/2000/xmlns/">' at '"http://www.w3.org/2000/xmlns/"' : Prefix 'p1' cannot be bound to namespace name reserved for 'xmlns'.
BC31183: Error in project-level import '<xmlns="http://www.w3.org/XML/1998/namespace">' at '"http://www.w3.org/XML/1998/namespace"' : Prefix '' cannot be bound to namespace name reserved for 'xml'.
BC31183: Prefix '' cannot be bound to namespace name reserved for 'xml'.
Imports <xmlns="http://www.w3.org/XML/1998/namespace">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31183: Prefix 'p2' cannot be bound to namespace name reserved for 'xmlns'.
Imports <xmlns:p2="http://www.w3.org/2000/xmlns/">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31183: Prefix '' cannot be bound to namespace name reserved for 'xmlns'.
xmlns="http://www.w3.org/2000/xmlns/"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31183: Prefix 'p3' cannot be bound to namespace name reserved for 'xml'.
xmlns:p3="http://www.w3.org/XML/1998/namespace"/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31184ERR_IllegalDefaultNamespace()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"<xmlns="""">", "<xmlns:p="""">"}))
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns="">
Imports <xmlns:q="">
Module M
Private F As Object = <x xmlns="" xmlns:r=""/>
End Module
]]></file>
</compilation>, references:=XmlReferences, options:=options)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31184: Namespace declaration with prefix cannot have an empty value inside an XML literal.
Private F As Object = <x xmlns="" xmlns:r=""/>
~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31189ERR_IllegalXmlnsPrefix()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns:p="">
Imports <xmlns:XMLNS="">
Module M
Private F1 As Object = <xmlns/>
Private F2 As Object = <xmlns:x/>
Private F3 As Object = <p:xmlns/>
Private F4 As Object = <XMLNS:x/>
Private F5 As Object = <x/>.<xmlns>
Private F6 As Object = <x/>.<xmlns:y>
Private F7 As Object = <x/>.<p:xmlns>
Private F8 As Object = <x/>.<XMLNS:y>
Private F9 As Object = <x/>.@xmlns
Private F10 As Object = <x/>.@xmlns:z
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31189: Element names cannot use the 'xmlns' prefix.
Private F2 As Object = <xmlns:x/>
~~~~~
BC31189: Element names cannot use the 'xmlns' prefix.
Private F6 As Object = <x/>.<xmlns:y>
~~~~~
]]></errors>)
End Sub
' No ref to system.xml.dll
<Fact()>
Public Sub BC31190ERR_XmlFeaturesNotAvailable()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M1
Sub Foo()
Dim x = Function() <aoeu>
<%= 5 %>
<%= (Function() "five")() %>
</aoeu>
Dim y = Function() <aoeu val=<%= (Function() <htns></htns>)().ToString() %>/>
End Sub
End Module
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Dim x = Function() <aoeu>
~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Dim y = Function() <aoeu val=<%= (Function() <htns></htns>)().ToString() %>/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31190ERR_XmlFeaturesNotAvailable_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports <xmlns:p="...">
Module M
Private A = <a><b><%= <c/> %></b></a>
Private B = <a b=<%= <c/> %>/>
Private C = <a/>.<b>.<c>
Private D = <%= A %>
Private E = <%= <x><%= A %></x> %>
Private F = <a/>.<a>.<b>
Private G = <a b="c"/>.<a>.@b
Private H = <a/>...<b>
Private J = <!-- comment -->
Private K = <?xml version="1.0"?><x/>
End Module
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private A = <a><b><%= <c/> %></b></a>
~~~~~~~~~~~~~~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private B = <a b=<%= <c/> %>/>
~~~~~~~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private C = <a/>.<b>.<c>
~~~~~~~~~~~~
BC31172: An embedded expression cannot be used here.
Private D = <%= A %>
~~~~~~~~
BC31172: An embedded expression cannot be used here.
Private E = <%= <x><%= A %></x> %>
~~~~~~~~~~~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private E = <%= <x><%= A %></x> %>
~~~~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private F = <a/>.<a>.<b>
~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private G = <a b="c"/>.<a>.@b
~~~~~~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private H = <a/>...<b>
~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private J = <!-- comment -->
~~~~~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private K = <?xml version="1.0"?><x/>
~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31190ERR_XmlFeaturesNotAvailable_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module M
Private F1 = <x><![CDATA[str]]></>
Private F2 = <![CDATA[str]]>
End Module
</file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors>
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private F1 = <x><![CDATA[str]]></>
~~~~~~~~~~~~~~~~~~~~~
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private F2 = <![CDATA[str]]>
~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub BC31190ERR_XmlFeaturesNotAvailable_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M
Private F = GetXmlNamespace()
End Module
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types.
Private F = GetXmlNamespace()
~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC42361WRN_UseValueForXmlExpression3()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict Off
Imports System.Collections.Generic
Imports System.Xml.Linq
Class A
End Class
NotInheritable Class B
End Class
Module M
Sub M(Of T As Class)()
Dim _o As Object
Dim _s As String
Dim _a As A
Dim _b As B
Dim _t As T
_o = <x/>.<y>
_o = CType(<x/>.<y>, Object)
_o = DirectCast(<x/>.<y>, Object)
_o = TryCast(<x/>.<y>, Object)
_s = <x/>.<y>
_s = CType(<x/>.<y>, String)
_s = DirectCast(<x/>.<y>, String)
_s = TryCast(<x/>.<y>, String)
_a = <x/>.<y>
_a = CType(<x/>.<y>, A)
_a = DirectCast(<x/>.<y>, A)
_a = TryCast(<x/>.<y>, A)
_b = <x/>.<y>
_b = CType(<x/>.<y>, B)
_b = DirectCast(<x/>.<y>, B)
_b = TryCast(<x/>.<y>, B)
_t = <x/>.<y>
_t = CType(<x/>.<y>, T)
_t = DirectCast(<x/>.<y>, T)
_t = TryCast(<x/>.<y>, T)
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = <x/>.<y>
~~~~~~~~
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = CType(<x/>.<y>, String)
~~~~~~~~
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = DirectCast(<x/>.<y>, String)
~~~~~~~~
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = TryCast(<x/>.<y>, String)
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = <x/>.<y>
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = CType(<x/>.<y>, B)
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = DirectCast(<x/>.<y>, B)
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = TryCast(<x/>.<y>, B)
~~~~~~~~
]]></errors>)
End Sub
' Same as above but with "Option Strict On".
<Fact()>
Public Sub BC42361WRN_UseValueForXmlExpression3_1()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Imports System.Collections.Generic
Imports System.Xml.Linq
Class A
End Class
NotInheritable Class B
End Class
Module M
Sub M(Of T As Class)()
Dim _o As Object
Dim _s As String
Dim _a As A
Dim _b As B
Dim _t As T
_o = <x/>.<y>
_o = CType(<x/>.<y>, Object)
_o = DirectCast(<x/>.<y>, Object)
_o = TryCast(<x/>.<y>, Object)
_s = <x/>.<y>
_s = CType(<x/>.<y>, String)
_s = DirectCast(<x/>.<y>, String)
_s = TryCast(<x/>.<y>, String)
_a = <x/>.<y>
_a = CType(<x/>.<y>, A)
_a = DirectCast(<x/>.<y>, A)
_a = TryCast(<x/>.<y>, A)
_b = <x/>.<y>
_b = CType(<x/>.<y>, B)
_b = DirectCast(<x/>.<y>, B)
_b = TryCast(<x/>.<y>, B)
_t = <x/>.<y>
_t = CType(<x/>.<y>, T)
_t = DirectCast(<x/>.<y>, T)
_t = TryCast(<x/>.<y>, T)
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30512: Option Strict On disallows implicit conversions from 'IEnumerable(Of XElement)' to 'String'.
_s = <x/>.<y>
~~~~~~~~
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = <x/>.<y>
~~~~~~~~
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = CType(<x/>.<y>, String)
~~~~~~~~
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = DirectCast(<x/>.<y>, String)
~~~~~~~~
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = TryCast(<x/>.<y>, String)
~~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'IEnumerable(Of XElement)' to 'A'.
_a = <x/>.<y>
~~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'IEnumerable(Of XElement)' to 'B'.
_b = <x/>.<y>
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = <x/>.<y>
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = CType(<x/>.<y>, B)
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = DirectCast(<x/>.<y>, B)
~~~~~~~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XElement)' to 'B'.
_b = TryCast(<x/>.<y>, B)
~~~~~~~~
BC30512: Option Strict On disallows implicit conversions from 'IEnumerable(Of XElement)' to 'T'.
_t = <x/>.<y>
~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC42361WRN_UseValueForXmlExpression3_2()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict Off
Imports System.Collections.Generic
Imports System.Xml.Linq
Class X
Inherits XElement
Public Sub New(name As XName)
MyBase.New(name)
End Sub
End Class
Interface IEnumerableOfXElement
Inherits IEnumerable(Of XElement)
End Interface
Module M
Sub M(Of T As XElement)(_1 As XElement,
_2 As IEnumerable(Of XElement),
_3 As XElement(),
_4 As List(Of XElement),
_5 As IEnumerable(Of XObject),
_6 As IEnumerable(Of XElement)(),
_7 As IEnumerableOfXElement,
_8 As IEnumerable(Of X),
_9 As IEnumerable(Of T))
Dim o As String
o = _1
o = _2
o = _3
o = _4
o = _5
o = _6
o = _7
o = _8
o = _9
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC42361: Cannot convert 'IEnumerable(Of XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
o = _2
~~
BC30311: Value of type 'XElement()' cannot be converted to 'String'.
o = _3
~~
BC30311: Value of type 'List(Of XElement)' cannot be converted to 'String'.
o = _4
~~
BC42322: Runtime errors might occur when converting 'IEnumerable(Of XObject)' to 'String'.
o = _5
~~
BC30311: Value of type 'IEnumerable(Of XElement)()' cannot be converted to 'String'.
o = _6
~~
BC42361: Cannot convert 'IEnumerableOfXElement' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerableOfXElement'.
o = _7
~~
BC42361: Cannot convert 'IEnumerable(Of X)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of X)'.
o = _8
~~
BC42361: Cannot convert 'IEnumerable(Of T As XElement)' to 'String'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of T As XElement)'.
o = _9
~~
]]></errors>)
End Sub
' Conversions to IEnumerable(Of XElement). Dev11 reports BC31193
' when converting NotInheritable Class to IEnumerable(Of XElement).
<Fact()>
Public Sub BC42361WRN_UseValueForXmlExpression3_3()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict Off
Imports System.Collections.Generic
Imports System.Xml.Linq
Class A
End Class
NotInheritable Class B
End Class
Module M
Sub M(Of T As Class)()
Dim _i As IEnumerable(Of XElement)
Dim _o As Object = Nothing
Dim _s As String = Nothing
Dim _a As A = Nothing
Dim _b As B = Nothing
Dim _t As T = Nothing
_i = _o
_i = _s
_i = _a
_i = _b
_i = _t
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC42322: Runtime errors might occur when converting 'String' to 'IEnumerable(Of XElement)'.
_i = _s
~~
BC42322: Runtime errors might occur when converting 'B' to 'IEnumerable(Of XElement)'.
_i = _b
~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31194ERR_TypeMismatchForXml3()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict Off
Structure S
End Structure
Module M
Sub M()
Dim _s As S
_s = <x/>.<y>
_s = CType(<x/>.<y>, S)
_s = DirectCast(<x/>.<y>, S)
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31194: Value of type 'IEnumerable(Of XElement)' cannot be converted to 'S'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = <x/>.<y>
~~~~~~~~
BC31194: Value of type 'IEnumerable(Of XElement)' cannot be converted to 'S'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = CType(<x/>.<y>, S)
~~~~~~~~
BC31194: Value of type 'IEnumerable(Of XElement)' cannot be converted to 'S'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
_s = DirectCast(<x/>.<y>, S)
~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31194ERR_TypeMismatchForXml3_1()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict Off
Imports System.Collections.Generic
Imports System.Xml.Linq
Structure S
End Structure
Class X
Inherits XElement
Public Sub New(name As XName)
MyBase.New(name)
End Sub
End Class
Interface IEnumerableOfXElement
Inherits IEnumerable(Of XElement)
End Interface
Module M
Sub M(Of T As XElement)(_1 As XElement,
_2 As IEnumerable(Of XElement),
_3 As XElement(),
_4 As List(Of XElement),
_5 As IEnumerable(Of XObject),
_6 As IEnumerable(Of XElement)(),
_7 As IEnumerableOfXElement,
_8 As IEnumerable(Of X),
_9 As IEnumerable(Of T))
Dim o As S
o = _1
o = _2
o = _3
o = _4
o = _5
o = _6
o = _7
o = _8
o = _9
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30311: Value of type 'XElement' cannot be converted to 'S'.
o = _1
~~
BC31194: Value of type 'IEnumerable(Of XElement)' cannot be converted to 'S'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
o = _2
~~
BC30311: Value of type 'XElement()' cannot be converted to 'S'.
o = _3
~~
BC30311: Value of type 'List(Of XElement)' cannot be converted to 'S'.
o = _4
~~
BC30311: Value of type 'IEnumerable(Of XObject)' cannot be converted to 'S'.
o = _5
~~
BC30311: Value of type 'IEnumerable(Of XElement)()' cannot be converted to 'S'.
o = _6
~~
BC31194: Value of type 'IEnumerableOfXElement' cannot be converted to 'S'. You can use the 'Value' property to get the string value of the first element of 'IEnumerableOfXElement'.
o = _7
~~
BC31194: Value of type 'IEnumerable(Of X)' cannot be converted to 'S'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of X)'.
o = _8
~~
BC31194: Value of type 'IEnumerable(Of T As XElement)' cannot be converted to 'S'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of T As XElement)'.
o = _9
~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31195ERR_BinaryOperandsForXml4()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict Off
Imports System.Collections.Generic
Imports System.Xml.Linq
Class C
End Class
Class X
Inherits XElement
Public Sub New(name As XName)
MyBase.New(name)
End Sub
End Class
Interface IEnumerableOfXElement
Inherits IEnumerable(Of XElement)
End Interface
Module M
Sub M(Of T As XElement)(o As C,
_1 As XElement,
_2 As IEnumerable(Of XElement),
_3 As XElement(),
_4 As List(Of XElement),
_5 As IEnumerable(Of XObject),
_6 As IEnumerable(Of XElement)(),
_7 As IEnumerableOfXElement,
_8 As IEnumerable(Of X),
_9 As IEnumerable(Of T))
Dim b As Boolean
b = (o = _1)
b = (o = _2)
b = (o = _3)
b = (o = _4)
b = (_5 = o)
b = (_6 = o)
b = (_7 = o)
b = (_8 = o)
b = (_9 = o)
b = (_1 = _2)
b = (_2 = _2)
b = (_3 = _2)
b = (_4 = _2)
b = (_5 = _2)
b = (_2 = _6)
b = (_2 = _7)
b = (_2 = _8)
b = (_2 = _9)
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30452: Operator '=' is not defined for types 'C' and 'XElement'.
b = (o = _1)
~~~~~~
BC31195: Operator '=' is not defined for types 'C' and 'IEnumerable(Of XElement)'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
b = (o = _2)
~~~~~~
BC31195: Operator '=' is not defined for types 'C' and 'XElement()'. You can use the 'Value' property to get the string value of the first element of 'XElement()'.
b = (o = _3)
~~~~~~
BC31195: Operator '=' is not defined for types 'C' and 'List(Of XElement)'. You can use the 'Value' property to get the string value of the first element of 'List(Of XElement)'.
b = (o = _4)
~~~~~~
BC30452: Operator '=' is not defined for types 'IEnumerable(Of XObject)' and 'C'.
b = (_5 = o)
~~~~~~
BC30452: Operator '=' is not defined for types 'IEnumerable(Of XElement)()' and 'C'.
b = (_6 = o)
~~~~~~
BC31195: Operator '=' is not defined for types 'IEnumerableOfXElement' and 'C'. You can use the 'Value' property to get the string value of the first element of 'IEnumerableOfXElement'.
b = (_7 = o)
~~~~~~
BC31195: Operator '=' is not defined for types 'IEnumerable(Of X)' and 'C'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of X)'.
b = (_8 = o)
~~~~~~
BC31195: Operator '=' is not defined for types 'IEnumerable(Of T As XElement)' and 'C'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of T As XElement)'.
b = (_9 = o)
~~~~~~
BC31195: Operator '=' is not defined for types 'XElement' and 'IEnumerable(Of XElement)'. You can use the 'Value' property to get the string value of the first element of 'IEnumerable(Of XElement)'.
b = (_1 = _2)
~~~~~~~
BC31080: Operator '=' is not defined for types 'IEnumerable(Of XElement)' and 'IEnumerable(Of XElement)'. Use 'Is' operator to compare two reference types.
b = (_2 = _2)
~~~~~~~
BC31080: Operator '=' is not defined for types 'XElement()' and 'IEnumerable(Of XElement)'. Use 'Is' operator to compare two reference types.
b = (_3 = _2)
~~~~~~~
BC31195: Operator '=' is not defined for types 'List(Of XElement)' and 'IEnumerable(Of XElement)'. You can use the 'Value' property to get the string value of the first element of 'List(Of XElement)'.
b = (_4 = _2)
~~~~~~~
BC31080: Operator '=' is not defined for types 'IEnumerable(Of XObject)' and 'IEnumerable(Of XElement)'. Use 'Is' operator to compare two reference types.
b = (_5 = _2)
~~~~~~~
BC31080: Operator '=' is not defined for types 'IEnumerable(Of XElement)' and 'IEnumerable(Of XElement)()'. Use 'Is' operator to compare two reference types.
b = (_2 = _6)
~~~~~~~
BC31080: Operator '=' is not defined for types 'IEnumerable(Of XElement)' and 'IEnumerableOfXElement'. Use 'Is' operator to compare two reference types.
b = (_2 = _7)
~~~~~~~
BC31080: Operator '=' is not defined for types 'IEnumerable(Of XElement)' and 'IEnumerable(Of X)'. Use 'Is' operator to compare two reference types.
b = (_2 = _8)
~~~~~~~
BC31080: Operator '=' is not defined for types 'IEnumerable(Of XElement)' and 'IEnumerable(Of T As XElement)'. Use 'Is' operator to compare two reference types.
b = (_2 = _9)
~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31394ERR_RestrictedConversion1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RestrictedConversion1">
<file name="a.vb">
Class C1
Sub FOO()
Dim obj As Object
obj = New system.ArgIterator
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31394: Expression of type 'ArgIterator' cannot be converted to 'Object' or 'ValueType'.
obj = New system.ArgIterator
~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<WorkItem(527685, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527685")>
<Fact()>
Public Sub BC31394ERR_RestrictedConversion1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RestrictedConversion1_1">
<file name="a.vb">
Option Infer Off
imports system
Structure C1
Sub FOO()
Dim obj = New ArgIterator
Dim TypeRefInstance As TypedReference
obj = TypeRefInstance
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31394: Expression of type 'ArgIterator' cannot be converted to 'Object' or 'ValueType'.
Dim obj = New ArgIterator
~~~~~~~~~~~~~~~
BC31394: Expression of type 'TypedReference' cannot be converted to 'Object' or 'ValueType'.
obj = TypeRefInstance
~~~~~~~~~~~~~~~
BC42109: Variable 'TypeRefInstance' is used before it has been assigned a value. A null reference exception could result at runtime. Make sure the structure or all the reference members are initialized before use
obj = TypeRefInstance
~~~~~~~~~~~~~~~
</expected>)
End Sub
<WorkItem(527685, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527685")>
<Fact()>
Public Sub BC31394ERR_RestrictedConversion1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RestrictedConversion1">
<file name="a.vb">
Option Infer Off
imports system
Structure C1
Sub FOO()
Dim obj = New ArgIterator
obj = New RuntimeArgumentHandle
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31394: Expression of type 'ArgIterator' cannot be converted to 'Object' or 'ValueType'.
Dim obj = New ArgIterator
~~~~~~~~~~~~~~~
BC31394: Expression of type 'RuntimeArgumentHandle' cannot be converted to 'Object' or 'ValueType'.
obj = New RuntimeArgumentHandle
~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(529561, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529561")>
Public Sub BC31396ERR_RestrictedType1_1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module M
Sub Main()
Dim x As TypedReference()
Dim y() As ArgIterator
Dim z = {New RuntimeArgumentHandle()}
End Sub
End Module
</file>
</compilation>).AssertTheseDiagnostics(
<expected>
BC42024: Unused local variable: 'x'.
Dim x As TypedReference()
~
BC31396: 'TypedReference' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Dim x As TypedReference()
~~~~~~~~~~~~~~~~
BC42024: Unused local variable: 'y'.
Dim y() As ArgIterator
~
BC31396: 'ArgIterator' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Dim y() As ArgIterator
~~~~~~~~~~~
BC31396: 'RuntimeArgumentHandle' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Dim z = {New RuntimeArgumentHandle()}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31396: 'RuntimeArgumentHandle' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Dim z = {New RuntimeArgumentHandle()}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31396ERR_RestrictedType1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Class C(Of T)
Shared Sub F(Of U)(o As U)
End Sub
Shared Sub M()
Dim o As Object
o = New C(Of ArgIterator)
o = New C(Of RuntimeArgumentHandle)
o = New C(Of TypedReference)
F(Of ArgIterator)(Nothing)
F(Of RuntimeArgumentHandle)(Nothing)
Dim t As TypedReference = Nothing
F(t)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31396: 'ArgIterator' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
o = New C(Of ArgIterator)
~~~~~~~~~~~
BC31396: 'RuntimeArgumentHandle' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
o = New C(Of RuntimeArgumentHandle)
~~~~~~~~~~~~~~~~~~~~~
BC31396: 'TypedReference' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
o = New C(Of TypedReference)
~~~~~~~~~~~~~~
BC31396: 'ArgIterator' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
F(Of ArgIterator)(Nothing)
~~~~~~~~~~~~~~~~~
BC31396: 'RuntimeArgumentHandle' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
F(Of RuntimeArgumentHandle)(Nothing)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31396: 'TypedReference' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
F(t)
~
</expected>)
End Sub
<Fact()>
Public Sub BC31396ERR_RestrictedType1_3()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Class C
Private F As TypedReference
Private G As ArgIterator()
Private H = {New RuntimeArgumentHandle()}
Sub M(e As ArgIterator())
End Sub
End Class
Interface I
ReadOnly Property P As TypedReference
Function F() As ArgIterator()()
Property Q As RuntimeArgumentHandle()()
End Interface
</file>
</compilation>).AssertTheseDiagnostics(
<expected>
BC31396: 'TypedReference' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Private F As TypedReference
~~~~~~~~~~~~~~
BC31396: 'ArgIterator' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Private G As ArgIterator()
~~~~~~~~~~~~~
BC31396: 'RuntimeArgumentHandle' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Private H = {New RuntimeArgumentHandle()}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31396: 'ArgIterator' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Sub M(e As ArgIterator())
~~~~~~~~~~~~~
BC31396: 'TypedReference' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
ReadOnly Property P As TypedReference
~~~~~~~~~~~~~~
BC31396: 'ArgIterator' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Function F() As ArgIterator()()
~~~~~~~~~~~~~~~
BC31396: 'RuntimeArgumentHandle' cannot be made nullable, and cannot be used as the data type of an array element, field, anonymous type member, type argument, 'ByRef' parameter, or return statement.
Property Q As RuntimeArgumentHandle()()
~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31399ERR_NoAccessibleConstructorOnBase()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoAccessibleConstructorOnBase">
<file name="a.vb">
Class c1
Private Sub New()
End Sub
End Class
Class c2
Inherits c1
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31399: Class 'c1' has no accessible 'Sub New' and cannot be inherited.
Class c2
~~
</expected>)
End Sub
<Fact()>
Public Sub BC31419ERR_IsNotOpRequiresReferenceTypes1()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class A1
Sub scen1()
dim arr1 = New Integer() {1, 2, 3}
dim arr2 = arr1
Dim b As Boolean
b = arr1(0) IsNot arr2(0)
End Sub
End Class
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_IsNotOpRequiresReferenceTypes1, "arr1(0)").WithArguments("Integer"),
Diagnostic(ERRID.ERR_IsNotOpRequiresReferenceTypes1, "arr2(0)").WithArguments("Integer"))
End Sub
<Fact()>
Public Sub BC31419ERR_IsNotOpRequiresReferenceTypes1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class A1
Sub scen1()
Dim a As E
Dim b As S1
dim o = a IsNot b
End Sub
End Class
structure S1
End structure
ENUM E
Dummy
End ENUM
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31419: 'IsNot' requires operands that have reference types, but this operand has the value type 'E'.
dim o = a IsNot b
~
BC31419: 'IsNot' requires operands that have reference types, but this operand has the value type 'S1'.
dim o = a IsNot b
~
</expected>)
End Sub
<Fact()>
Public Sub BC31419ERR_IsNotOpRequiresReferenceTypes1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class B(Of T As Structure)
End Class
Class C
Shared Sub M1(Of T1)(_1 As T1)
If _1 IsNot Nothing Then
End If
If Nothing IsNot _1 Then
End If
End Sub
Shared Sub M2(Of T2 As Class)(_2 As T2)
If _2 IsNot Nothing Then
End If
If Nothing IsNot _2 Then
End If
End Sub
Shared Sub M3(Of T3 As Structure)(_3 As T3)
If _3 IsNot Nothing Then
End If
If Nothing IsNot _3 Then
End If
End Sub
Shared Sub M4(Of T4 As New)(_4 As T4)
If _4 IsNot Nothing Then
End If
If Nothing IsNot _4 Then
End If
End Sub
Shared Sub M5(Of T5 As I)(_5 As T5)
If _5 IsNot Nothing Then
End If
If Nothing IsNot _5 Then
End If
End Sub
Shared Sub M6(Of T6 As A)(_6 As T6)
If _6 IsNot Nothing Then
End If
If Nothing IsNot _6 Then
End If
End Sub
Shared Sub M7(Of T7 As U, U)(_7 As T7)
If _7 IsNot Nothing Then
End If
If Nothing IsNot _7 Then
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31419: 'IsNot' requires operands that have reference types, but this operand has the value type 'T3'.
If _3 IsNot Nothing Then
~~
BC31419: 'IsNot' requires operands that have reference types, but this operand has the value type 'T3'.
If Nothing IsNot _3 Then
~~
</expected>)
End Sub
<WorkItem(542192, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542192")>
<Fact()>
Public Sub BC31428ERR_VoidArrayDisallowed()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VoidArrayDisallowed">
<file name="a.vb">
Imports System
Module M1
Dim y As Type = GetType(Void)
Dim x As Type = GetType(Void())
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31428: Arrays of type 'System.Void' are not allowed in this expression.
Dim x As Type = GetType(Void())
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub PartialMethodAndDeclareMethod()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Imports System.Runtime.InteropServices
Partial Class Clazz
Partial Private Declare Sub S0 Lib "abc.dll" (p As String)
Partial Private Sub S1(<Out> p As String)
End Sub
Partial Private Sub S2(<Out> ByRef p As String)
End Sub
End Class
Partial Class Clazz
Private Declare Sub S1 Lib "abc.dll" (p As String)
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30244: 'Partial' is not valid on a Declare.
Partial Private Declare Sub S0 Lib "abc.dll" (p As String)
~~~~~~~
BC30345: 'Private Sub S1(p As String)' and 'Private Declare Ansi Sub S1 Lib "abc.dll" (p As String)' cannot overload each other because they differ only by parameters declared 'ByRef' or 'ByVal'.
Partial Private Sub S1(<Out> p As String)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC31435ERR_PartialMethodMustBeEmpty()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialMethodMustBeEmpty">
<file name="a.vb">
Class C1
Partial Private Sub Foo()
System.Console.WriteLine()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31435: Partial methods must have empty method bodies.
Partial Private Sub Foo()
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31435ERR_PartialMethodMustBeEmpty2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialMethodMustBeEmpty2">
<file name="a.vb">
Imports System
Class C1
Partial Private Shared Sub PS(a As Integer)
Console.WriteLine()
End Sub
Partial Private Shared Sub Ps(a As Integer)
Console.WriteLine()
End Sub
Private Shared Sub PS(a As Integer)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31435: Partial methods must have empty method bodies.
Partial Private Shared Sub PS(a As Integer)
~~
BC31433: Method 'Ps' cannot be declared 'Partial' because only one method 'Ps' can be marked 'Partial'.
Partial Private Shared Sub Ps(a As Integer)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC31435ERR_PartialMethodMustBeEmpty3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialMethodMustBeEmpty3">
<file name="a.vb">
Imports System
Class C1
Partial Private Shared Sub PS(a As Integer)
End Sub
Partial Private Shared Sub Ps(a As Integer)
Console.WriteLine()
End Sub
Private Shared Sub PS(a As Integer)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31433: Method 'Ps' cannot be declared 'Partial' because only one method 'Ps' can be marked 'Partial'.
Partial Private Shared Sub Ps(a As Integer)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC31440ERR_NoPartialMethodInAddressOf1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoPartialMethodInAddressOf1">
<file name="a.vb">
Public Class C1
Event x()
Partial Private Sub Foo()
End Sub
Sub MethodToAddHandlerInPrivatePartial()
AddHandler Me.x, AddressOf Me.Foo
End Sub
Sub MethodToRemoveHandlerInPrivatePartial()
RemoveHandler Me.x, AddressOf Me.Foo
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31440: 'AddressOf' cannot be applied to 'Private Sub Foo()' because 'Private Sub Foo()' is a partial method without an implementation.
AddHandler Me.x, AddressOf Me.Foo
~~~~~~
BC31440: 'AddressOf' cannot be applied to 'Private Sub Foo()' because 'Private Sub Foo()' is a partial method without an implementation.
RemoveHandler Me.x, AddressOf Me.Foo
~~~~~~
</expected>)
End Sub
' Roslyn extra - ERR_TypeMismatch2 * 2
<Fact()>
Public Sub BC31440ERR_NoPartialMethodInAddressOf1a()
CreateCompilationWithMscorlib40(
<compilation name="NoPartialMethodInAddressOf1a">
<file name="a.vb">
Imports System
Public Class C1
Event x()
Partial Private Sub Foo()
End Sub
Sub MethodToAddHandlerInPrivatePartial()
AddHandler Me.x, New Action(AddressOf Me.Foo)
End Sub
Sub MethodToRemoveHandlerInPrivatePartial()
RemoveHandler Me.x, New Action(AddressOf Me.Foo)
End Sub
End Class
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_NoPartialMethodInAddressOf1, "Me.Foo").WithArguments("Private Sub Foo()"),
Diagnostic(ERRID.ERR_TypeMismatch2, "New Action(AddressOf Me.Foo)").WithArguments("System.Action", "C1.xEventHandler"),
Diagnostic(ERRID.ERR_NoPartialMethodInAddressOf1, "Me.Foo").WithArguments("Private Sub Foo()"),
Diagnostic(ERRID.ERR_TypeMismatch2, "New Action(AddressOf Me.Foo)").WithArguments("System.Action", "C1.xEventHandler"))
End Sub
<Fact()>
Public Sub BC31440ERR_NoPartialMethodInAddressOf1b()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoPartialMethodInAddressOf1b">
<file name="a.vb">
Imports System
Public Class C1
Sub Test()
Dim a As Action = New Action(AddressOf Me.Foo)
a()
End Sub
Partial Private Sub Foo()
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31440: 'AddressOf' cannot be applied to 'Private Sub Foo()' because 'Private Sub Foo()' is a partial method without an implementation.
Dim a As Action = New Action(AddressOf Me.Foo)
~~~~~~
</expected>)
End Sub
<WorkItem("https://github.com/dotnet/roslyn/issues/72431")>
<Fact>
Public Sub BC31440ERR_NoPartialMethodInAddressOf_02()
Dim source =
"Delegate Sub D()
Partial Class Program
Shared Sub Main()
M1(AddressOf M2(Of Integer))
End Sub
Shared Sub M1(d As D)
End Sub
Private Shared Partial Sub M2(Of T)()
End Sub
End Class"
Dim comp = CreateCompilation(source)
comp.AssertTheseEmitDiagnostics(
<expected>
BC31440: 'AddressOf' cannot be applied to 'Private Shared Sub M2(Of Integer)()' because 'Private Shared Sub M2(Of Integer)()' is a partial method without an implementation.
M1(AddressOf M2(Of Integer))
~~~~~~~~~~~~~~
</expected>)
End Sub
<WorkItem("https://github.com/dotnet/roslyn/issues/72431")>
<Fact>
Public Sub BC31440ERR_NoPartialMethodInAddressOf_03()
Dim source =
"Delegate Sub D()
Partial Class C(Of T)
Shared Sub M1()
M2(AddressOf C(Of Integer).M3)
End Sub
Shared Sub M2(d As D)
End Sub
Private Shared Partial Sub M3()
End Sub
End Class"
Dim comp = CreateCompilation(source)
comp.AssertTheseEmitDiagnostics(
<expected>
BC31440: 'AddressOf' cannot be applied to 'Private Shared Sub M3()' because 'Private Shared Sub M3()' is a partial method without an implementation.
M2(AddressOf C(Of Integer).M3)
~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC31500ERR_BadAttributeSharedProperty1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadAttributeSharedProperty1">
<file name="at31500.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
Inherits Attribute
Public Shared SharedField As String
Public Const ConstField As String = "AAA"
End Class
<My(SharedField:="testing")>
Class Foo
<My(ConstField:="testing")>
Public Sub S()
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadAttributeSharedProperty1, "SharedField").WithArguments("SharedField"),
Diagnostic(ERRID.ERR_BadAttributeSharedProperty1, "ConstField").WithArguments("ConstField")) ' Dev10: 31510
End Sub
''' BC31510 in DEV10 but is BC31500 in Roslyn
<Fact()>
Public Sub BC31500ERR_BadAttributeSharedProperty1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadAttributeConstField1">
<file name="a.vb">
Imports System
<AttributeUsage(AttributeTargets.All)> Class attr
Inherits Attribute
Public Const c As String = "A"
End Class
<attr(c:="test")> Class c8
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31500: 'Shared' attribute property 'c' cannot be the target of an assignment.
<attr(c:="test")> Class c8
~
</expected>)
End Sub
<Fact()>
Public Sub BC31501ERR_BadAttributeReadOnlyProperty1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadAttributeReadOnlyProperty1">
<file name="at31501.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
Inherits Attribute
Public ReadOnly Property RP As String
Get
Return "RP"
End Get
End Property
Public WriteOnly Property WP As Integer
Set(value As Integer)
End Set
End Property
End Class
<MyAttribute(WP:=123, RP:="123")>
Class Test
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadAttributeReadOnlyProperty1, "RP").WithArguments("RP"))
End Sub
Private Shared ReadOnly s_badAttributeIl As String = <![CDATA[
.class public auto ansi beforefieldinit BaseAttribute
extends [mscorlib]System.Attribute
{
.custom instance void [mscorlib]System.AttributeUsageAttribute::.ctor(valuetype [mscorlib]System.AttributeTargets) = ( 01 00 FF 7F 00 00 00 00 )
.method public hidebysig newslot specialname virtual
instance int32 get_PROP() cil managed
{
// Code size 2 (0x2)
.maxstack 8
IL_0000: ldc.i4.1
IL_0001: ret
} // end of method BaseAttribute::get_PROP
.method public hidebysig newslot specialname virtual
instance void set_PROP(int32 'value') cil managed
{
// Code size 1 (0x1)
.maxstack 8
IL_0000: ret
} // end of method BaseAttribute::set_PROP
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Attribute::.ctor()
IL_0006: ret
} // end of method BaseAttribute::.ctor
.property instance int32 PROP()
{
.get instance int32 BaseAttribute::get_PROP()
.set instance void BaseAttribute::set_PROP(int32)
} // end of property BaseAttribute::PROP
} // end of class BaseAttribute
.class public auto ansi beforefieldinit DerivedAttribute
extends BaseAttribute
{
.method public hidebysig specialname virtual
instance int32 get_PROP() cil managed
{
// Code size 2 (0x2)
.maxstack 8
IL_0000: ldc.i4.1
IL_0001: ret
} // end of method DerivedAttribute::get_PROP
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void BaseAttribute::.ctor()
IL_0006: ret
} // end of method DerivedAttribute::.ctor
.property instance int32 PROP()
{
.get instance int32 DerivedAttribute::get_PROP()
} // end of property DerivedAttribute::PROP
} // end of class DerivedAttribute
]]>.Value.Replace(vbLf, vbNewLine)
<WorkItem(528981, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528981")>
<Fact()>
Public Sub BC31501ERR_BadAttributeReadOnlyProperty2()
Dim compilation = CompilationUtils.CreateCompilationWithCustomILSource(
<compilation name="BadAttributeReadOnlyProperty2">
<file name="at31501.vb"><![CDATA[
<Derived(PROP:=1)>
Class Test
End Class
]]></file>
</compilation>, s_badAttributeIl).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadAttributeReadOnlyProperty1, "PROP").WithArguments("PROP"))
End Sub
<WorkItem(540627, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540627")>
<Fact()>
Public Sub BC31511ERR_BadAttributeNonPublicProperty1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadAttributeNonPublicProperty1">
<file name="at31511.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
Inherits Attribute
Friend Field As String
Friend Property Prop As Long
End Class
<My(Field:="testing")>
Class Foo
<My(Prop:=12345)>
Public Sub S()
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_BadAttributeNonPublicProperty1, "Field").WithArguments("Field"),
Diagnostic(ERRID.ERR_BadAttributeNonPublicProperty1, "Prop").WithArguments("Prop")
)
End Sub
<WorkItem(539101, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539101")>
<Fact()>
Public Sub BC32000ERR_UseOfLocalBeforeDeclaration1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LocalVariableCannotBeReferredToBeforeItIsDeclared">
<file name="a.vb">
Imports System
Module X
Sub foo()
Dim x as integer
x = y
dim y as integer = 1
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32000: Local variable 'y' cannot be referred to before it is declared.
x = y
~
</expected>)
End Sub
<Fact()>
Public Sub BC32001ERR_UseOfKeywordFromModule1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UseOfKeywordFromModule1">
<file name="a.vb">
Imports System
Module X
Sub foo()
Dim o = Me
dim p = MyBase.GetType
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32001: 'Me' is not valid within a Module.
Dim o = Me
~~
BC32001: 'MyBase' is not valid within a Module.
dim p = MyBase.GetType
~~~~~~
</expected>)
End Sub
<WorkItem(542958, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542958")>
<Fact()>
Public Sub BC32001ERR_UseOfKeywordFromModule1_MeAsAttributeInModule()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UseOfKeywordFromModule1_MeAsAttributeInModule">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Runtime.InteropServices
Public Module S1
<MyAttribute(Me.color1.blue)>
Property name As String
Sub foo()
End Sub
Sub main()
End Sub
Enum color1
blue
End Enum
End Module
Class MyAttribute
Inherits Attribute
Sub New(x As S1.color1)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32001: 'Me' is not valid within a Module.
<MyAttribute(Me.color1.blue)>
~~
</expected>)
End Sub
<WorkItem(542960, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542960")>
<Fact()>
Public Sub BC32001ERR_UseOfKeywordFromModule1_MyBaseAsAttributeInModule()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UseOfKeywordFromModule1_MyBaseAsAttributeInModule">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Runtime.InteropServices
Public Module S1
<MyAttribute(MyBase.color1.blue)>
Property name As String
Sub foo()
End Sub
Sub main()
End Sub
Enum color1
blue
End Enum
End Module
Class MyAttribute
Inherits Attribute
Sub New(x As S1.color1)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32001: 'MyBase' is not valid within a Module.
<MyAttribute(MyBase.color1.blue)>
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32006ERR_CharToIntegralTypeMismatch1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CharToIntegralTypeMismatch1">
<file name="a.vb">
Class C1
SUB scen1()
Dim char1() As Char
Dim bt(2) As Byte
bt(0) = CType (char1(0), Byte)
Dim char2() As Char
Dim sht1(2) As Short
sht1(0) = char2(0)
sht1(0) = CType (char2(0), Short)
End SUB
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42104: Variable 'char1' is used before it has been assigned a value. A null reference exception could result at runtime.
bt(0) = CType (char1(0), Byte)
~~~~~
BC32006: 'Char' values cannot be converted to 'Byte'. Use 'Microsoft.VisualBasic.AscW' to interpret a character as a Unicode value or 'Microsoft.VisualBasic.Val' to interpret it as a digit.
bt(0) = CType (char1(0), Byte)
~~~~~~~~
BC42104: Variable 'char2' is used before it has been assigned a value. A null reference exception could result at runtime.
sht1(0) = char2(0)
~~~~~
BC32006: 'Char' values cannot be converted to 'Short'. Use 'Microsoft.VisualBasic.AscW' to interpret a character as a Unicode value or 'Microsoft.VisualBasic.Val' to interpret it as a digit.
sht1(0) = char2(0)
~~~~~~~~
BC32006: 'Char' values cannot be converted to 'Short'. Use 'Microsoft.VisualBasic.AscW' to interpret a character as a Unicode value or 'Microsoft.VisualBasic.Val' to interpret it as a digit.
sht1(0) = CType (char2(0), Short)
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32006ERR_CharToIntegralTypeMismatch1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="CharToIntegralTypeMismatch1">
<file name="a.vb">
Imports System.Linq
Class C
Shared Sub Main()
For Each x As Integer In From c In "abc" Select c
Next
End Sub
End Class
Public Structure S
End Structure
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32006: 'Char' values cannot be converted to 'Integer'. Use 'Microsoft.VisualBasic.AscW' to interpret a character as a Unicode value or 'Microsoft.VisualBasic.Val' to interpret it as a digit.
For Each x As Integer In From c In "abc" Select c
~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32007ERR_IntegralToCharTypeMismatch1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CharToIntegralTypeMismatch1">
<file name="a.vb">
Imports System
Module X
Sub Foo()
Dim O As Object
'COMPILEERROR: BC32007, "CUShort(15)"
O = CChar(CUShort(15))
Dim sb As UShort = CUShort(1)
'COMPILEERROR: BC32007, "sb"
O = CChar(sb)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32007: 'UShort' values cannot be converted to 'Char'. Use 'Microsoft.VisualBasic.ChrW' to interpret a numeric value as a Unicode character or first convert it to 'String' to produce a digit.
O = CChar(CUShort(15))
~~~~~~~~~~~
BC32007: 'UShort' values cannot be converted to 'Char'. Use 'Microsoft.VisualBasic.ChrW' to interpret a numeric value as a Unicode character or first convert it to 'String' to produce a digit.
O = CChar(sb)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC32008ERR_NoDirectDelegateConstruction1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoDirectDelegateConstruction1">
<file name="a.vb">
Class C1
Public Delegate Sub myDelegate()
public shared sub mySub()
end sub
End Class
Module M1
Sub Main()
Dim d1 As C1.myDelegate
d1 = New C1.myDelegate()
d1 = New C1.myDelegate(C1.mySub)
d1 = New C1.myDelegate(C1.mySub, 23)
d1 = New C1.myDelegate(addressof C1.mySub, 23)
d1 = New C1.myDelegate(,)
d1 = New C1.myDelegate(,,23)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32008: Delegate 'C1.myDelegate' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
d1 = New C1.myDelegate()
~~
BC32008: Delegate 'C1.myDelegate' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
d1 = New C1.myDelegate(C1.mySub)
~~~~~~~~~~
BC32008: Delegate 'C1.myDelegate' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
d1 = New C1.myDelegate(C1.mySub, 23)
~~~~~~~~~~~~~~
BC32008: Delegate 'C1.myDelegate' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
d1 = New C1.myDelegate(addressof C1.mySub, 23)
~~~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'C1.myDelegate' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
d1 = New C1.myDelegate(,)
~~~
BC32008: Delegate 'C1.myDelegate' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
d1 = New C1.myDelegate(,,23)
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32008ERR_NoDirectDelegateConstruction1_2()
Dim source =
<compilation name="NewDelegateWithAddressOf">
<file name="a.vb">
Imports System
Delegate Sub D()
Module Program
Sub Main(args As String())
Dim x As D
x = New D(AddressOf Method, 23)
x = New D(AddressOf Method, foo:=23)
x = New D(bar:=AddressOf Method, foo:=23)
x = New D(bar:=AddressOf Method, bar:=23)
x = New D()
x = New D(23)
x = New D(nothing)
x = New D
Dim y1 as New D(AddressOf Method, 23)
Dim y2 as New D(AddressOf Method, foo:=23)
Dim y3 as New D(bar:=AddressOf Method, foo:=23)
Dim y4 as New D(bar:=AddressOf Method, bar:=23)
Dim y5 as New D()
Dim y6 as New D(23)
Dim y7 as New D(nothing)
Dim y8 as New D
End Sub
Public Sub Method()
console.writeline("Hello.")
End Sub
End Module
</file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected>
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D(AddressOf Method, 23)
~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D(AddressOf Method, foo:=23)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D(bar:=AddressOf Method, foo:=23)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D(bar:=AddressOf Method, bar:=23)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D()
~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D(23)
~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D(nothing)
~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
x = New D
~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y1 as New D(AddressOf Method, 23)
~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y2 as New D(AddressOf Method, foo:=23)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y3 as New D(bar:=AddressOf Method, foo:=23)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y4 as New D(bar:=AddressOf Method, bar:=23)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y5 as New D()
~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y6 as New D(23)
~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y7 as New D(nothing)
~~~~~~~~~
BC32008: Delegate 'D' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor.
Dim y8 as New D
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32010ERR_AttrAssignmentNotFieldOrProp1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AttrAssignmentNotFieldOrProp1">
<file name="at32010.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
Inherits Attribute
Public Enum E
Zero
One
End Enum
Public Sub S()
End Sub
Public Function F!()
Return 0.0F
End Function
End Class
<My(E:=E.One, S:=Nothing)>
Class Foo
<My(F!:=1.234F)>
Public Sub S2()
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_NameNotDeclared1, "E").WithArguments("E"),
Diagnostic(ERRID.ERR_AttrAssignmentNotFieldOrProp1, "E").WithArguments("E"),
Diagnostic(ERRID.ERR_AttrAssignmentNotFieldOrProp1, "S").WithArguments("S"),
Diagnostic(ERRID.ERR_AttrAssignmentNotFieldOrProp1, "F!").WithArguments("F"))
End Sub
<Fact()>
Public Sub BC32013ERR_StrictDisallowsObjectComparison1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowsObjectComparison1">
<file name="a.vb">
Option Strict On
Class C1
Sub scen1()
Dim Obj As Object = New Object
Select Case obj
Case "DFT"
End Select
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32013: Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.
Select Case obj
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32013ERR_StrictDisallowsObjectComparison1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictDisallowsObjectComparison1">
<file name="a.vb">
Option Strict On
Class C1
Sub scen1()
Dim Obj As Object = New Object
if (obj="string")
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32013: Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.
if (obj="string")
~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32014ERR_NoConstituentArraySizes()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoConstituentArraySizes">
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Sub Main()
Dim arr10 As Integer(,) = New Integer(9)(5) {} ' Invalid
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30414: Value of type 'Integer()()' cannot be converted to 'Integer(*,*)' because the array types have different numbers of dimensions.
Dim arr10 As Integer(,) = New Integer(9)(5) {} ' Invalid
~~~~~~~~~~~~~~~~~~~~
BC32014: Bounds can be specified only for the top-level array when initializing an array of arrays.
Dim arr10 As Integer(,) = New Integer(9)(5) {} ' Invalid
~
</expected>)
End Sub
<WorkItem(545621, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545621")>
<Fact()>
Public Sub BC32014ERR_NoConstituentArraySizes1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoConstituentArraySizes">
<file name="a.vb">
Module M
Sub Main()
Dim x()(1)()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42024: Unused local variable: 'x'.
Dim x()(1)()
~
BC32014: Bounds can be specified only for the top-level array when initializing an array of arrays.
Dim x()(1)()
~
</expected>)
End Sub
<WorkItem(528729, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528729")>
<Fact()>
Public Sub BC32016ERR_FunctionResultCannotBeIndexed1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="FunctionResultCannotBeIndexed1">
<file name="a.vb">
Imports Microsoft.VisualBasic.FileSystem
Module M1
Sub foo()
If FreeFile(1) < 255 Then
End If
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32016: 'Public Function FreeFile() As Integer' has no parameters and its return type cannot be indexed.
If FreeFile(1) < 255 Then
~~~~~~~~
</expected>)
End Sub
<Fact, WorkItem(543658, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543658")>
Public Sub BC32021ERR_NamedArgAlsoOmitted2()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NamedArgAlsoOmitted2">
<file name="a.vb">
Public Module M1
Public Sub foo(ByVal X As Byte, Optional ByVal Y As Byte = 0, _
Optional ByVal Z As Byte = 0)
Call foo(6, , Y:=3)
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_NamedArgAlsoOmitted2, "Y").WithArguments("Y", "Public Sub foo(X As Byte, [Y As Byte = 0], [Z As Byte = 0])"))
End Sub
<Fact()>
Public Sub BC32022ERR_CannotCallEvent1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CannotCallEvent1">
<file name="a.vb">
Public Module M1
Public Event BurnPercent(ByVal Percent As Integer)
Sub foo()
BurnPercent.Invoke()
End Sub
End Module
</file>
</compilation>).AssertTheseDiagnostics(
<expected>
BC32022: 'Public Event BurnPercent(Percent As Integer)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.
BurnPercent.Invoke()
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32022ERR_CannotCallEvent1_2()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Class C
Private Event E As System.EventHandler
Sub M(o As Object)
E()
M(E())
End Sub
End Class
</file>
</compilation>).AssertTheseDiagnostics(
<expected>
BC32022: 'Private Event E As EventHandler' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.
E()
~
BC32022: 'Private Event E As EventHandler' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.
M(E())
~
</expected>)
End Sub
<Fact()>
Public Sub BC32023ERR_ForEachCollectionDesignPattern1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ForEachCollectionDesignPattern1">
<file name="a.vb">
Option Infer On
Public Module M1
Sub foo()
Dim s As Integer
For Each i In s
Next
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32023: Expression is of type 'Integer', which is not a collection type.
For Each i In s
~
</expected>)
End Sub
<Fact()>
Public Sub BC32023ERR_ForEachCollectionDesignPattern1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ForEachCollectionDesignPattern1">
<file name="a.vb">
Option Infer On
Class C
Shared Sub Main()
For Each x As Integer In If(x, x, x)
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32023: Expression is of type 'Integer', which is not a collection type.
For Each x As Integer In If(x, x, x)
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32023ERR_ForEachCollectionDesignPattern1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ForEachCollectionDesignPattern1">
<file name="a.vb">
Option Infer On
Class C
Public Shared Sub Main()
Dim e As New Enumerable()
For Each x In e
Next
End Sub
End Class
Structure Enumerable
Public i As Integer
Public Sub GetEnumerator()
i = i + 1
'Return New Enumerator()
End Sub
End Structure
Structure Enumerator
Private x As Integer
Public ReadOnly Property Current() As Integer
Get
Return x
End Get
End Property
Public Function MoveNext() As Boolean
Return System.Threading.Interlocked.Increment(x) < 4
End Function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32023: Expression is of type 'Enumerable', which is not a collection type.
For Each x In e
~
</expected>)
End Sub
<Fact()>
Public Sub BC32023ERR_ForEachCollectionDesignPattern1_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ForEachCollectionDesignPattern1">
<file name="a.vb">
Option Infer On
Class C
Public Shared Sub Main()
Dim e As New Enumerable()
For Each x In e
Next
End Sub
End Class
Structure Enumerable
Public i As Integer
private Function GetEnumerator() as Enumerator
i = i + 1
Return New Enumerator()
End Function
End Structure
Structure Enumerator
Private x As Integer
Public ReadOnly Property Current() As Integer
Get
Return x
End Get
End Property
Public Function MoveNext() As Boolean
Return System.Threading.Interlocked.Increment(x) < 4
End Function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32023: Expression is of type 'Enumerable', which is not a collection type.
For Each x In e
~
</expected>)
End Sub
<Fact()>
Public Sub BC32023ERR_ForEachCollectionDesignPattern1_4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ForEachCollectionDesignPattern1">
<file name="a.vb">
Option Infer On
Class C
Public Shared Sub Main()
Dim e As New Enumerable()
For Each x In e
Next
End Sub
End Class
Structure Enumerable
Public i As Integer
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32023: Expression is of type 'Enumerable', which is not a collection type.
For Each x In e
~
</expected>)
End Sub
<Fact()>
Public Sub BC32029ERR_StrictArgumentCopyBackNarrowing3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StrictArgumentCopyBackNarrowing3">
<file name="a.vb">
Option Strict On
Class C1
Public intDataField As Integer
Dim type1 As MyType
Sub Main()
Dim str1 As String
Scen1(intDataField)
Scen1(type1.intField)
scen3(str1)
scen3(type1)
End Sub
Sub Scen1(ByRef xx As Long)
End Sub
Sub Scen2(ByRef gg As Byte)
End Sub
Sub scen3(ByRef gg As Object)
End Sub
End Class
Structure MyType
Public intField As Short
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32029: Option Strict On disallows narrowing from type 'Long' to type 'Integer' in copying the value of 'ByRef' parameter 'xx' back to the matching argument.
Scen1(intDataField)
~~~~~~~~~~~~
BC32029: Option Strict On disallows narrowing from type 'Long' to type 'Short' in copying the value of 'ByRef' parameter 'xx' back to the matching argument.
Scen1(type1.intField)
~~~~~~~~~~~~~~
BC32029: Option Strict On disallows narrowing from type 'Object' to type 'String' in copying the value of 'ByRef' parameter 'gg' back to the matching argument.
scen3(str1)
~~~~
BC42104: Variable 'str1' is used before it has been assigned a value. A null reference exception could result at runtime.
scen3(str1)
~~~~
BC32029: Option Strict On disallows narrowing from type 'Object' to type 'MyType' in copying the value of 'ByRef' parameter 'gg' back to the matching argument.
scen3(type1)
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC32036ERR_NoUniqueConstructorOnBase2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoUniqueConstructorOnBase2">
<file name="a.vb">
Class Base
Sub New()
End Sub
Sub New(ByVal ParamArray a() As Integer)
End Sub
End Class
Class Derived
Inherits Base
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32036: Class 'Derived' must declare a 'Sub New' because its base class 'Base' has more than one accessible 'Sub New' that can be called with no arguments.
Class Derived
~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32038ERR_RequiredNewCallTooMany2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RequiredNewCallTooMany2">
<file name="a.vb">
Class Base
Sub New()
End Sub
Sub New(ByVal ParamArray a() As Integer)
End Sub
End Class
Class Derived
Inherits Base
Sub New()
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32038: First statement of this 'Sub New' must be a call to 'MyBase.New' or 'MyClass.New' because base class 'Base' of 'Derived' has more than one accessible 'Sub New' that can be called with no arguments.
Sub New()
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32039ERR_ForCtlVarArraySizesSpecified()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ForCtlVarArraySizesSpecified">
<file name="a.vb">
Imports System.Collections.Generic
Class C1
Sub New()
Dim arrayList As New List(Of Integer())
For Each listElement() As Integer In arrayList
For Each listElement(1) As Integer In arrayList
Next
Next
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30616: Variable 'listElement' hides a variable in an enclosing block.
For Each listElement(1) As Integer In arrayList
~~~~~~~~~~~~~~
BC32039: Array declared as for loop control variable cannot be declared with an initial size.
For Each listElement(1) As Integer In arrayList
~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32045ERR_TypeOrMemberNotGeneric1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeOrMemberNotGeneric1">
<file name="a.vb">
Class Base(Of u)
sub fun1(ByRef b1 As Integer)
End sub
End Class
Class Derived(Of v)
Inherits Base(Of v)
Overloads sub fun1(Of T) (ByVal t1 As T, ByVal ParamArray t2() As UInteger)
End sub
End Class
Friend Module M1F
Sub FOO()
Dim c1 As New Base(Of String)
c1.fun1(Of Base(Of String)) (4.4@)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32045: 'Public Sub fun1(ByRef b1 As Integer)' has no type parameters and so cannot have type arguments.
c1.fun1(Of Base(Of String)) (4.4@)
~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32045ERR_TypeOrMemberNotGeneric1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeOrMemberNotGeneric1">
<file name="a.vb">
Class Base(Of u)
sub fun1(ByRef b1 As Integer)
End sub
End Class
Class Derived(Of v)
Inherits Base(Of v)
Overloads sub fun1(Of T) (ByVal t1 As T, ByVal ParamArray t2() As UInteger)
End sub
End Class
Friend Module M1F
Sub FOO()
Dim c1 As New Base(Of String)
c1.fun1(Of Derived(Of String)) (3.3!, Nothing)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32045: 'Public Sub fun1(ByRef b1 As Integer)' has no type parameters and so cannot have type arguments.
c1.fun1(Of Derived(Of String)) (3.3!, Nothing)
~~~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32045ERR_TypeOrMemberNotGeneric1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeOrMemberNotGeneric1">
<file name="a.vb">
Class Base(Of u)
sub fun1(ByRef b1 As Integer)
End sub
End Class
Class Derived(Of v)
Inherits Base(Of v)
Overloads sub fun1(Of T) (ByVal t1 As T, ByVal ParamArray t2() As UInteger)
End sub
End Class
Friend Module M1F
Sub FOO()
Dim c1 As New Base(Of String)
c1.fun1(Of System.ValueType) (4.4@, 3US)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32045: 'Public Sub fun1(ByRef b1 As Integer)' has no type parameters and so cannot have type arguments.
c1.fun1(Of System.ValueType) (4.4@, 3US)
~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32045ERR_TypeOrMemberNotGeneric1_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeOrMemberNotGeneric1">
<file name="a.vb">
Class Base(Of u)
sub fun1(ByRef b1 As Integer)
End sub
End Class
Class Derived(Of v)
Inherits Base(Of v)
Overloads sub fun1(Of T) (ByVal t1 As T, ByVal ParamArray t2() As UInteger)
End sub
End Class
Friend Module M1F
Sub FOO()
Dim c1 As Base(Of String) = New Derived(Of String)
c1.fun1(Of System.ValueType) (3@)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32045: 'Public Sub fun1(ByRef b1 As Integer)' has no type parameters and so cannot have type arguments.
c1.fun1(Of System.ValueType) (3@)
~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32045ERR_TypeOrMemberNotGeneric1_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeOrMemberNotGeneric1">
<file name="a.vb">
Class Base(Of u)
sub fun1(ByRef b1 As Integer)
End sub
End Class
Class Derived(Of v)
Inherits Base(Of v)
Overloads sub fun1(Of T) (ByVal t1 As T, ByVal ParamArray t2() As UInteger)
End sub
End Class
Friend Module M1F
Sub FOO()
Dim c1 As Base(Of String) = New Derived(Of String)
c1.fun1(Of System.Delegate) ("c"c, 3@)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32045: 'Public Sub fun1(ByRef b1 As Integer)' has no type parameters and so cannot have type arguments.
c1.fun1(Of System.Delegate) ("c"c, 3@)
~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32046ERR_NewIfNullOnGenericParam()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Structure S(Of T, U As New)
Sub M(Of V)()
Dim o
o = New T()
o = New U()
o = New V()
End Sub
End Structure
Class C(Of T1 As Structure, T2 As Class)
Sub M(Of T3 As Structure, T4 As {Class, New})()
Dim o
o = New T1()
o = New T2()
o = New T3()
o = New T4()
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32046: 'New' cannot be used on a type parameter that does not have a 'New' constraint.
o = New T()
~
BC32046: 'New' cannot be used on a type parameter that does not have a 'New' constraint.
o = New V()
~
BC32046: 'New' cannot be used on a type parameter that does not have a 'New' constraint.
o = New T2()
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32050ERR_UnboundTypeParam2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UnboundTypeParam2">
<file name="a.vb">
Option Strict Off
Public Module M
Sub Main()
Foo(AddressOf Bar)
End Sub
Sub Foo(Of T)(ByVal a As System.Action(Of T))
End Sub
Sub Bar(ByVal x As String)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32050: Type parameter 'T' for 'Public Sub Foo(Of T)(a As Action(Of T))' cannot be inferred.
Foo(AddressOf Bar)
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32052ERR_IsOperatorGenericParam1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class B(Of T As Structure)
End Class
Class C(Of T)
Shared o As Object
Shared Sub M1(Of T1)(_1 As T1)
If _1 Is o Then
End If
If o Is _1 Then
End If
End Sub
Shared Sub M2(Of T2 As Class)(_2 As T2)
If _2 Is o Then
End If
If o Is _2 Then
End If
End Sub
Shared Sub M3(Of T3 As Structure)(_3 As T3)
If _3 Is o Then
End If
If o Is _3 Then
End If
End Sub
Shared Sub M4(Of T4 As New)(_4 As T4)
If _4 Is o Then
End If
If o Is _4 Then
End If
End Sub
Shared Sub M5(Of T5 As I)(_5 As T5)
If _5 Is o Then
End If
If o Is _5 Then
End If
End Sub
Shared Sub M6(Of T6 As A)(_6 As T6)
If _6 Is o Then
End If
If o Is _6 Then
End If
End Sub
Shared Sub M7(Of T7 As U, U)(_7 As T7)
If _7 Is o Then
End If
If o Is _7 Then
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32052: 'Is' operand of type 'T1' can be compared only to 'Nothing' because 'T1' is a type parameter with no class constraint.
If _1 Is o Then
~~
BC32052: 'Is' operand of type 'T1' can be compared only to 'Nothing' because 'T1' is a type parameter with no class constraint.
If o Is _1 Then
~~
BC30020: 'Is' operator does not accept operands of type 'T3'. Operands must be reference or nullable types.
If _3 Is o Then
~~
BC30020: 'Is' operator does not accept operands of type 'T3'. Operands must be reference or nullable types.
If o Is _3 Then
~~
BC32052: 'Is' operand of type 'T4' can be compared only to 'Nothing' because 'T4' is a type parameter with no class constraint.
If _4 Is o Then
~~
BC32052: 'Is' operand of type 'T4' can be compared only to 'Nothing' because 'T4' is a type parameter with no class constraint.
If o Is _4 Then
~~
BC32052: 'Is' operand of type 'T5' can be compared only to 'Nothing' because 'T5' is a type parameter with no class constraint.
If _5 Is o Then
~~
BC32052: 'Is' operand of type 'T5' can be compared only to 'Nothing' because 'T5' is a type parameter with no class constraint.
If o Is _5 Then
~~
BC32052: 'Is' operand of type 'T7' can be compared only to 'Nothing' because 'T7' is a type parameter with no class constraint.
If _7 Is o Then
~~
BC32052: 'Is' operand of type 'T7' can be compared only to 'Nothing' because 'T7' is a type parameter with no class constraint.
If o Is _7 Then
~~
</expected>)
End Sub
<Fact()>
Public Sub BC32059ERR_OnlyNullLowerBound()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="IsOperatorGenericParam1">
<file name="a.vb">
Option Infer On
Module M
Sub Main()
Dim arr1(0 To 0, 0 To -1) As Integer
Dim arr3(-1 To 0, 0 To -1) As Integer 'Invalid
Dim arr4(0 To 1, -1 To 0) As Integer 'Invalid
Dim arr5(0D To 1, 0.0 To 0) As Integer 'Invalid
Dim arr6(0! To 1, 0.0 To 0) As Integer 'Invalid
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32059: Array lower bounds can be only '0'.
Dim arr3(-1 To 0, 0 To -1) As Integer 'Invalid
~~
BC32059: Array lower bounds can be only '0'.
Dim arr4(0 To 1, -1 To 0) As Integer 'Invalid
~~
BC32059: Array lower bounds can be only '0'.
Dim arr5(0D To 1, 0.0 To 0) As Integer 'Invalid
~~
BC32059: Array lower bounds can be only '0'.
Dim arr5(0D To 1, 0.0 To 0) As Integer 'Invalid
~~~
BC32059: Array lower bounds can be only '0'.
Dim arr6(0! To 1, 0.0 To 0) As Integer 'Invalid
~~
BC32059: Array lower bounds can be only '0'.
Dim arr6(0! To 1, 0.0 To 0) As Integer 'Invalid
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542204, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542204")>
<Fact()>
Public Sub BC32079ERR_TypeParameterDisallowed()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
<![CDATA[
Imports System
Class AttrCls1
Inherits Attribute
Sub New(ByVal p As Type)
End Sub
End Class
Structure S1(Of T)
Dim i As Integer
<AttrCls1(GetType(T))> _
Class Cls1
End Class
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32079: Type parameters or types constructed with type parameters are not allowed in attribute arguments.
<AttrCls1(GetType(T))> _
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542204, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542204")>
<Fact()>
Public Sub BC32079ERR_OpenTypeDisallowed()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
<![CDATA[
Imports System
Class AttrCls1
Inherits Attribute
Sub New(ByVal p As Type)
End Sub
End Class
Structure S1(Of T)
Dim i As Integer
<AttrCls1(GetType(S1(Of T)))> _
Class A
End Class
<AttrCls1(GetType(S1(Of T).A()))> _
Class B
End Class
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32079: Type parameters or types constructed with type parameters are not allowed in attribute arguments.
<AttrCls1(GetType(S1(Of T)))> _
~~~~~~~~
BC32079: Type parameters or types constructed with type parameters are not allowed in attribute arguments.
<AttrCls1(GetType(S1(Of T).A()))> _
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32085ERR_NewArgsDisallowedForTypeParam()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NewArgsDisallowedForTypeParam">
<file name="a.vb">
Module M1
Sub Sub1(Of T As New)(ByVal a As T)
a = New T()
a = New T(2)
a = New T( 2, 3,
4 )
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32085: Arguments cannot be passed to a 'New' used on a type parameter.
a = New T(2)
~
BC32085: Arguments cannot be passed to a 'New' used on a type parameter.
a = New T( 2, 3,
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32087ERR_NoTypeArgumentCountOverloadCand1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoTypeArgumentCountOverloadCand1">
<file name="a.vb">
Option Strict Off
Module M
Sub Main()
Dim x As Object = New Object()
x.Equals(Of Integer)()
x.Equals(Of Integer) = 1
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32087: Overload resolution failed because no accessible 'Equals' accepts this number of type arguments.
x.Equals(Of Integer)()
~~~~~~~~~~~~~~~~~~
BC32087: Overload resolution failed because no accessible 'Equals' accepts this number of type arguments.
x.Equals(Of Integer) = 1
~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32096ERR_ForEachAmbiguousIEnumerable1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Option Strict On
Imports System.Collections
Imports System.Collections.Generic
Class C1
Implements IEnumerable(Of String), IEnumerable(Of Integer)
Public Function GetEnumerator_int() As IEnumerator(Of integer) Implements IEnumerable(Of integer).GetEnumerator
Return Nothing
End Function
Public Function GetEnumerator_str() As IEnumerator(Of String) Implements IEnumerable(Of String).GetEnumerator
Return Nothing
End Function
Public Function GetEnumerator1_str() As IEnumerator Implements IEnumerable.GetEnumerator
Return Nothing
End Function
End Class
Class C
Shared Sub M(Of T1 As C1)(p As T1)
For Each o As T1 In p
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32096: 'For Each' on type 'T1' is ambiguous because the type implements multiple instantiations of 'System.Collections.Generic.IEnumerable(Of T)'.
For Each o As T1 In p
~
</expected>)
End Sub
<WorkItem(3420, "DevDiv_Projects/Roslyn")>
<Fact()>
Public Sub BC32095ERR_ArrayOfRawGenericInvalid()
Dim code = <![CDATA[
Class C1(Of T)
End Class
Class C2
Public Sub Main()
Dim x = GetType(C1(Of )())
End Sub
End Class
]]>.Value
ParseAndVerify(code, <errors>
<error id="32095"/>
</errors>)
End Sub
<WorkItem(543616, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543616")>
<Fact()>
Public Sub BC32096ERR_ForEachAmbiguousIEnumerable1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AmbiguousAcrossInterfaces3">
<file name="a.vb">
Imports System.Collections.Generic
Class C
Public Shared Sub Main()
End Sub
End Class
Public Class C(Of T As {IEnumerable(Of Integer), IEnumerable(Of String)})
Public Shared Sub TestForeach(t As T)
For Each i As Integer In t
Next
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32096: 'For Each' on type 'T' is ambiguous because the type implements multiple instantiations of 'System.Collections.Generic.IEnumerable(Of T)'.
For Each i As Integer In t
~
</expected>)
' used to report, but this changed now
' "BC30685: 'GetEnumerator' is ambiguous across the inherited interfaces 'System.Collections.Generic.IEnumerable(Of Integer)'
' and 'System.Collections.Generic.IEnumerable(Of String)'."
End Sub
<Fact()>
Public Sub BC32097ERR_IsNotOperatorGenericParam1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class B(Of T As Structure)
End Class
Class C(Of T)
Shared o As Object
Shared Sub M1(Of T1)(_1 As T1)
If _1 IsNot o Then
End If
If o IsNot _1 Then
End If
End Sub
Shared Sub M2(Of T2 As Class)(_2 As T2)
If _2 IsNot o Then
End If
If o IsNot _2 Then
End If
End Sub
Shared Sub M3(Of T3 As Structure)(_3 As T3)
If _3 IsNot o Then
End If
If o IsNot _3 Then
End If
End Sub
Shared Sub M4(Of T4 As New)(_4 As T4)
If _4 IsNot o Then
End If
If o IsNot _4 Then
End If
End Sub
Shared Sub M5(Of T5 As I)(_5 As T5)
If _5 IsNot o Then
End If
If o IsNot _5 Then
End If
End Sub
Shared Sub M6(Of T6 As A)(_6 As T6)
If _6 IsNot o Then
End If
If o IsNot _6 Then
End If
End Sub
Shared Sub M7(Of T7 As U, U)(_7 As T7)
If _7 IsNot o Then
End If
If o IsNot _7 Then
End If
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32097: 'IsNot' operand of type 'T1' can be compared only to 'Nothing' because 'T1' is a type parameter with no class constraint.
If _1 IsNot o Then
~~
BC32097: 'IsNot' operand of type 'T1' can be compared only to 'Nothing' because 'T1' is a type parameter with no class constraint.
If o IsNot _1 Then
~~
BC31419: 'IsNot' requires operands that have reference types, but this operand has the value type 'T3'.
If _3 IsNot o Then
~~
BC31419: 'IsNot' requires operands that have reference types, but this operand has the value type 'T3'.
If o IsNot _3 Then
~~
BC32097: 'IsNot' operand of type 'T4' can be compared only to 'Nothing' because 'T4' is a type parameter with no class constraint.
If _4 IsNot o Then
~~
BC32097: 'IsNot' operand of type 'T4' can be compared only to 'Nothing' because 'T4' is a type parameter with no class constraint.
If o IsNot _4 Then
~~
BC32097: 'IsNot' operand of type 'T5' can be compared only to 'Nothing' because 'T5' is a type parameter with no class constraint.
If _5 IsNot o Then
~~
BC32097: 'IsNot' operand of type 'T5' can be compared only to 'Nothing' because 'T5' is a type parameter with no class constraint.
If o IsNot _5 Then
~~
BC32097: 'IsNot' operand of type 'T7' can be compared only to 'Nothing' because 'T7' is a type parameter with no class constraint.
If _7 IsNot o Then
~~
BC32097: 'IsNot' operand of type 'T7' can be compared only to 'Nothing' because 'T7' is a type parameter with no class constraint.
If o IsNot _7 Then
~~
</expected>)
End Sub
<Fact()>
Public Sub BC32098ERR_TypeParamQualifierDisallowed()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypeParamQualifierDisallowed">
<file name="a.vb">
Class C1(Of T As DataHolder)
Sub Main()
T.Var1 = 4
End Sub
End Class
Class DataHolder
Public Var1 As Integer
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32098: Type parameters cannot be used as qualifiers.
T.Var1 = 4
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(545050, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545050")>
Public Sub BC32126ERR_AddressOfNullableMethod()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AddressOfNullableMethod">
<file name="a.vb">
Imports System
Module M
Sub Main()
Dim x As Integer? = Nothing
Dim ef1 As Func(Of Integer) = AddressOf x.GetValueOrDefault
Dim ef2 As Func(Of Integer, Integer) = AddressOf x.GetValueOrDefault
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_AddressOfNullableMethod, "x.GetValueOrDefault").WithArguments("Integer?", "AddressOf"),
Diagnostic(ERRID.ERR_AddressOfNullableMethod, "x.GetValueOrDefault").WithArguments("Integer?", "AddressOf"))
End Sub
<Fact()>
Public Sub BC32127ERR_IsOperatorNullable1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="IsOperatorNullable1">
<file name="a.vb">
Module M1
Sub FOO()
Dim s1_a As S1? = New S1()
Dim s1_b As S1? = New S1()
Dim B = s1_a Is s1_b
End Sub
End Module
Structure S1
End Structure
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32127: 'Is' operand of type 'S1?' can be compared only to 'Nothing' because 'S1?' is a nullable type.
Dim B = s1_a Is s1_b
~~~~
BC32127: 'Is' operand of type 'S1?' can be compared only to 'Nothing' because 'S1?' is a nullable type.
Dim B = s1_a Is s1_b
~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32128ERR_IsNotOperatorNullable1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="IsNotOperatorNullable1">
<file name="a.vb">
Module M1
Sub FOO()
Dim s1_a As S1? = New S1()
Dim s1_b As S1? = New S1()
Dim B = s1_a IsNot s1_b
End Sub
End Module
Structure S1
End Structure
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32128: 'IsNot' operand of type 'S1?' can be compared only to 'Nothing' because 'S1?' is a nullable type.
Dim B = s1_a IsNot s1_b
~~~~
BC32128: 'IsNot' operand of type 'S1?' can be compared only to 'Nothing' because 'S1?' is a nullable type.
Dim B = s1_a IsNot s1_b
~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(545669, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545669")>
<Fact()>
Public Sub BC32303ERR_IllegalCallOrIndex()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="IllegalCallOrIndex">
<file name="a.vb">
Class C1
Function Foo1() as Object
return nothing() ' Error
End Function
Function Foo2() as Object
Return CType(Nothing, Object)() ' Error
End Function
Function Foo3() as Object
Return DirectCast(TryCast(CType(Nothing, Object), C1), Object)() ' No error
End Function
Sub FOO4()
Dim testVariable As Object = Nothing(1)
End Sub
Sub FOO5()
Nothing() ' Error, but a parsing error
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC32303: Illegal call expression or index expression.
return nothing() ' Error
~~~~~~~~~
BC32303: Illegal call expression or index expression.
Return CType(Nothing, Object)() ' Error
~~~~~~~~~~~~~~~~~~~~~~~~
BC32303: Illegal call expression or index expression.
Dim testVariable As Object = Nothing(1)
~~~~~~~~~~
BC30035: Syntax error.
Nothing() ' Error, but a parsing error
~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33009ERR_ParamArrayIllegal1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UnacceptableLogicalOperator3">
<file name="a.vb">
Delegate Sub FooDel1(ParamArray p() as Integer)
Delegate Function FooDel2(ParamArray p() as Integer) as Byte
Module M1
Sub Main()
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC33009: 'Delegate' parameters cannot be declared 'ParamArray'.
Delegate Sub FooDel1(ParamArray p() as Integer)
~~~~~~~~~~
BC33009: 'Delegate' parameters cannot be declared 'ParamArray'.
Delegate Function FooDel2(ParamArray p() as Integer) as Byte
~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33034ERR_UnacceptableLogicalOperator3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UnacceptableLogicalOperator3">
<file name="a.vb">
Imports System
Class c1
End Class
Class c2
Inherits c1
Shared Operator And(ByVal x As c2, ByVal y As c1) As c2
Return New c2
End Operator
Shared Operator Or(ByVal x As c2, ByVal y As c2) As c2
Return New c2
End Operator
End Class
Module M1
Sub Main()
Dim o1 As New c2, o2 As New c2, o As Object
o = o1 AndAlso o2
o = o1 OrElse o2
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC33034: Return and parameter types of 'Public Shared Operator And(x As c2, y As c1) As c2' must be 'c2' to be used in a 'AndAlso' expression.
o = o1 AndAlso o2
~~~~~~~~~~~~~
BC33035: Type 'c2' must define operator 'IsTrue' to be used in a 'OrElse' expression.
o = o1 OrElse o2
~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33037ERR_CopyBackTypeMismatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CopyBackTypeMismatch3">
<file name="a.vb">
Class c2
Shared Widening Operator CType(ByVal x As c2) As Integer
Return 9
End Operator
End Class
Module M1
Sub FOO()
Dim o As New c2
FOO(o)
End Sub
Sub foo(ByRef x As Integer)
x = 99
End Sub
End Module
</file>
</compilation>)
compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_CopyBackTypeMismatch3, "o").WithArguments("x", "Integer", "c2"))
End Sub
' Roslyn extra errors (last 3)
<Fact()>
Public Sub BC33038ERR_ForLoopOperatorRequired2()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ForLoopOperatorRequired2">
<file name="a.vb">
Class S1
Public Shared Widening Operator CType(ByVal x As Integer) As S1
Return Nothing
End Operator
Sub foo()
Dim v As S1
For i = 1 To v
Next
End Sub
End Class
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_ForLoopOperatorRequired2, "For i = 1 To v").WithArguments("S1", "+"),
Diagnostic(ERRID.ERR_ForLoopOperatorRequired2, "For i = 1 To v").WithArguments("S1", "-"),
Diagnostic(ERRID.ERR_ForLoopOperatorRequired2, "For i = 1 To v").WithArguments("S1", "<="),
Diagnostic(ERRID.ERR_ForLoopOperatorRequired2, "For i = 1 To v").WithArguments("S1", ">="),
Diagnostic(ERRID.WRN_DefAsgUseNullRef, "v").WithArguments("v"))
End Sub
' Roslyn extra errors (last 2)
<Fact()>
Public Sub BC33039ERR_UnacceptableForLoopOperator2()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UnacceptableForLoopOperator2">
<file name="a.vb">
Module M1
Class C1(Of t)
Shared Widening Operator CType(ByVal p1 As C1(Of t)) As Integer
Return 1
End Operator
Shared Widening Operator CType(ByVal p1 As Integer) As C1(Of t)
Return Nothing
End Operator
Shared Operator -(ByVal p1 As C1(Of t), ByVal p2 As C1(Of t)) As C1(Of Short)
Return Nothing
End Operator
Shared Operator +(ByVal p1 As C1(Of t), ByVal p2 As C1(Of t)) As C1(Of Integer)
Return Nothing
End Operator
End Class
Sub foo()
For i As C1(Of Integer) = 1 To 10
Next
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_UnacceptableForLoopOperator2, "For i As C1(Of Integer) = 1 To 10").WithArguments("Public Shared Operator -(p1 As M1.C1(Of Integer), p2 As M1.C1(Of Integer)) As M1.C1(Of Short)", "M1.C1(Of Integer)"),
Diagnostic(ERRID.ERR_ForLoopOperatorRequired2, "For i As C1(Of Integer) = 1 To 10").WithArguments("M1.C1(Of Integer)", "<="),
Diagnostic(ERRID.ERR_ForLoopOperatorRequired2, "For i As C1(Of Integer) = 1 To 10").WithArguments("M1.C1(Of Integer)", ">="))
End Sub
<Fact()>
Public Sub BC33107ERR_IllegalCondTypeInIIF()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="IllegalCondTypeInIIF">
<file name="a.vb">
Option Infer On
Imports System
Class S1
Sub foo()
Dim choice1 = 4
Dim choice2 = 5
Dim booleanVar = True
Console.WriteLine(If(choice1 < choice2, 1))
Console.WriteLine(If(booleanVar, "Test returns True."))
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC33107: First operand in a binary 'If' expression must be a nullable value type, a reference type, or an unconstrained generic type.
Console.WriteLine(If(choice1 < choice2, 1))
~~~~~~~~~~~~~~~~~
BC33107: First operand in a binary 'If' expression must be a nullable value type, a reference type, or an unconstrained generic type.
Console.WriteLine(If(booleanVar, "Test returns True."))
~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33100ERR_CantSpecifyNullableOnBoth()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantSpecifyNullableOnBoth">
<file name="a.vb">
Class C1
Sub foo()
Dim z? As Integer?
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42024: Unused local variable: 'z'.
Dim z? As Integer?
~
BC33100: Nullable modifier cannot be specified on both a variable and its type.
Dim z? As Integer?
~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36006ERR_BadAttributeConstructor2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadAttributeConstructor2">
<file name="a.vb"><![CDATA[
Imports System
Public Class MyAttr
Inherits Attribute
Public Sub New(ByVal i As Integer, ByRef V As Integer)
End Sub
End Class
<MyAttr(1, 1)> Public Class MyTest
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadAttributeConstructor2, "MyAttr").WithArguments("Integer"))
End Sub
<Fact()>
Public Sub BC36009ERR_GotoIntoUsing()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="GotoIntoUsing">
<file name="a.vb">
Imports System
Class C1
Sub foo()
If (True)
GoTo label1
End If
Using o as IDisposable = nothing
label1:
End Using
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC36009: 'GoTo label1' is not valid because 'label1' is inside a 'Using' statement that does not contain this statement.
GoTo label1
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36010ERR_UsingRequiresDisposePattern()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UsingRequiresDisposePattern">
<file name="a.vb">
Class [IsNot]
Public i As Integer
End Class
Class C1
Sub FOO()
Dim c1 as [IsNot] = nothing, c2 As [IsNot] = nothing
Using c1 IsNot c2
End Using
Using new [IsNot]()
End Using
Using c3 As New [IsNot]()
End Using
Using c4 As [IsNot] = new [IsNot]()
End Using
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36010: 'Using' operand of type 'Boolean' must implement 'System.IDisposable'.
Using c1 IsNot c2
~~~~~~~~~~~
BC36010: 'Using' operand of type '[IsNot]' must implement 'System.IDisposable'.
Using new [IsNot]()
~~~~~~~~~~~~~
BC36010: 'Using' operand of type '[IsNot]' must implement 'System.IDisposable'.
Using c3 As New [IsNot]()
~~~~~~~~~~~~~~~~~~~
BC36010: 'Using' operand of type '[IsNot]' must implement 'System.IDisposable'.
Using c4 As [IsNot] = new [IsNot]()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36011ERR_UsingResourceVarNeedsInitializer()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UsingResourceVarNeedsInitializer">
<file name="a.vb">
Option Strict On
Option Infer Off
Option Explicit Off
Imports System
Class MyDisposable
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
End Sub
End Class
Class C1
Public Shared Sub Main()
Using foo As MyDisposable
Console.WriteLine("Inside Using.")
End Using
Using foo2 As New MyDisposable()
Console.WriteLine("Inside Using.")
End Using
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36011: 'Using' resource variable must have an explicit initialization.
Using foo As MyDisposable
~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36012ERR_UsingResourceVarCantBeArray()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UsingResourceVarNeedsInitializer">
<file name="a.vb">
Option Strict On
Option Infer Off
Option Explicit Off
Imports System
Structure MyDisposable
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
End Sub
End Structure
Class C1
Public Shared Sub Main()
Using foo?() As MyDisposable = Nothing
Console.WriteLine("Inside Using.")
End Using
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36012: 'Using' resource variable type can not be array type.
Using foo?() As MyDisposable = Nothing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36532ERR_LambdaBindingMismatch1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaBindingMismatch1">
<file name="a.vb">
Option Strict Off
Imports System
Public Module M
Sub Main()
Dim x As Func(Of Exception, Object) = Function(y$) y
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36532: Nested function does not have the same signature as delegate 'Func(Of Exception, Object)'.
Dim x As Func(Of Exception, Object) = Function(y$) y
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36533ERR_CannotLiftByRefParamQuery1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="CannotLiftByRefParamQuery1">
<file name="a.vb">
Option Strict Off
Imports System.Linq
Imports System.Collections.Generic
Public Module M
Sub RunQuery(ByVal collection As List(Of Integer), _
ByRef filterValue As Integer)
Dim queryResult = From num In collection _
Where num < filterValue
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36533: 'ByRef' parameter 'filterValue' cannot be used in a query expression.
Where num < filterValue
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36534ERR_ExpressionTreeNotSupported_NoError()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ExpressionTreeNotSupported">
<file name="a.vb">
Imports System.Runtime.CompilerServices
Imports System.Linq.Expressions
Imports System
Module M
Sub Main()
Dim x As Expression(Of Func(Of Action)) = Function() AddressOf 0.Foo
End Sub
<Extension()>
Sub Foo(ByVal x As Integer)
x = Nothing
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation, <expected></expected>)
End Sub
<Fact()>
Public Sub BC36534ERR_ExpressionTreeNotSupported()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ExpressionTreeNotSupported">
<file name="a.vb">
Imports System.Runtime.CompilerServices
Imports System.Linq.Expressions
Imports System
Module M
Sub Main()
Dim a As Integer
Dim x As Expression(Of Func(Of Action)) = Function() Sub() a = 1
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36534: Expression cannot be converted into an expression tree.
Dim x As Expression(Of Func(Of Action)) = Function() Sub() a = 1
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36535ERR_CannotLiftStructureMeQuery()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="CannotLiftStructureMeQuery">
<file name="a.vb">
Option Infer On
Imports System.Linq
Structure S1
Sub test()
Dim col = New Integer() {1, 2, 3}
Dim x = From i In col Let j = Me
End Sub
End Structure
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36535: Instance members and 'Me' cannot be used within query expressions in structures.
Dim x = From i In col Let j = Me
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36535ERR_CannotLiftStructureMeQuery_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="CannotLiftStructureMeQuery_2">
<file name="a.vb">
Option Infer On
Imports System.Linq
Structure S1
Sub test()
Dim col = New Integer() {1, 2, 3}
Dim x = From i In col Let j = MyClass.ToString()
End Sub
End Structure
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36535: Instance members and 'Me' cannot be used within query expressions in structures.
Dim x = From i In col Let j = MyClass.ToString()
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36536ERR_InferringNonArrayType1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InferringNonArrayType1">
<file name="a.vb">
Option Strict Off
Option Infer On
Module M
Sub Main()
Dim x() = 1
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36536: Variable cannot be initialized with non-array type 'Integer'.
Dim x() = 1
~
BC30311: Value of type 'Integer' cannot be converted to 'Object()'.
Dim x() = 1
~
</expected>)
End Sub
<Fact()>
Public Sub BC36538ERR_ByRefParamInExpressionTree()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ByRefParamInExpressionTree">
<file name="a.vb">
Imports System
Imports System.Linq.Expressions
Structure S1
Sub test()
Foo(Function(ByRef x As Double, y As Integer) 1.1)
End Sub
End Structure
Module Module1
Delegate Function MyFunc(Of T)(ByRef x As T, ByVal y As T) As T
Sub Foo(Of T)(ByVal x As Expression(Of MyFunc(Of T)))
End Sub
End Module
</file>
</compilation>, references:={Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36538: References to 'ByRef' parameters cannot be converted to an expression tree.
Foo(Function(ByRef x As Double, y As Integer) 1.1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36547ERR_DuplicateAnonTypeMemberName1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateAnonTypeMemberName1">
<file name="a.vb">
Module M
Sub Main()
Dim at1 = New With {"".ToString}
Dim at2 = New With {Key .a = 1, .GetHashCode = "A"}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36547: Anonymous type member or property 'ToString' is already declared.
Dim at1 = New With {"".ToString}
~~~~~~~~~~~
BC36547: Anonymous type member or property 'GetHashCode' is already declared.
Dim at2 = New With {Key .a = 1, .GetHashCode = "A"}
~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36548ERR_BadAnonymousTypeForExprTree()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="BadAnonymousTypeForExprTree">
<file name="a.vb">
Imports System
Imports System.Linq.Expressions
Module M
Sub Main()
Dim x As Expression(Of Func(Of Object)) = Function() New With {.x = 1, .y = .x}
End Sub
End Module
</file>
</compilation>, {Net40.References.System, Net40.References.SystemCore, Net40.References.MicrosoftVisualBasic})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36548: Cannot convert anonymous type to an expression tree because a property of the type is used to initialize another property.
Dim x As Expression(Of Func(Of Object)) = Function() New With {.x = 1, .y = .x}
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36549ERR_CannotLiftAnonymousType1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="CannotLiftAnonymousType1">
<file name="a.vb">
Imports System.Linq
Module M
Dim x = New With {.y = 1, .z = From y In "" Select .y}
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseEmitDiagnostics(compilation,
<expected>
BC36549: Anonymous type property 'y' cannot be used in the definition of a lambda expression within the same initialization list.
Dim x = New With {.y = 1, .z = From y In "" Select .y}
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36557ERR_NameNotMemberOfAnonymousType2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NameNotMemberOfAnonymousType2">
<file name="a.vb">
Structure S1
Sub test()
Dim x = New With {.prop1 = New With {.prop2 = .prop1}}
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36557: 'prop1' is not a member of '<anonymous type>'; it does not exist in the current context.
Dim x = New With {.prop1 = New With {.prop2 = .prop1}}
~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36558ERR_ExtensionAttributeInvalid()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Namespace System.Runtime.CompilerServices
<AttributeUsage(AttributeTargets.Method Or AttributeTargets.Property Or AttributeTargets.Class)>
Public Class ExtensionAttribute
Inherits Attribute
End Class
End Namespace
<System.Runtime.CompilerServices.Extension()> ' 1
Module Program
<System.Runtime.CompilerServices.Extension()> ' 2
Sub boo(n As String)
End Sub
<System.Runtime.CompilerServices.Extension()> ' 3
Delegate Sub b()
Sub Main(args As String())
End Sub
End Module
<System.Runtime.CompilerServices.Extension()> ' 4
Class T
<System.Runtime.CompilerServices.Extension()> ' 5
Sub boo(n As String)
End Sub
End Class
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
<![CDATA[
BC36558: The custom-designed version of 'System.Runtime.CompilerServices.ExtensionAttribute' found by the compiler is not valid. Its attribute usage flags must be set to allow assemblies, classes, and methods.
<System.Runtime.CompilerServices.Extension()> ' 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36558: The custom-designed version of 'System.Runtime.CompilerServices.ExtensionAttribute' found by the compiler is not valid. Its attribute usage flags must be set to allow assemblies, classes, and methods.
<System.Runtime.CompilerServices.Extension()> ' 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30662: Attribute 'ExtensionAttribute' cannot be applied to 'b' because the attribute is not valid on this declaration type.
<System.Runtime.CompilerServices.Extension()> ' 3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36558: The custom-designed version of 'System.Runtime.CompilerServices.ExtensionAttribute' found by the compiler is not valid. Its attribute usage flags must be set to allow assemblies, classes, and methods.
<System.Runtime.CompilerServices.Extension()> ' 4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36550: 'Extension' attribute can be applied only to 'Module', 'Sub', or 'Function' declarations.
Class T
~
BC36551: Extension methods can be defined only in modules.
<System.Runtime.CompilerServices.Extension()> ' 5
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36558: The custom-designed version of 'System.Runtime.CompilerServices.ExtensionAttribute' found by the compiler is not valid. Its attribute usage flags must be set to allow assemblies, classes, and methods.
<System.Runtime.CompilerServices.Extension()> ' 5
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]>
</expected>)
End Sub
<Fact()>
Public Sub BC36559ERR_AnonymousTypePropertyOutOfOrder1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="AnonymousTypePropertyOutOfOrder1">
<file name="a.vb">
Imports System.Runtime.CompilerServices
Module M
Sub Foo()
Dim x = New With {.X = .X}
End Sub
<Extension()>
Function X(ByVal y As Object) As Object
Return Nothing
End Function
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36559: Anonymous type member property 'X' cannot be used to infer the type of another member property because the type of 'X' is not yet established.
Dim x = New With {.X = .X}
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36560ERR_AnonymousTypeDisallowsTypeChar()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AnonymousTypeDisallowsTypeChar">
<file name="a.vb">
Imports System.Runtime.CompilerServices
Module M
Sub Foo()
Dim anon1 = New With {.ID$ = "abc"}
Dim anon2 = New With {.ID$ = 42}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36560: Type characters cannot be used in anonymous type declarations.
Dim anon1 = New With {.ID$ = "abc"}
~~~~~~~~~~~~
BC36560: Type characters cannot be used in anonymous type declarations.
Dim anon2 = New With {.ID$ = 42}
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36564ERR_DelegateBindingTypeInferenceFails()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DelegateBindingTypeInferenceFails">
<file name="a.vb">
Option Strict Off
Imports System
Public Module M
Sub Main()
Dim k = {Sub() Console.WriteLine(), AddressOf Foo}
End Sub
Sub Foo(Of T)()
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_DelegateBindingTypeInferenceFails, "Foo"))
End Sub
<Fact()>
Public Sub BC36574ERR_AnonymousTypeNeedField()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AnonymousTypeNeedField">
<file name="a.vb">
Public Module M
Sub Main()
Dim anonInstance = New With {}
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AnonymousTypeNeedField, "{"))
End Sub
<Fact()>
Public Sub BC36582ERR_TooManyArgs2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="TooManyArgs2">
<file name="a.vb">
Module M1
Function IntegerExtension(ByVal a As Integer) As Integer
Dim x1 As Integer
x1.FooGeneric01(1)
return nothing
End Function
End Module
Module Extension01
<System.Runtime.CompilerServices.Extension()> Sub FooGeneric01(Of T1)(ByVal o As T1)
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36582: Too many arguments to extension method 'Public Sub FooGeneric01()' defined in 'Extension01'.
x1.FooGeneric01(1)
~
</expected>)
End Sub
<Fact(), WorkItem(543658, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543658")>
Public Sub BC36583ERR_NamedArgAlsoOmitted3()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="NamedArgAlsoOmitted3">
<file name="a.vb">
Imports System.Runtime.CompilerServices
Public Module M
<Extension()> _
Public Sub ABC(ByVal X As Integer, Optional ByVal Y As Byte = 0, _
Optional ByVal Z As Byte = 0)
End Sub
Sub FOO()
Dim number As Integer
number.ABC(, 4, Y:=5)
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_NamedArgAlsoOmitted3, "Y").WithArguments("Y", "Public Sub ABC([Y As Byte = 0], [Z As Byte = 0])", "M"))
End Sub
<Fact()>
Public Sub BC36584ERR_NamedArgUsedTwice3()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="NamedArgUsedTwice3">
<file name="a.vb">
Imports System.Runtime.CompilerServices
Public Module M
<Extension()> _
Public Sub ABC(ByVal X As Integer, ByVal Y As Byte, _
Optional ByVal Z As Byte = 0)
End Sub
Sub FOO()
Dim number As Integer
number.ABC(1, Y:=4, Y:=5)
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_NamedArgUsedTwice3, "Y").WithArguments("Y", "Public Sub ABC(Y As Byte, [Z As Byte = 0])", "M"),
Diagnostic(ERRID.ERR_NamedArgUsedTwice3, "Y").WithArguments("Y", "Public Sub ABC(Y As Byte, [Z As Byte = 0])", "M"))
End Sub
<Fact()>
Public Sub BC36589ERR_UnboundTypeParam3()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="UnboundTypeParam3">
<file name="a.vb">
Delegate Function Func1(Of T0, S)(ByVal arg1 As T0) As S
Delegate Sub Func2s(Of T0, T1, S)(ByVal arg1 As T0, ByVal arg2 As T1)
Class C1
Function [Select](ByVal sel As Func1(Of Integer, Integer)) As C1
Return Me
End Function
End Class
Module M1
<System.Runtime.CompilerServices.Extension()> _
Function GroupJoin(Of TKey, TResult)(ByVal col As C1, ByVal coll2 As C1, ByVal key As Func1(Of Integer, TKey), ByVal key2 As Func1(Of Integer, TKey), ByVal resultSelector As Func2s(Of Integer, System.Collections.Generic.IEnumerable(Of Integer), TResult)) As System.Collections.Generic.IEnumerable(Of TResult)
Return Nothing
End Function
End Module
Module M2
Sub foo()
Dim x = New C1
Dim y = From i In x Select i Group Join j In x On i Equals j Into G = Group, Count()
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_QueryOperatorNotFound, "Group Join").WithArguments("GroupJoin"))
End Sub
<Fact()>
Public Sub BC36590ERR_TooFewGenericArguments2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="TooFewGenericArguments2">
<file name="a.vb">
Module M1
Sub foo()
Dim x As cLSIfooClass(Of Integer)
x.foo(Of String)("RR")
End Sub
End Module
Module Extension01
<System.Runtime.CompilerServices.Extension()> Sub foo(Of T1, t2, t3)(ByVal o As T1, ByVal p As t2, ByVal q As t3)
End Sub
End Module
Public Interface Ifoo(Of t)
End Interface
Class cLSIfooClass(Of T)
Implements Ifoo(Of T)
End Class
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42104: Variable 'x' is used before it has been assigned a value. A null reference exception could result at runtime.
x.foo(Of String)("RR")
~
BC36590: Too few type arguments to extension method 'Public Sub foo(Of t2, t3)(p As t2, q As t3)' defined in 'Extension01'.
x.foo(Of String)("RR")
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36591ERR_TooManyGenericArguments2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="TooManyGenericArguments2">
<file name="a.vb">
Module M1
Sub foo()
Dim x As cLSIfooClass(Of Integer)
x.foo(Of Integer, String)("RR")
End Sub
End Module
Module Extension01
<System.Runtime.CompilerServices.Extension()> Sub foo(Of T1, t2)(ByVal o As Ifoo(Of T1), ByVal p As t2)
End Sub
End Module
Public Interface Ifoo(Of t)
End Interface
Class cLSIfooClass(Of T)
Implements Ifoo(Of T)
End Class
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42104: Variable 'x' is used before it has been assigned a value. A null reference exception could result at runtime.
x.foo(Of Integer, String)("RR")
~
BC36591: Too many type arguments to extension method 'Public Sub foo(Of t2)(p As t2)' defined in 'Extension01'.
x.foo(Of Integer, String)("RR")
~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36593ERR_ExpectedQueryableSource()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ExpectedQueryableSource">
<file name="a.vb">
Structure S1
Public Sub GetData()
Dim query = From number In Me
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36593: Expression of type 'S1' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider.
Dim query = From number In Me
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36594ERR_QueryOperatorNotFound()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="QueryOperatorNotFound">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Imports System.Linq
Module M
Sub Main()
Dim x = (Aggregate y In {Function(e) 1} Into y())
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36594: Definition of method 'y' is not accessible in this context.
Dim x = (Aggregate y In {Function(e) 1} Into y())
~
</expected>)
End Sub
<Fact()>
Public Sub BC36597ERR_CannotGotoNonScopeBlocksWithClosure()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CannotGotoNonScopeBlocksWithClosure">
<file name="a.vb">
Module M
Sub BadGoto()
Dim x = 0
If x > 5 Then
Label1:
Dim y = 5
Dim f = Function() y
End If
GoTo Label1
End Sub
End Module
</file>
</compilation>)
AssertTheseEmitDiagnostics(compilation,
<expected>
BC36597: 'Goto Label1' is not valid because 'Label1' is inside a scope that defines a variable that is used in a lambda or query expression.
GoTo Label1
~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36599ERR_QueryAnonymousTypeFieldNameInference()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="QueryAnonymousTypeFieldNameInference">
<file name="a.vb">
Option Strict On
Imports System.Linq
Module M
Sub Foo()
From x In {""} Select x, Nothing
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
compilation.VerifyDiagnostics(
Diagnostic(ERRID.ERR_QueryAnonymousTypeFieldNameInference, "Nothing"),
Diagnostic(ERRID.ERR_ExpectedProcedure, "From x In {""""} Select x, Nothing")) ' Extra in Roslyn & NOT in vbc
End Sub
<Fact()>
Public Sub BC36600ERR_QueryDuplicateAnonTypeMemberName1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="QueryDuplicateAnonTypeMemberName1">
<file name="a.vb">
Option Strict On
Imports System
Imports System.Runtime.CompilerServices
Imports System.Linq
Module M
Sub Foo()
Dim y = From x In ""
Group By x
Into Bar(), Bar(1)
End Sub
<Extension()>
Function Bar(ByVal x As Object, ByVal y As Func(Of Char, Object)) As String
Return Nothing
End Function
<Extension()>
Function Bar(ByVal x As Object) As String
Return Nothing
End Function
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(
Diagnostic(ERRID.ERR_QueryDuplicateAnonTypeMemberName1, "Bar").WithArguments("Bar"))
End Sub
<Fact()>
Public Sub BC36601ERR_QueryAnonymousTypeDisallowsTypeChar()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="QueryAnonymousTypeDisallowsTypeChar">
<file name="a.vb">
Option Infer On
Imports System.Linq
Module M
Dim q = From x% In New Integer() {1}
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36601: Type characters cannot be used in range variable declarations.
Dim q = From x% In New Integer() {1}
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36602ERR_ReadOnlyInClosure()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ReadOnlyInClosure">
<file name="a.vb">
Class Class1
ReadOnly m As Integer
Sub New()
Dim f = Function() Test(m)
End Sub
Function Test(ByRef n As Integer) As String
Return Nothing
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36602: 'ReadOnly' variable cannot be the target of an assignment in a lambda expression inside a constructor.
Dim f = Function() Test(m)
~
</expected>)
End Sub
<Fact()>
Public Sub BC36602ERR_ReadOnlyInClosure1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ReadOnlyInClosure">
<file name="a.vb">
Class Class1
ReadOnly property m As Integer
Sub New()
Dim f = Function() Test(m)
End Sub
Function Test(ByRef n As Integer) As String
Return Nothing
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36602: 'ReadOnly' variable cannot be the target of an assignment in a lambda expression inside a constructor.
Dim f = Function() Test(m)
~
</expected>)
End Sub
<Fact()>
Public Sub BC36603ERR_ExprTreeNoMultiDimArrayCreation()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ExprTreeNoMultiDimArrayCreation">
<file name="a.vb">
Imports System
Imports System.Linq.Expressions
Module M
Sub Main()
Dim ex As Expression(Of Func(Of Object)) = Function() {{1}}
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36603: Multi-dimensional array cannot be converted to an expression tree.
Dim ex As Expression(Of Func(Of Object)) = Function() {{1}}
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36604ERR_ExprTreeNoLateBind()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ExprTreeNoLateBind">
<file name="a.vb">
Imports System
Imports System.Linq.Expressions
Module M
Sub Main()
Dim ex As Expression(Of Func(Of Object, Object)) = Function(x) x.Foo
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36604: Late binding operations cannot be converted to an expression tree.
Dim ex As Expression(Of Func(Of Object, Object)) = Function(x) x.Foo
~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36606ERR_QueryInvalidControlVariableName1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="QueryInvalidControlVariableName1">
<file name="a.vb">
Option Infer On
Imports System.Linq
Class M
Dim x = From y In "" Select ToString()
End Class
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36606: Range variable name cannot match the name of a member of the 'Object' class.
Dim x = From y In "" Select ToString()
~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36610ERR_QueryNameNotDeclared()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(references:={Net40.References.SystemCore}, source:=
<compilation name="QueryNameNotDeclared">
<file name="a.vb">
Imports System
Imports System.Linq
Module M
Sub Main()
Dim c = From x In {1} Group By y = 0, z = y Into Count()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36610: Name 'y' is either not declared or not in the current scope.
Dim c = From x In {1} Group By y = 0, z = y Into Count()
~
</expected>)
End Sub
<Fact()>
Public Sub BC36614ERR_QueryAnonTypeFieldXMLNameInference()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports System.Xml.Linq
Imports System.Collections.Generic
Imports System.Linq
Imports <xmlns:ns="5">
Imports <xmlns:n-s="b">
Module M1
Sub foo()
Dim x = From i In (<ns:e <%= <ns:e><%= "hello" %></ns:e> %>></ns:e>.<ns:e>) _
Where i.Value <> (<<%= <ns:e></ns:e>.Name %>></>.Value) _
Select <e><%= i %></e>.<ns:e-e>, i
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC36614: Range variable name cannot be inferred from an XML identifier that is not a valid Visual Basic identifier.
Select <e><%= i %></e>.<ns:e-e>, i
~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC36617ERR_TypeCharOnAggregation()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="TypeCharOnAggregation">
<file name="a.vb">
Option Strict On
Imports System.Runtime.CompilerServices
Imports System
Imports System.Linq
Module M
Sub Foo()
Dim y = From x In ""
Group By x
Into Bar$(1)
End Sub
<Extension()>
Function Bar$(ByVal x As Object, ByVal y As Func(Of Char, Object))
Return Nothing
End Function
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_TypeCharOnAggregation, "Bar$"),
Diagnostic(ERRID.ERR_QueryAnonymousTypeDisallowsTypeChar, "Bar$"))
End Sub
<Fact()>
Public Sub BC36625ERR_LambdaNotDelegate1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaNotDelegate1">
<file name="a.vb">
Module LambdaSyntax
Sub LambdaSyntax()
If Function() True Then
ElseIf Function(x As Boolean) x Then
End If
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36625: Lambda expression cannot be converted to 'Boolean' because 'Boolean' is not a delegate type.
If Function() True Then
~~~~~~~~~~~~~~~
BC36625: Lambda expression cannot be converted to 'Boolean' because 'Boolean' is not a delegate type.
ElseIf Function(x As Boolean) x Then
~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36628ERR_CannotInferNullableForVariable1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CannotInferNullableForVariable1">
<file name="a.vb">
Option Infer on
Imports System
Module M
Sub Foo()
Dim except? = New Exception
Dim obj? = New Object
Dim stringVar? = "Open the application."
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36628: A nullable type cannot be inferred for variable 'except'.
Dim except? = New Exception
~~~~~~
BC36628: A nullable type cannot be inferred for variable 'obj'.
Dim obj? = New Object
~~~
BC36628: A nullable type cannot be inferred for variable 'stringVar'.
Dim stringVar? = "Open the application."
~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36633ERR_IterationVariableShadowLocal2()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="IterationVariableShadowLocal2">
<file name="a.vb">
Option Explicit Off
Imports System
Imports System.Linq
Imports System.Collections.Generic
Module M1
<System.Runtime.CompilerServices.Extension()> _
Sub Show(Of T)(ByVal collection As IEnumerable(Of T))
For Each element In collection
Console.WriteLine(element)
Next
End Sub
Sub Scen1()
implicit = 1
'COMPILEERROR : BC36633, "implicit"
Dim x = From implicit In New Integer() {1, 2, 3} Let implicit = jj Select implicit
'COMPILEERROR : BC36633, "implicit"
Dim y = From i In New Integer() {1, 2, 3} Let implicit = i Select implicit
'COMPILEERROR : BC36633, "implicit"
Dim z = From i In New Integer() {1, 2, 3} Let j = implicit Select implicit
'COMPILEERROR : BC36633, "implicit"
Dim u = From i In New Integer() {1, 2, 3} Let j = implicit Group i By i Into implicit = Group
'COMPILEERROR : BC36633, "implicit"
Dim v = From i In New Integer() {1, 2, 3} Let j = implicit Group implicit By i Into implicit()
'COMPILEERROR : BC36633, "implicit"
Dim w = From i In New Integer() {1, 2, 3} Let j = implicit Group i By implicit Into implicit()
'COMPILEERROR : BC36633, "implicit", BC36633, "implicit"
Dim a = From i In New Integer() {1, 2, 3} Let j = implicit Group implicit By implicit Into implicit()
'COMPILEERROR : BC36633, "implicit"
Dim b = From i In New Integer() {1, 2, 3}, j In New Integer() {1, 2, 3} Let k = implicit Group Join implicit In New Integer() {1, 2, 3} On i Equals implicit Into implicit()
'COMPILEERROR : BC36633, "implicit"
Dim c = From i In New Integer() {1, 2, 3}, j In New Integer() {1, 2, 3} Let k = implicit Group Join l In New Integer() {1, 2, 3} On i Equals l Into implicit = Group
End Sub
Sub Scen2()
'COMPILEERROR : BC36633, "implicit", BC36633, "implicit"
Dim x = From implicit In New Integer() {1, 2, 3} Let implicit = jj Select implicit
'COMPILEERROR : BC36633, "implicit", BC36633, "implicit"
Dim y = From i In New Integer() {1, 2, 3} Let implicit = i Select implicit
'COMPILEERROR : BC36633, "implicit"
Dim z = From i In New Integer() {1, 2, 3} Let j = implicit Select implicit
'COMPILEERROR : BC36633, "implicit"
Dim u = From i In New Integer() {1, 2, 3} Let j = implicit Group i By i Into implicit = Group
'COMPILEERROR : BC36633, "implicit"
Dim v = From i In New Integer() {1, 2, 3} Let j = implicit Group implicit By i Into implicit()
'COMPILEERROR : BC36633, "implicit"
Dim w = From i In New Integer() {1, 2, 3} Let j = implicit Group i By implicit Into implicit()
'COMPILEERROR : BC36633, "implicit", BC36633, "implicit"
Dim a = From i In New Integer() {1, 2, 3} Let j = implicit Group implicit By implicit Into implicit()
'COMPILEERROR : BC36633, "implicit"
Dim b = From i In New Integer() {1, 2, 3}, j In New Integer() {1, 2, 3} Let k = implicit Group Join implicit In New Integer() {1, 2, 3} On i Equals implicit Into implicit()
'COMPILEERROR : BC36633, "implicit"
Dim c = From i In New Integer() {1, 2, 3}, j In New Integer() {1, 2, 3} Let k = implicit Group Join l In New Integer() {1, 2, 3} On i Equals l Into implicit = Group
implicit = 1
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryDuplicateAnonTypeMemberName1, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryDuplicateAnonTypeMemberName1, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.WRN_DefAsgUseNullRef, "jj").WithArguments("jj"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryDuplicateAnonTypeMemberName1, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryDuplicateAnonTypeMemberName1, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_QueryOperatorNotFound, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.ERR_IterationVariableShadowLocal2, "implicit").WithArguments("implicit"),
Diagnostic(ERRID.WRN_DefAsgUseNullRef, "jj").WithArguments("jj"),
Diagnostic(ERRID.WRN_DefAsgUseNullRef, "implicit").WithArguments("implicit"))
End Sub
<Fact()>
Public Sub BC36635ERR_LambdaInSelectCaseExpr()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaInSelectCaseExpr">
<file name="a.vb">
Public Module M
Sub LambdaAttribute()
Select Case (Function(arg) arg Is Nothing)
End Select
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36635: Lambda expressions are not valid in the first expression of a 'Select Case' statement.
Select Case (Function(arg) arg Is Nothing)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36638ERR_CannotLiftStructureMeLambda()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="CannotLiftStructureMeLambda">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Linq.Expressions
Structure S
Sub New(ByVal x As S)
Dim a As Expression(Of Action) = Sub() ToString()
Dim b As Expression(Of Action) = Sub() Console.WriteLine(Me)
End Sub
End Structure
</file>
</compilation>, references:={Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures.
Dim a As Expression(Of Action) = Sub() ToString()
~~~~~~~~
BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures.
Dim b As Expression(Of Action) = Sub() Console.WriteLine(Me)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36638ERR_CannotLiftStructureMeLambda_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CannotLiftStructureMeLambda_2">
<file name="a.vb">
Imports System
Structure S
Sub New(ByVal x As S)
Dim a As Action = Sub() ToString()
Dim b As Action = Sub() Console.WriteLine(Me)
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures.
Dim a As Action = Sub() ToString()
~~~~~~~~
BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures.
Dim b As Action = Sub() Console.WriteLine(Me)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36638ERR_CannotLiftStructureMeLambda_3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CannotLiftStructureMeLambda_3">
<file name="a.vb">
Imports System
Structure S
Sub New(ByVal x As S)
Dim a As Action = Sub() MyClass.ToString()
Dim b As Action = Sub() Console.WriteLine(MyClass.ToString())
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures.
Dim a As Action = Sub() MyClass.ToString()
~~~~~~~
BC36638: Instance members and 'Me' cannot be used within a lambda expression in structures.
Dim b As Action = Sub() Console.WriteLine(MyClass.ToString())
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36639ERR_CannotLiftByRefParamLambda1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CannotLiftByRefParamLambda1">
<file name="a.vb">
Imports System
Public Module M
Sub Foo(ByRef x As String)
Dim a As Action = Sub() Console.WriteLine(x)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36639: 'ByRef' parameter 'x' cannot be used in a lambda expression.
Dim a As Action = Sub() Console.WriteLine(x)
~
</expected>)
End Sub
<Fact()>
Public Sub BC36640ERR_CannotLiftRestrictedTypeLambda()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CannotLiftRestrictedTypeLambda">
<file name="a.vb">
Imports System
Public Module M
Sub LiftRestrictedType()
Dim x As ArgIterator = Nothing
Dim f As Action = Sub() x.GetNextArgType().GetModuleHandle()
End Sub
End Module
</file>
</compilation>)
compilation.VerifyEmitDiagnostics(
Diagnostic(ERRID.ERR_CannotLiftRestrictedTypeLambda, "x").WithArguments("System.ArgIterator"))
End Sub
<Fact()>
Public Sub BC36641ERR_LambdaParamShadowLocal1()
' Roslyn - extra warning
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaParamShadowLocal1">
<file name="a.vb">
Module M1
Class Class1
Function FOO()
Dim x = Function() As Object
Dim z = Function() Sub(FOO) FOO = FOO
End Function ' 1
End Function ' 2
End Class
End Module
</file>
</compilation>).AssertTheseDiagnostics(<expected><![CDATA[
BC36641: Lambda parameter 'FOO' hides a variable in an enclosing block, a previously defined range variable, or an implicitly declared variable in a query expression.
Dim z = Function() Sub(FOO) FOO = FOO
~~~
BC42105: Function '<anonymous method>' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function ' 1
~~~~~~~~~~~~
BC42105: Function 'FOO' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function ' 2
~~~~~~~~~~~~
]]></expected>)
End Sub
<Fact()>
Public Sub BC36641ERR_LambdaParamShadowLocal1_2()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaParamShadowLocal1">
<file name="a.vb">
Option Infer Off
Module Program
Sub Main(args As String())
Dim X = 1
Dim Y = 1
Dim S = If(True, _
Function(x As Integer) As Integer
Return 0
End Function, Y = Y + 1)
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_LambdaParamShadowLocal1, "x").WithArguments("x")
)
End Sub
<Fact()>
Public Sub BC36642ERR_StrictDisallowImplicitObjectLambda()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="StrictDisallowImplicitObjectLambda">
<file name="a.vb">
Option Strict On
Module M
Sub Main()
Dim x = Function(y) 1
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_StrictDisallowImplicitObjectLambda, "y")
)
End Sub
<Fact>
Public Sub BC36645ERR_TypeInferenceFailureAddressOfLateBound()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypeInferenceFailure2">
<file name="a.vb">
Option Strict Off
Imports System
Class Module1
Sub Foo(Of T As Structure, S As Structure)(ByVal x As T, ByVal f As Func(Of T?, S?))
End Sub
Class Class2
Function Bar(ByVal x As Integer) As Integer?
Return Nothing
End Function
End Class
Shared Sub Main()
Dim o As Object = New Class2
Foo(1, AddressOf o.Bar)
Dim qo As IQueryable(Of Integer)
Dim r = qo.Select(AddressOf o.Fee)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36645: Data type(s) of the type parameter(s) in method 'Public Sub Foo(Of T As Structure, S As Structure)(x As T, f As Func(Of T?, S?))' cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
Foo(1, AddressOf o.Bar)
~~~
BC30002: Type 'IQueryable' is not defined.
Dim qo As IQueryable(Of Integer)
~~~~~~~~~~~~~~~~~~~~~~
BC42104: Variable 'qo' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim r = qo.Select(AddressOf o.Fee)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36657ERR_TypeInferenceFailureNoBest2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeInferenceFailureNoBest2">
<file name="a.vb">
Option Strict On
Imports System
Public Module M
Sub Main()
Dim x As Action(Of String())
Dim y As Action(Of Object())
Foo(x, y)
End Sub
Sub Foo(Of T)(ByVal x As Action(Of T()), ByVal y As Action(Of T()))
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36657: Data type(s) of the type parameter(s) in method 'Public Sub Foo(Of T)(x As Action(Of T()), y As Action(Of T()))' cannot be inferred from these arguments because they do not convert to the same type. Specifying the data type(s) explicitly might correct this error.
Foo(x, y)
~~~
BC42104: Variable 'x' is used before it has been assigned a value. A null reference exception could result at runtime.
Foo(x, y)
~
BC42104: Variable 'y' is used before it has been assigned a value. A null reference exception could result at runtime.
Foo(x, y)
~
</expected>)
End Sub
<Fact()>
Public Sub BC36663ERR_DelegateBindingMismatchStrictOff2()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DelegateBindingMismatchStrictOff2">
<file name="a.vb">
Option Strict On
Public Module M
Sub Main()
Dim k = {Function() "", AddressOf System.Console.Read}
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_DelegateBindingMismatchStrictOff2, "System.Console.Read").WithArguments("Public Shared Overloads Function Read() As Integer", "AnonymousType Function <generated method>() As String"))
End Sub
<WorkItem(528732, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528732")>
<Fact()>
Public Sub BC36666ERR_InaccessibleReturnTypeOfMember2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InaccessibleReturnTypeOfMember2">
<file name="a.vb">
Option Infer On
Imports System
Class TestClass
Dim pt As PrivateType
Public name As PrivateType
Property prop As PrivateType
Protected Class PrivateType
End Class
Function foo() As PrivateType
Return pt
End Function
End Class
Module Module1
Sub Main()
Dim tc As TestClass = New TestClass()
Console.WriteLine(tc.name)
Console.WriteLine(tc.foo)
Console.WriteLine(tc.prop)
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_AccessMismatch6, "PrivateType").WithArguments("name", "TestClass.PrivateType", "namespace", "<Default>", "class", "TestClass"),
Diagnostic(ERRID.ERR_AccessMismatch6, "PrivateType").WithArguments("prop", "TestClass.PrivateType", "namespace", "<Default>", "class", "TestClass"),
Diagnostic(ERRID.ERR_AccessMismatch6, "PrivateType").WithArguments("foo", "TestClass.PrivateType", "namespace", "<Default>", "class", "TestClass"),
Diagnostic(ERRID.ERR_InaccessibleReturnTypeOfMember2, "tc.name").WithArguments("Public TestClass.name As TestClass.PrivateType"),
Diagnostic(ERRID.ERR_InaccessibleReturnTypeOfMember2, "tc.foo").WithArguments("Public Function TestClass.foo() As TestClass.PrivateType"),
Diagnostic(ERRID.ERR_InaccessibleReturnTypeOfMember2, "tc.prop").WithArguments("Public Property TestClass.prop As TestClass.PrivateType"))
End Sub
<Fact()>
Public Sub BC36667ERR_LocalNamedSameAsParamInLambda1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LocalNamedSameAsParamInLambda1">
<file name="a.vb">
Module M1
Sub Fun()
Dim x = Sub(y)
Dim y = 5
End Sub
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_LocalNamedSameAsParamInLambda1, "y").WithArguments("y")
)
End Sub
<ConditionalFact(GetType(WindowsOnly), Reason:="https://github.com/dotnet/roslyn/issues/29568")>
Public Sub BC36670ERR_LambdaBindingMismatch2()
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="LambdaBindingMismatch2">
<file name="a.vb">
Imports System
Module M1
Sub Action()
End Sub
Sub [Sub](ByRef x As Action)
x = Sub() Action()
x()
End Sub
Sub Fun()
[Sub]((Sub(x As Integer(,))
Action()
End Sub))
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(Diagnostic(ERRID.ERR_LambdaBindingMismatch2,
<![CDATA[Sub(x As Integer(,))
Action()
End Sub]]>.Value.Replace(vbLf, Environment.NewLine)).WithArguments("System.Action")
)
End Sub
' Different error
<ConditionalFact(GetType(WindowsOnly), Reason:="https://github.com/dotnet/roslyn/issues/29531")>
Public Sub BC36675ERR_StatementLambdaInExpressionTree()
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="StatementLambdaInExpressionTree">
<file name="a.vb">
Imports System
Module M1
Sub Fun()
Dim x = 1
Dim y As System.Linq.Expressions.Expression(Of func(Of Integer)) = Function()
Return x
End Function
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(
Diagnostic(ERRID.ERR_StatementLambdaInExpressionTree, <![CDATA[Function()
Return x
End Function]]>.Value.Replace(vbLf, Environment.NewLine)))
End Sub
<Fact()>
Public Sub BC36709ERR_DelegateBindingMismatchStrictOff3()
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="DelegateBindingMismatchStrictOff3">
<file name="a.vb">
Option Strict On
Module M
Delegate Function del1g(Of g)(ByVal x As g) As String
Sub foo()
Dim o As New cls1
Dim x As New del1g(Of String)(AddressOf o.moo(Of Integer))
End Sub
End Module
Class cls1
Public Function foo(Of G)(ByVal y As G) As String
Return "Instance"
End Function
End Class
Module m1
<System.Runtime.CompilerServices.Extension()> _
Public Function moo(Of G)(ByVal this As cls1, ByVal y As G) As String
Return "Extension"
End Function
End Module
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(
Diagnostic(ERRID.ERR_DelegateBindingMismatchStrictOff3, "o.moo(Of Integer)").WithArguments("Public Function moo(Of Integer)(y As Integer) As String", "Delegate Function M.del1g(Of String)(x As String) As String", "m1"))
End Sub
<Fact()>
Public Sub BC36710ERR_DelegateBindingIncompatible3()
Dim compilation = CreateCompilation(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports System.Runtime.CompilerServices
Imports System.Xml.Linq
Delegate Function D() As Object
Module M
Private F1 As New D(AddressOf <x/>.E1)
Private F2 As New D(AddressOf <x/>.E2)
<Extension()>
Function E1(x As XElement) As Object
Return Nothing
End Function
<Extension()>
Function E2(x As XElement, y As Object) As Object
Return Nothing
End Function
End Module
]]></file>
</compilation>, targetFramework:=TargetFramework.Mscorlib461AndVBRuntime, references:=Net461XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC36710: Extension Method 'Public Function E2(y As Object) As Object' defined in 'M' does not have a signature compatible with delegate 'Delegate Function D() As Object'.
Private F2 As New D(AddressOf <x/>.E2)
~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC36718ERR_NotACollection1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NotACollection1">
<file name="a.vb">
Module M1
Dim a As New Object() From {}
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36718: Cannot initialize the type 'Object' with a collection initializer because it is not a collection type.
Dim a As New Object() From {}
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36719ERR_NoAddMethod1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoAddMethod1">
<file name="a.vb">
Imports System.Collections.Generic
Module M1
Dim x As UDCollection1(Of Integer) = New UDCollection1(Of Integer) From {1, 2, 3}
End Module
Class UDCollection1(Of t)
Implements IEnumerable(Of t)
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of t) Implements System.Collections.Generic.IEnumerable(Of t).GetEnumerator
Return Nothing
End Function
Public Function GetEnumerator1() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
Return Nothing
End Function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36719: Cannot initialize the type 'UDCollection1(Of Integer)' with a collection initializer because it does not have an accessible 'Add' method.
Dim x As UDCollection1(Of Integer) = New UDCollection1(Of Integer) From {1, 2, 3}
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36721ERR_EmptyAggregateInitializer()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoAddMethod1">
<file name="a.vb">
Option Strict On
Imports System.Collections.Generic
Public Module X
Sub Foo(ByVal x As Boolean)
Dim y As New List(Of Integer) From {1, 2, {}}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36721: An aggregate collection initializer entry must contain at least one element.
Dim y As New List(Of Integer) From {1, 2, {}}
~~
</expected>)
End Sub
<Fact()>
Public Sub BC36734ERR_LambdaTooManyTypesObjectDisallowed()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaTooManyTypesObjectDisallowed">
<file name="a.vb">
Option Strict On
Imports System
Module M1
Dim y As Action(Of Integer) = Function(a As Integer)
Return 1
Return ""
End Function
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_LambdaTooManyTypesObjectDisallowed, "Function(a As Integer)")
)
End Sub
<Fact()>
Public Sub BC36751ERR_LambdaNoType()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaNoType">
<file name="a.vb">
Module M1
Dim x = Function()
Return AddressOf System.Console.WriteLine
End Function
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_LambdaNoType, "Function()"))
End Sub
' Different error
<Fact()>
Public Sub BC36754ERR_VarianceConversionFailedOut6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VarianceConversionFailedOut6">
<file name="a.vb">
Option Strict On
Interface IVariance(Of Out T) : Function Foo() As T : End Interface
Interface IVariance2(Of In T) : Sub Foo(ByVal s As T) : End Interface
Class Variance(Of T) : Implements IVariance(Of T), IVariance2(Of T)
Public Function Foo() As T Implements IVariance(Of T).Foo
End Function
Public Sub Foo1(ByVal s As T) Implements IVariance2(Of T).Foo
End Sub
End Class
Module M1
Dim x As IVariance(Of Double) = New Variance(Of Short)
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36754: 'Variance(Of Short)' cannot be converted to 'IVariance(Of Double)' because 'Short' is not derived from 'Double', as required for the 'Out' generic parameter 'T' in 'Interface IVariance(Of Out T)'.
Dim x As IVariance(Of Double) = New Variance(Of Short)
~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
' Different error
<Fact()>
Public Sub BC36755ERR_VarianceConversionFailedIn6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VarianceConversionFailedIn6">
<file name="a.vb">
Option Strict On
Interface IVariance(Of Out T) : Function Foo() As T : End Interface
Interface IVariance2(Of In T) : Sub Foo(ByVal s As T) : End Interface
Class Variance(Of T) : Implements IVariance(Of T), IVariance2(Of T)
Public Function Foo() As T Implements IVariance(Of T).Foo
End Function
Public Sub Foo1(ByVal s As T) Implements IVariance2(Of T).Foo
End Sub
End Class
Module M1
Dim x As IVariance2(Of Short) = New Variance(Of Double)
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36755: 'Variance(Of Double)' cannot be converted to 'IVariance2(Of Short)' because 'Short' is not derived from 'Double', as required for the 'In' generic parameter 'T' in 'Interface IVariance2(Of In T)'.
Dim x As IVariance2(Of Short) = New Variance(Of Double)
~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
' Different error
<Fact()>
Public Sub BC36756ERR_VarianceIEnumerableSuggestion3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VarianceIEnumerableSuggestion3">
<file name="a.vb">
Imports System.Collections.Generic
Public Class Animals : End Class
Public Class Cheetah : Inherits Animals : End Class
Module M1
Dim x As List(Of Animals) = New List(Of Cheetah)
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36756: 'List(Of Cheetah)' cannot be converted to 'List(Of Animals)'. Consider using 'IEnumerable(Of Animals)' instead.
Dim x As List(Of Animals) = New List(Of Cheetah)
~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36757ERR_VarianceConversionFailedTryOut4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VarianceConversionFailedTryOut4">
<file name="a.vb">
Option Strict On
Public Class Animals : End Class
Public Class Cheetah : Inherits Animals : End Class
Interface IFoo(Of T) : End Interface
Class MyFoo(Of T)
Implements IFoo(Of T)
End Class
Module M1
Dim x As IFoo(Of Animals) = New MyFoo(Of Cheetah)
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36757: 'MyFoo(Of Cheetah)' cannot be converted to 'IFoo(Of Animals)'. Consider changing the 'T' in the definition of 'Interface IFoo(Of T)' to an Out type parameter, 'Out T'.
Dim x As IFoo(Of Animals) = New MyFoo(Of Cheetah)
~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
' Different error
<Fact()>
Public Sub BC36758ERR_VarianceConversionFailedTryIn4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="VarianceConversionFailedTryIn4">
<file name="a.vb">
Option Strict On
Public Class Animals : End Class
Public Class Vertebrates : Inherits Animals : End Class
Public Class Mammals : Inherits Vertebrates : End Class
Public Class Carnivora : Inherits Mammals : End Class
Class Variance(Of T)
Interface IVariance(Of In S, Out R)
End Interface
End Class
Class Variance2(Of T, R As New)
Implements Variance(Of T).IVariance(Of T, R)
End Class
Module M1
Dim x As Variance(Of Mammals).IVariance(Of Mammals, Mammals) = New Variance2(Of Animals, Carnivora)
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36758: 'Variance2(Of Animals, Carnivora)' cannot be converted to 'Variance(Of Mammals).IVariance(Of Mammals, Mammals)'. Consider changing the 'T' in the definition of 'Class Variance(Of T)' to an In type parameter, 'In T'.
Dim x As Variance(Of Mammals).IVariance(Of Mammals, Mammals) = New Variance2(Of Animals, Carnivora)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36760ERR_IdentityDirectCastForFloat()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaParamShadowLocal1">
<file name="a.vb">
Module Test
Sub Main()
Dim a As Double = 1
Dim b As Integer = DirectCast(a, Double) * 1000
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36760: Using DirectCast operator to cast a floating-point value to the same type is not supported.
Dim b As Integer = DirectCast(a, Double) * 1000
~
</expected>)
End Sub
<Fact()>
Public Sub BC36807ERR_TypeDisallowsElements()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports System.Collections.Generic
Imports System.Xml.Linq
Class MyElement
Inherits XElement
Public Sub New(name As XName)
MyBase.New(name)
End Sub
End Class
Module M
Function F(Of T)() As T
Return Nothing
End Function
Sub M()
Dim x As Object
x = F(Of Object).<x>
x = F(Of XObject).<x>
x = F(Of XContainer).<x>
x = F(Of XElement).<x>
x = F(Of XDocument).<x>
x = F(Of XAttribute).<x>
x = F(Of MyElement).<x>
x = F(Of Object()).<x>
x = F(Of XObject()).<x>
x = F(Of XContainer()).<x>
x = F(Of XElement()).<x>
x = F(Of XDocument()).<x>
x = F(Of XAttribute()).<x>
x = F(Of MyElement()).<x>
x = F(Of IEnumerable(Of Object)).<x>
x = F(Of IEnumerable(Of XObject)).<x>
x = F(Of IEnumerable(Of XContainer)).<x>
x = F(Of IEnumerable(Of XElement)).<x>
x = F(Of IEnumerable(Of XDocument)).<x>
x = F(Of IEnumerable(Of XAttribute)).<x>
x = F(Of IEnumerable(Of MyElement)).<x>
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31168: XML axis properties do not support late binding.
x = F(Of Object).<x>
~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'XObject'.
x = F(Of XObject).<x>
~~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'XAttribute'.
x = F(Of XAttribute).<x>
~~~~~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'Object()'.
x = F(Of Object()).<x>
~~~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'XObject()'.
x = F(Of XObject()).<x>
~~~~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'XAttribute()'.
x = F(Of XAttribute()).<x>
~~~~~~~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'IEnumerable(Of Object)'.
x = F(Of IEnumerable(Of Object)).<x>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'IEnumerable(Of XObject)'.
x = F(Of IEnumerable(Of XObject)).<x>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36807: XML elements cannot be selected from type 'IEnumerable(Of XAttribute)'.
x = F(Of IEnumerable(Of XAttribute)).<x>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC36808ERR_TypeDisallowsAttributes()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports System.Collections.Generic
Imports System.Xml.Linq
Class MyElement
Inherits XElement
Public Sub New(name As XName)
MyBase.New(name)
End Sub
End Class
Module M
Function F(Of T)() As T
Return Nothing
End Function
Sub M()
Dim x As Object
x = F(Of Object).@a
x = F(Of XObject).@a
x = F(Of XContainer).@a
x = F(Of XElement).@a
x = F(Of XDocument).@a
x = F(Of XAttribute).@a
x = F(Of MyElement).@a
x = F(Of Object()).@a
x = F(Of XObject()).@a
x = F(Of XContainer()).@a
x = F(Of XElement()).@a
x = F(Of XDocument()).@a
x = F(Of XAttribute()).@a
x = F(Of MyElement()).@a
x = F(Of IEnumerable(Of Object)).@a
x = F(Of IEnumerable(Of XObject)).@a
x = F(Of IEnumerable(Of XContainer)).@a
x = F(Of IEnumerable(Of XElement)).@a
x = F(Of IEnumerable(Of XDocument)).@a
x = F(Of IEnumerable(Of XAttribute)).@a
x = F(Of IEnumerable(Of MyElement)).@a
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31168: XML axis properties do not support late binding.
x = F(Of Object).@a
~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XObject'.
x = F(Of XObject).@a
~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XContainer'.
x = F(Of XContainer).@a
~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XDocument'.
x = F(Of XDocument).@a
~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XAttribute'.
x = F(Of XAttribute).@a
~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'Object()'.
x = F(Of Object()).@a
~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XObject()'.
x = F(Of XObject()).@a
~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XContainer()'.
x = F(Of XContainer()).@a
~~~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XDocument()'.
x = F(Of XDocument()).@a
~~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'XAttribute()'.
x = F(Of XAttribute()).@a
~~~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'IEnumerable(Of Object)'.
x = F(Of IEnumerable(Of Object)).@a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'IEnumerable(Of XObject)'.
x = F(Of IEnumerable(Of XObject)).@a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'IEnumerable(Of XContainer)'.
x = F(Of IEnumerable(Of XContainer)).@a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'IEnumerable(Of XDocument)'.
x = F(Of IEnumerable(Of XDocument)).@a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36808: XML attributes cannot be selected from type 'IEnumerable(Of XAttribute)'.
x = F(Of IEnumerable(Of XAttribute)).@a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
' Note: The last error above ("BC30518: Overload resolution failed ...")
' should not be generated after variance conversions are supported.
End Sub
<Fact()>
Public Sub BC36809ERR_TypeDisallowsDescendants()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports System.Collections.Generic
Imports System.Xml.Linq
Class MyElement
Inherits XElement
Public Sub New(name As XName)
MyBase.New(name)
End Sub
End Class
Module M
Function F(Of T)() As T
Return Nothing
End Function
Sub M()
Dim x As Object
x = F(Of Object)...<x>
x = F(Of XObject)...<x>
x = F(Of XContainer)...<x>
x = F(Of XElement)...<x>
x = F(Of XDocument)...<x>
x = F(Of XAttribute)...<x>
x = F(Of MyElement)...<x>
x = F(Of Object())...<x>
x = F(Of XObject())...<x>
x = F(Of XContainer())...<x>
x = F(Of XElement())...<x>
x = F(Of XDocument())...<x>
x = F(Of XAttribute())...<x>
x = F(Of MyElement())...<x>
x = F(Of IEnumerable(Of Object))...<x>
x = F(Of IEnumerable(Of XObject))...<x>
x = F(Of IEnumerable(Of XContainer))...<x>
x = F(Of IEnumerable(Of XElement))...<x>
x = F(Of IEnumerable(Of XDocument))...<x>
x = F(Of IEnumerable(Of XAttribute))...<x>
x = F(Of IEnumerable(Of MyElement))...<x>
End Sub
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31168: XML axis properties do not support late binding.
x = F(Of Object)...<x>
~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'XObject'.
x = F(Of XObject)...<x>
~~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'XAttribute'.
x = F(Of XAttribute)...<x>
~~~~~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'Object()'.
x = F(Of Object())...<x>
~~~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'XObject()'.
x = F(Of XObject())...<x>
~~~~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'XAttribute()'.
x = F(Of XAttribute())...<x>
~~~~~~~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'IEnumerable(Of Object)'.
x = F(Of IEnumerable(Of Object))...<x>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'IEnumerable(Of XObject)'.
x = F(Of IEnumerable(Of XObject))...<x>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36809: XML descendant elements cannot be selected from type 'IEnumerable(Of XAttribute)'.
x = F(Of IEnumerable(Of XAttribute))...<x>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC36907ERR_TypeOrMemberNotGeneric2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="TypeOrMemberNotGeneric2">
<file name="a.vb">
Option Strict On
Imports System
Module M1
Sub FOO()
Dim x1 As Integer
x1.FooGeneric01(Of Integer)()
End Sub
End Module
Module Extension01
<System.Runtime.CompilerServices.Extension()> Sub FooGeneric01(Of T1)(ByVal o As T1)
End Sub
End Module
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36907: Extension method 'Public Sub FooGeneric01()' defined in 'Extension01' is not generic (or has no free type parameters) and so cannot have type arguments.
x1.FooGeneric01(Of Integer)()
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36913ERR_IfTooManyTypesObjectDisallowed()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Public Module X
Sub Foo(ByVal x As Boolean)
Dim f = If(x, Function() 1, Function() "")
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36913: Cannot infer a common type because more than one type is possible.
Dim f = If(x, Function() 1, Function() "")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC36916ERR_LambdaNoTypeObjectDisallowed()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaNoTypeObjectDisallowed">
<file name="a.vb">
Option Strict On
Imports System
Module M1
Dim x As Action = Function()
Dim a = 2
End Function
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_LambdaNoTypeObjectDisallowed, "Function()"),
Diagnostic(ERRID.WRN_DefAsgNoRetValFuncRef1, "End Function").WithArguments("<anonymous method>")
)
End Sub
#End Region
#Region "Targeted Warning Tests"
<Fact()>
Public Sub BC40052WRN_SelectCaseInvalidRange()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SelectCaseInvalidRange">
<file name="a.vb">
Module M1
Sub foo()
Select Case #1/2/0003#
Case Date.MaxValue To Date.MinValue
End Select
Select Case 1
Case 1 To 0
End Select
End Sub
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC40052: Range specified for 'Case' statement is not valid. Make sure that the lower bound is less than or equal to the upper bound.
Case 1 To 0
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC40052WRN_SelectCaseInvalidRange_02()
' Dev10 doesn't report WRN_SelectCaseInvalidRange for each invalid case range.
' It is performed only if bounds for all clauses in the Select are integer constants and
' all clauses are either range clauses or equality clause.
' Doing this differently will produce warnings in more scenarios - breaking change,
' hence we maintain compatibility with Dev10.
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SelectCaseInvalidRange">
<file name="a.vb">
Module M1
Sub foo()
' NO WARNING CASES
' with relational clause
Select Case 1
Case 1 To 0
Case Is > 10
End Select
' with relational clause in different order
Select Case 1
Case Is > 10
Case 1 To 0
End Select
' with non constant integer clause
Dim number As Integer = 10
Select Case 1
Case 1 To 0
Case number
End Select
' with non integer clause
Dim obj As Object = 10
Select Case 1
Case 1 To 0
Case obj
End Select
' WARNING CASES
' with all integer constant equality clauses
Select Case 1
Case 1 To 0
Case Is = 2
Case 1, 2, 3
End Select
' with all integer constant equality clauses in different order
Select Case 1
Case Is = 2
Case 1, 2, 3
Case 1 To 0
End Select
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC40052: Range specified for 'Case' statement is not valid. Make sure that the lower bound is less than or equal to the upper bound.
Case 1 To 0
~~~~~~
BC40052: Range specified for 'Case' statement is not valid. Make sure that the lower bound is less than or equal to the upper bound.
Case 1 To 0
~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
<WorkItem(759127, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/759127")>
Public Sub BC41000WRN_AttributeSpecifiedMultipleTimes()
' No warnings Expected - Previously would generate a BC41000. The signature of Attribute
' determined From attribute used in original bug.
' We want to verify that the diagnostics do not appear and that the attributes are both added.
' No values provided for attribute
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Class1">
<file name="a.vb">
Imports System
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments")>
<AttributeUsage(AttributeTargets.Assembly Or AttributeTargets.Class, AllowMultiple:=True)>
Public Class ESAttribute
Inherits System.Attribute
Public Sub New(assemblyGUID As String)
If (assemblyGUID Is Nothing) Then
Throw New System.ArgumentNullException("assemblyGuid")
End If
End Sub
Public Sub New()
End Sub
End Class
</file>
<file name="b.vb">
<Assembly:ESAttribute()>
Class Class1
Sub Blah()
End Sub
End Class
</file>
<file name="c.vb">
<Assembly:ESAttribute()>
Module Module1
Sub Main()
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
' One value provided for attribute, the other does not have argument
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Class1">
<file name="a.vb">
Imports System
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments")>
<AttributeUsage(AttributeTargets.Assembly Or AttributeTargets.Class, AllowMultiple:=True)>
Public Class ESAttribute
Inherits System.Attribute
Public Sub New(assemblyGUID As String)
If (assemblyGUID Is Nothing) Then
Throw New System.ArgumentNullException("assemblyGuid")
End If
End Sub
Public Sub New()
End Sub
End Class
</file>
<file name="b.vb">
<Assembly:ESAttribute()>
Class Class1
Sub Blah()
End Sub
End Class
</file>
<file name="c.vb">
<Assembly:ESAttribute("Test")>
Module Module1
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
' Different values for argument provided for attribute usage
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Class1">
<file name="a.vb">
Imports System
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments")>
<AttributeUsage(AttributeTargets.Assembly Or AttributeTargets.Class, AllowMultiple:=True)>
Public Class ESAttribute
Inherits System.Attribute
Public Sub New(assemblyGUID As String)
If (assemblyGUID Is Nothing) Then
Throw New System.ArgumentNullException("assemblyGuid")
End If
End Sub
Public Sub New()
End Sub
End Class
</file>
<file name="b.vb">
<Assembly:ESAttribute("test2")>
Class Class1
Sub Blah()
End Sub
End Class
</file>
<file name="c.vb">
<Assembly:ESAttribute("Test")>
Module Module1
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
Assert.Equal(2, compilation.Assembly.GetAttributes.Count)
Assert.Equal("ESAttribute(""test2"")", compilation.Assembly.GetAttributes.Item(0).ToString)
Assert.Equal("ESAttribute(""Test"")", compilation.Assembly.GetAttributes.Item(1).ToString)
' Different values for argument provided for attribute usage - Different Order To check the order is
' not sorted but merely the order it was located in compilation
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Class1">
<file name="a.vb">
Imports System
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments")>
<AttributeUsage(AttributeTargets.Assembly Or AttributeTargets.Class, AllowMultiple:=True)>
Public Class ESAttribute
Inherits System.Attribute
Public Sub New(assemblyGUID As String)
If (assemblyGUID Is Nothing) Then
Throw New System.ArgumentNullException("assemblyGuid")
End If
End Sub
Public Sub New()
End Sub
End Class
</file>
<file name="b.vb">
<Assembly:ESAttribute("Test")>
Class Class1
Sub Blah()
End Sub
End Class
</file>
<file name="c.vb">
<Assembly:ESAttribute("Test2")>
Module Module1
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
Assert.Equal(2, compilation.Assembly.GetAttributes.Count)
Assert.Equal("ESAttribute(""Test"")", compilation.Assembly.GetAttributes.Item(0).ToString)
Assert.Equal("ESAttribute(""Test2"")", compilation.Assembly.GetAttributes.Item(1).ToString)
End Sub
<Fact>
Public Sub BC41001WRN_NoNonObsoleteConstructorOnBase3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoNonObsoleteConstructorOnBase4">
<file name="a.vb">
Imports System
Class C1
<Obsolete>
Sub New()
End Sub
End Class
Class C2
Inherits C1
End Class
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC41001: Class 'C2' should declare a 'Sub New' because the 'Public Sub New()' in its base class 'C1' is marked obsolete.
Class C2
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC41002WRN_NoNonObsoleteConstructorOnBase4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoNonObsoleteConstructorOnBase4">
<file name="a.vb">
Imports System
Class C1
<Obsolete("hello", False)>
Sub New()
End Sub
End Class
Class C2
Inherits C1
End Class
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC41002: Class 'C2' should declare a 'Sub New' because the 'Public Sub New()' in its base class 'C1' is marked obsolete: 'hello'.
Class C2
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC41003WRN_RequiredNonObsoleteNewCall3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RequiredNonObsoleteNewCall4">
<file name="a.vb">
Imports System
Class C1
<Obsolete>
Sub New()
End Sub
End Class
Class C2
Inherits C1
Sub New()
End Sub
End Class
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC41003: First statement of this 'Sub New' should be an explicit call to 'MyBase.New' or 'MyClass.New' because the 'Public Sub New()' in the base class 'C1' of 'C2' is marked obsolete.
Sub New()
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC41004WRN_RequiredNonObsoleteNewCall4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RequiredNonObsoleteNewCall4">
<file name="a.vb">
Imports System
Class C1
<Obsolete("hello", False)>
Sub New()
End Sub
End Class
Class C2
Inherits C1
Sub New()
End Sub
End Class
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC41004: First statement of this 'Sub New' should be an explicit call to 'MyBase.New' or 'MyClass.New' because the 'Public Sub New()' in the base class 'C1' of 'C2' is marked obsolete: 'hello'
Sub New()
~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC41007WRN_ConditionalNotValidOnFunction()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConditionalNotValidOnFunction">
<file name="a.vb">
Imports System.Diagnostics
Public Structure S1
<Conditional("hello")>
Public Shared Operator +(ByVal v As S1, ByVal w As S1) As Object
Return Nothing
End Operator
End Structure
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC41007: Attribute 'Conditional' is only valid on 'Sub' declarations.
Public Shared Operator +(ByVal v As S1, ByVal w As S1) As Object
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
<CompilerTrait(CompilerFeature.IOperation)>
<WorkItem(23282, "https://github.com/dotnet/roslyn/issues/23282")>
Public Sub BC41998WRN_RecursiveAddHandlerCall()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RecursiveAddHandlerCall">
<file name="a.vb">
Module M1
Public Delegate Sub test_x()
Sub test_d1()
End Sub
Public Custom Event t As test_x
AddHandler(ByVal value As test_x)
AddHandler t, AddressOf test_d1
End AddHandler
RemoveHandler(ByVal value As test_x)
RemoveHandler t, AddressOf test_d1
End RemoveHandler
RaiseEvent()
RaiseEvent t()
End RaiseEvent
End Event
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC41998: Statement recursively calls the containing 'AddHandler' for event 't'.
AddHandler t, AddressOf test_d1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC41998: Statement recursively calls the containing 'RemoveHandler' for event 't'.
RemoveHandler t, AddressOf test_d1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC41998: Statement recursively calls the containing 'RaiseEvent' for event 't'.
RaiseEvent t()
~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
Dim tree = compilation.SyntaxTrees.Single()
Dim model = compilation.GetSemanticModel(tree)
Dim add = tree.GetRoot().DescendantNodes().OfType(Of AddRemoveHandlerStatementSyntax)().First()
Assert.Equal("AddHandler t, AddressOf test_d1", add.ToString())
compilation.VerifyOperationTree(add, expectedOperationTree:=
<![CDATA[
IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'AddHandler ... sOf test_d1')
Expression:
IEventAssignmentOperation (EventAdd) (OperationKind.EventAssignment, Type: null, IsImplicit) (Syntax: 'AddHandler ... sOf test_d1')
Event Reference:
IEventReferenceOperation: Event M1.t As M1.test_x (Static) (OperationKind.EventReference, Type: M1.test_x) (Syntax: 't')
Instance Receiver:
null
Handler:
IDelegateCreationOperation (OperationKind.DelegateCreation, Type: M1.test_x, IsImplicit) (Syntax: 'AddressOf test_d1')
Target:
IMethodReferenceOperation: Sub M1.test_d1() (Static) (OperationKind.MethodReference, Type: null) (Syntax: 'AddressOf test_d1')
Instance Receiver:
null
]]>.Value)
Assert.Equal("Event M1.t As M1.test_x", model.GetSymbolInfo(add.EventExpression).Symbol.ToTestDisplayString())
Dim remove = tree.GetRoot().DescendantNodes().OfType(Of AddRemoveHandlerStatementSyntax)().Last()
Assert.Equal("RemoveHandler t, AddressOf test_d1", remove.ToString())
compilation.VerifyOperationTree(remove, expectedOperationTree:=
<![CDATA[
IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'RemoveHandl ... sOf test_d1')
Expression:
IEventAssignmentOperation (EventRemove) (OperationKind.EventAssignment, Type: null, IsImplicit) (Syntax: 'RemoveHandl ... sOf test_d1')
Event Reference:
IEventReferenceOperation: Event M1.t As M1.test_x (Static) (OperationKind.EventReference, Type: M1.test_x) (Syntax: 't')
Instance Receiver:
null
Handler:
IDelegateCreationOperation (OperationKind.DelegateCreation, Type: M1.test_x, IsImplicit) (Syntax: 'AddressOf test_d1')
Target:
IMethodReferenceOperation: Sub M1.test_d1() (Static) (OperationKind.MethodReference, Type: null) (Syntax: 'AddressOf test_d1')
Instance Receiver:
null
]]>.Value)
Assert.Equal("Event M1.t As M1.test_x", model.GetSymbolInfo(remove.EventExpression).Symbol.ToTestDisplayString())
Dim raise = tree.GetRoot().DescendantNodes().OfType(Of RaiseEventStatementSyntax)().Single()
Assert.Equal("RaiseEvent t()", raise.ToString())
compilation.VerifyOperationTree(raise, expectedOperationTree:=
<![CDATA[
IRaiseEventOperation (OperationKind.RaiseEvent, Type: null) (Syntax: 'RaiseEvent t()')
Event Reference:
IEventReferenceOperation: Event M1.t As M1.test_x (Static) (OperationKind.EventReference, Type: M1.test_x) (Syntax: 't')
Instance Receiver:
null
Arguments(0)
]]>.Value)
Assert.Equal("Event M1.t As M1.test_x", model.GetSymbolInfo(raise.Name).Symbol.ToTestDisplayString())
End Sub
<Fact()>
Public Sub BC41999WRN_ImplicitConversionCopyBack()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplicitConversionCopyBack">
<file name="a.vb">
Namespace ns1
Module M1
Sub foo(ByRef x As Object)
End Sub
Sub FOO1()
Dim o As New System.Exception
foo(o)
End Sub
End Module
End Namespace
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC41999: Implicit conversion from 'Object' to 'Exception' in copying the value of 'ByRef' parameter 'x' back to the matching argument.
foo(o)
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42016WRN_ImplicitConversionSubst1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplicitConversionSubst1">
<file name="a.vb">
Module Module1
Sub Main()
Dim a As Integer = 2
Dim b As Integer = 2
Dim c As Integer = a / b
a = c
End Sub
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC42016: Implicit conversion from 'Double' to 'Integer'.
Dim c As Integer = a / b
~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42018WRN_ObjectMath1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ObjectMath1">
<file name="a.vb">
Module Module1
Sub Main()
Dim o As New Object
o = o = 1
End Sub
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC42018: Operands of type Object used for operator '='; use the 'Is' operator to test object identity.
o = o = 1
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42019WRN_ObjectMath2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ObjectMath2">
<file name="a.vb">
Module Module1
Sub Main()
Dim o As New Object
o = o + 1
End Sub
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC42019: Operands of type Object used for operator '+'; runtime errors could occur.
o = o + 1
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42019WRN_ObjectMath2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ObjectMath2">
<file name="a.vb">
Module Module1
function Main()
Dim o As New Object
return o * o
End function
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC42021: Function without an 'As' clause; return type of Object assumed.
function Main()
~~~~
BC42019: Operands of type Object used for operator '*'; runtime errors could occur.
return o * o
~
BC42019: Operands of type Object used for operator '*'; runtime errors could occur.
return o * o
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42024WRN_UnusedLocal()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UnusedLocal">
<file name="a.vb">
Public Module Module1
Public Sub Main()
Dim c1 As Class1
End Sub
Class Class1
End Class
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42024: Unused local variable: 'c1'.
Dim c1 As Class1
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42025WRN_SharedMemberThroughInstance_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module Module1
Structure S1
Structure S1
Public Shared strTemp As String
End Structure
End Structure
Sub Main()
Dim obj As New S1.S1
obj.strTemp = "S"
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
obj.strTemp = "S"
~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42025WRN_SharedMemberThroughInstance_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared Property P
Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Sub M()
Dim o = Me.P
Me.P = o
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
Dim o = Me.P
~~~~
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
Me.P = o
~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528718, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528718")>
<Fact()>
Public Sub BC42025WRN_SharedMemberThroughInstance_3()
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb">
Option Infer On
Imports System.Runtime.CompilerServices
Module M
Sub Main()
For Each y In 1
Next
End Sub
<Extension()>
Function GetEnumerator(x As Integer) As E
Return New E
End Function
End Module
Class E
Function MoveNext() As Boolean
Return True
End Function
Shared Property Current As Boolean
Get
Return True
End Get
Set(ByVal value As Boolean)
End Set
End Property
End Class
</file>
</compilation>, {Net40.References.SystemCore}).VerifyDiagnostics(
Diagnostic(ERRID.WRN_SharedMemberThroughInstance, "1"))
End Sub
<Fact()>
Public Sub BC42025WRN_SharedMemberThroughInstance_4()
Dim comp = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Enum E
A
B = B.A + 1
End Enum
</file>
</compilation>)
comp.AssertTheseDiagnostics(<errors>
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
B = B.A + 1
~~~
</errors>)
End Sub
<Fact(), WorkItem(528734, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528734")>
Public Sub BC42026WRN_RecursivePropertyCall()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RecursivePropertyCall">
<file name="a.vb">
Module Module1
Class c1
ReadOnly Property Name() As String
Get
Return Me.Name
End Get
End Property
End Class
End Module
Module Program
Sub PassByRef(ByRef x As Integer)
End Sub
Sub PassByVal(x As Integer)
End Sub
Property P1 As Integer
Get
If Date.Now.Day = 2 Then
Return P1() + 1 ' 1
ElseIf Date.Now.Day = 3 Then
P1() += 1 ' 2
Mid(P1(), 1) = 2 ' 3
PassByRef(P1()) '4
PassByVal(P1()) '5
Else
P1() = 2
End If
Return 0
End Get
Set(value As Integer)
If Date.Now.Day = 2 Then
P1() = value '6
ElseIf Date.Now.Day = 3 Then
P1() += 1 '7
Mid(P1(), 1) = 2 '8
PassByRef(P1()) '9
PassByVal(P1())
Else
Dim x = P1()
End If
End Set
End Property
Property P2(a As Integer) As Integer
Get
If Date.Now.Day = 2 Then
Return P2(a) + 1
ElseIf Date.Now.Day = 3 Then
P2(a) += 2
Mid(P2(a), 1) = 2
PassByRef(P2(a))
PassByVal(P2(a))
Else
P2(a) = 2
End If
Return 0
End Get
Set(value As Integer)
If Date.Now.Day = 2 Then
P2(a) = value
ElseIf Date.Now.Day = 3 Then
P2(a) += 2
Mid(P2(a), 1) = 2
PassByRef(P2(a))
PassByVal(P2(a))
Else
Dim x = P2(a)
End If
End Set
End Property
End Module
Class Class1
Property P3 As Integer
Get
If Date.Now.Day = 2 Then
Return P3() + 1 '10
ElseIf Date.Now.Day = 3 Then
P3() += 2 ' 11
Mid(P3(), 1) = 2 ' 12
PassByRef(P3()) ' 13
PassByVal(P3()) ' 14
Else
P3() = 2
End If
Return 0
End Get
Set(value As Integer)
If Date.Now.Day = 2 Then
P3() = value ' 15
ElseIf Date.Now.Day = 3 Then
P3() += 2 ' 16
Mid(P3(), 1) = 2 ' 17
PassByRef(P3()) ' 18
PassByVal(P3())
Else
Dim x = P3()
End If
End Set
End Property
Property P4 As Integer
Get
If Date.Now.Day = 2 Then
Return P4 + 1
ElseIf Date.Now.Day = 3 Then
P4 += 2
Mid(P4, 1) = 2
PassByRef(P4)
PassByVal(P4)
Else
P4 = 2
End If
Return 0
End Get
Set(value As Integer)
If Date.Now.Day = 2 Then
P4 = value ' 19
ElseIf Date.Now.Day = 3 Then
P4 += 2 ' 20
Mid(P4, 1) = 2 ' 21
PassByRef(P4) ' 22
PassByVal(P4)
Else
Dim x = P4
End If
End Set
End Property
Property P5 As Integer
Get
If Date.Now.Day = 2 Then
Return Me.P5 + 1 ' 23
ElseIf Date.Now.Day = 3 Then
Me.P5 += 2 ' 24
Mid(Me.P5, 1) = 2 ' 25
PassByRef(Me.P5) ' 26
PassByVal(Me.P5) ' 27
Else
Me.P5 = 2
End If
Return 0
End Get
Set(value As Integer)
If Date.Now.Day = 2 Then
Me.P5 = value ' 28
ElseIf Date.Now.Day = 3 Then
Me.P5 += 2 ' 29
Mid(Me.P5, 1) = 2 ' 30
PassByRef(Me.P5) ' 31
PassByVal(Me.P5)
Else
Dim x = Me.P5
End If
End Set
End Property
Property P6(a As Integer) As Integer
Get
If Date.Now.Day = 2 Then
Return P6(a) + 1
ElseIf Date.Now.Day = 3 Then
P6(a) += 2
Mid(P6(a), 1) = 2
PassByRef(P6(a))
PassByVal(P6(a))
Else
P6(a) = 2
End If
Return 0
End Get
Set(value As Integer)
If Date.Now.Day = 2 Then
P6(a) = value
ElseIf Date.Now.Day = 3 Then
P6(a) += 2
Mid(P6(a), 1) = 2
PassByRef(P6(a))
PassByVal(P6(a))
Else
Dim x = P6(a)
End If
End Set
End Property
Property P7 As Integer
Get
Dim x = Me
If Date.Now.Day = 2 Then
Return x.P7() + 1
ElseIf Date.Now.Day = 3 Then
x.P7() += 2
Mid(x.P7(), 1) = 2
PassByRef(x.P7())
PassByVal(x.P7())
Else
x.P7() = 2
End If
Return 0
End Get
Set(value As Integer)
Dim x = Me
If Date.Now.Day = 2 Then
x.P7() = value
ElseIf Date.Now.Day = 3 Then
x.P7() += 2
Mid(x.P7(), 1) = 2
PassByRef(x.P7())
PassByVal(x.P7())
Else
Dim y = x.P7()
End If
End Set
End Property
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42026: Expression recursively calls the containing property 'Public ReadOnly Property Name As String'.
Return Me.Name
~~~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
Return P1() + 1 ' 1
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
P1() += 1 ' 2
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
Mid(P1(), 1) = 2 ' 3
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
PassByRef(P1()) '4
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
PassByVal(P1()) '5
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
P1() = value '6
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
P1() += 1 '7
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
Mid(P1(), 1) = 2 '8
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P1 As Integer'.
PassByRef(P1()) '9
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
Return P3() + 1 '10
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
P3() += 2 ' 11
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
Mid(P3(), 1) = 2 ' 12
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
PassByRef(P3()) ' 13
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
PassByVal(P3()) ' 14
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
P3() = value ' 15
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
P3() += 2 ' 16
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
Mid(P3(), 1) = 2 ' 17
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P3 As Integer'.
PassByRef(P3()) ' 18
~~~~
BC42026: Expression recursively calls the containing property 'Public Property P4 As Integer'.
P4 = value ' 19
~~
BC42026: Expression recursively calls the containing property 'Public Property P4 As Integer'.
P4 += 2 ' 20
~~
BC42026: Expression recursively calls the containing property 'Public Property P4 As Integer'.
Mid(P4, 1) = 2 ' 21
~~
BC42026: Expression recursively calls the containing property 'Public Property P4 As Integer'.
PassByRef(P4) ' 22
~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
Return Me.P5 + 1 ' 23
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
Me.P5 += 2 ' 24
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
Mid(Me.P5, 1) = 2 ' 25
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
PassByRef(Me.P5) ' 26
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
PassByVal(Me.P5) ' 27
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
Me.P5 = value ' 28
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
Me.P5 += 2 ' 29
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
Mid(Me.P5, 1) = 2 ' 30
~~~~~
BC42026: Expression recursively calls the containing property 'Public Property P5 As Integer'.
PassByRef(Me.P5) ' 31
~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42029WRN_OverlappingCatch()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module Module1
Sub foo1()
Try
Catch ex As Exception
Catch ex As SystemException
Console.WriteLine(ex)
End Try
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42029: 'Catch' block never reached, because 'SystemException' inherits from 'Exception'.
Catch ex As SystemException
~~~~~~~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42030WRN_DefAsgUseNullRefByRef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared Sub M()
Dim o As Object
M(o)
End Sub
Shared Sub M(ByRef o As Object)
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42030: Variable 'o' is passed by reference before it has been assigned a value. A null reference exception could result at runtime.
M(o)
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42030WRN_DefAsgUseNullRefByRef2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DefAsgUseNullRefByRef">
<file name="a.vb">
Module M1
Sub foo(ByRef x As Object)
End Sub
Structure S1
Dim o As Object
Dim e As Object
End Structure
Sub Main()
Dim x1 As S1
x1.o = Nothing
foo(x1.e)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42030: Variable 'e' is passed by reference before it has been assigned a value. A null reference exception could result at runtime.
foo(x1.e)
~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42031WRN_DuplicateCatch()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateCatch">
<file name="a.vb">
Imports System
Module Module1
Sub foo()
Try
Catch ex As Exception
Catch ex As Exception
End Try
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.WRN_DuplicateCatch, "Catch ex As Exception").WithArguments("System.Exception"))
End Sub
<Fact()>
Public Sub BC42032WRN_ObjectMath1Not()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ObjectMath1Not">
<file name="a.vb">
Module Module1
Sub Main()
Dim Result
Dim X
If Result <> 13 Or X <> Nothing Then
End If
End Sub
End Module
</file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
Dim Result
~~~~~~
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
Dim X
~
BC42032: Operands of type Object used for operator '<>'; use the 'IsNot' operator to test object identity.
If Result <> 13 Or X <> Nothing Then
~~~~~~
BC42104: Variable 'Result' is used before it has been assigned a value. A null reference exception could result at runtime.
If Result <> 13 Or X <> Nothing Then
~~~~~~
BC42019: Operands of type Object used for operator 'Or'; runtime errors could occur.
If Result <> 13 Or X <> Nothing Then
~~~~~~~~~~~~
BC42016: Implicit conversion from 'Object' to 'Boolean'.
If Result <> 13 Or X <> Nothing Then
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC42032: Operands of type Object used for operator '<>'; use the 'IsNot' operator to test object identity.
If Result <> 13 Or X <> Nothing Then
~
BC42104: Variable 'X' is used before it has been assigned a value. A null reference exception could result at runtime.
If Result <> 13 Or X <> Nothing Then
~
BC42019: Operands of type Object used for operator 'Or'; runtime errors could occur.
If Result <> 13 Or X <> Nothing Then
~~~~~~~~~~~~
BC42032: Operands of type Object used for operator '<>'; use the 'IsNot' operator to test object identity.
If Result <> 13 Or X <> Nothing Then
~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
'vbc module1.vb /target:library /noconfig /optionstrict:custom
<Fact()>
Public Sub BC42036WRN_ObjectMathSelectCase()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ObjectMathSelectCase">
<file name="a.vb">
Module M1
Sub Main()
Dim o As Object = 1
Select Case o
Case 1
End Select
End Sub
End Module
</file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC42036: Operands of type Object used in expressions for 'Select', 'Case' statements; runtime errors could occur.
Select Case o
~
BC42016: Implicit conversion from 'Object' to 'Boolean'.
Case 1
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42036WRN_ObjectMathSelectCase_02()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ObjectMathSelectCase">
<file name="a.vb">
Module M1
Sub Main()
Dim o As Object = 1
Select Case 1
Case 2, o
End Select
End Sub
End Module
</file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors>
BC42016: Implicit conversion from 'Object' to 'Boolean'.
Case 2, o
~~~~~~~~~
BC42036: Operands of type Object used in expressions for 'Select', 'Case' statements; runtime errors could occur.
Case 2, o
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42037WRN_EqualToLiteralNothing()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EqualToLiteralNothing">
<file name="a.vb">
Module M
Sub F(o As Integer?)
Dim b As Boolean
b = (o = Nothing)
b = (Nothing = o)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42037: This expression will always evaluate to Nothing (due to null propagation from the equals operator). To check if the value is null consider using 'Is Nothing'.
b = (o = Nothing)
~~~~~~~~~~~
BC42037: This expression will always evaluate to Nothing (due to null propagation from the equals operator). To check if the value is null consider using 'Is Nothing'.
b = (Nothing = o)
~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42038WRN_NotEqualToLiteralNothing()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
<![CDATA[
Module M
Sub F(o As Integer?)
Dim b As Boolean
b = (o <> Nothing)
b = (Nothing <> o)
End Sub
End Module
]]>
</file>
</compilation>)
Dim expectedErrors1 = <errors>
<![CDATA[
BC42038: This expression will always evaluate to Nothing (due to null propagation from the equals operator). To check if the value is not null consider using 'IsNot Nothing'.
b = (o <> Nothing)
~~~~~~~~~~~~
BC42038: This expression will always evaluate to Nothing (due to null propagation from the equals operator). To check if the value is not null consider using 'IsNot Nothing'.
b = (Nothing <> o)
~~~~~~~~~~~~
]]>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared Function F()
Dim v As String
Return v
End Function
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42104: Variable 'v' is used before it has been assigned a value. A null reference exception could result at runtime.
Return v
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(546820, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546820")>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_StaticLocal()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Public Module Program
Sub Main()
Static TypeCharacterTable As System.Collections.Generic.Dictionary(Of String, String)
If TypeCharacterTable Is Nothing Then
TypeCharacterTable = New System.Collections.Generic.Dictionary(Of String, String)
End If
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
End Sub
<WorkItem(542080, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542080")>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Class C
Public Shared Sub Main()
Dim x As Action
For Each x In New Action() {}
x.Invoke()
Next
x.Invoke()
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42104: Variable 'x' is used before it has been assigned a value. A null reference exception could result at runtime.
x.Invoke()
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Public Shared Sub Main()
Dim S As String
For Each x As String In "abc"
For Each S In "abc"
If S = "B"c Then
Continue For
End If
Next S
Next x
System.Console.WriteLine(S)
End Sub
End Class
</file>
</compilation>)
AssertTheseEmitDiagnostics(compilation,
<errors>
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToString' is not defined.
For Each x As String In "abc"
~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToString' is not defined.
For Each S In "abc"
~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.CompareString' is not defined.
If S = "B"c Then
~~~~~~~~
BC42104: Variable 'S' is used before it has been assigned a value. A null reference exception could result at runtime.
System.Console.WriteLine(S)
~
</errors>)
End Sub
<WorkItem(542080, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542080")>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Class C
Public Shared Sub Main()
For Each x As String In "abc"
Dim S As String
For Each S In "abc"
If S = "B"c Then
Continue For
End If
Next S
System.Console.WriteLine(S)
Next x
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42104: Variable 'S' is used before it has been assigned a value. A null reference exception could result at runtime.
System.Console.WriteLine(S)
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542080, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542080")>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Structure S
Public X As Integer
Public Y As String
End Structure
Public Module Program2
Public Sub Main(args() As String)
Dim a, b As New S() With {.Y = b.Y}
Dim c, d As New S() With {.Y = c.Y}
Dim e, f As New S() With {.Y = .Y}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC42104: Variable 'Y' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim a, b As New S() With {.Y = b.Y}
~~~
</errors>)
End Sub
<WorkItem(542080, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542080")>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Structure S
Public X As String
Public Y As Object
End Structure
Public Module Program2
Public Sub Main(args() As String)
Dim a, b, c As New S() With {.Y = b.X, .X = c.Y}
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC42104: Variable 'X' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim a, b, c As New S() With {.Y = b.X, .X = c.Y}
~~~
BC42104: Variable 'Y' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim a, b, c As New S() With {.Y = b.X, .X = c.Y}
~~~
</errors>)
End Sub
''' <summary>
''' No warning reported for expression that will not be evaluated.
''' </summary>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_ConstantUnevaluatedReceiver()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class A
Const F As Object = Nothing
Shared Function M() As Object
Dim o As A
Return (o).F
End Function
End Class
</file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors>
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
Return (o).F
~~~~~
</errors>)
End Sub
''' <summary>
''' No warning reported for expression that will not be evaluated.
''' </summary>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_CallUnevaluatedReceiver()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class A
Shared Function F() As Object
Return Nothing
End Function
Shared Function M() As Object
Dim o As A
Return o.F()
End Function
End Class
</file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors>
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
Return o.F()
~~~
</errors>)
End Sub
''' <summary>
''' No warning reported for expression that will not be evaluated.
''' </summary>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_AddressOfUnevaluatedReceiver()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class A
Shared Sub M()
End Sub
Shared Function F() As System.Action
Dim o As A
Return AddressOf (o).M
End Function
End Class
</file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors>
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
Return AddressOf (o).M
~~~~~~~~~~~~~~~
</errors>)
End Sub
''' <summary>
''' No warning reported for expression that will not be evaluated.
''' </summary>
<Fact()>
Public Sub BC42104WRN_DefAsgUseNullRef_TypeExpressionUnevaluatedReceiver()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class A
Class B
Friend Const F As Object = Nothing
End Class
Shared Function M() As Object
Dim o As A
Return o.B.F
End Function
End Class
</file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors>
BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
Return o.B.F
~~~
</errors>)
End Sub
<WorkItem(528735, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528735")>
<Fact()>
Public Sub BC42105WRN_DefAsgNoRetValFuncRef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC42105WRN_DefAsgNoRetValFuncRef1">
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class C(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)
Function F0() As Object
End Function ' F0
Function F1() As T1
End Function ' F1
Function F2() As T2
End Function ' F2
Function F3() As T3
End Function ' F3
Function F4() As T4
End Function ' F4
Function F5() As T5
End Function ' F5
Function F6() As T6
End Function ' F6
Function F7() As T7
End Function ' F7
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42105: Function 'F0' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function ' F0
~~~~~~~~~~~~
BC42105: Function 'F2' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function ' F2
~~~~~~~~~~~~
BC42105: Function 'F6' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function ' F6
~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(545313, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545313")>
<Fact()>
Public Sub BC42105WRN_DefAsgNoRetValFuncRef1b()
' Make sure initializers are analyzed for errors/warnings
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC42105WRN_DefAsgNoRetValFuncRef1b">
<file name="a.vb">
Option Strict On
Imports System
Module Module1
Dim f As Func(Of String) = Function() As String
End Function
Sub S()
Dim l As Func(Of String) = Function() As String
End Function
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC42105: Function '<anonymous method>' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function
~~~~~~~~~~~~
BC42105: Function '<anonymous method>' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function
~~~~~~~~~~~~
]]>
</errors>)
End Sub
<WorkItem(837973, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/837973")>
<Fact()>
Public Sub Bug837973()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation>
<file name="a.vb">
Imports System
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
Imports System.Threading.Tasks
'COMPILEERRORTOTAL: 2
Public Module Async_Regress134668
Public Function MethodFunction(x As Func(Of Object)) As Integer
Return 1
End Function
Public Async Sub Async_Regress134668_Test()
Await Task.Yield
Dim i1 = MethodFunction(Async Function() As Task
Await Task.Yield
End Function)
Dim i2 = MethodFunction(Function() As Task
'COMPILEWARNING: BC42105, "End Function"
End Function) ' 1
Dim i4 = MethodFunction(Function() As Task
return Nothing
End Function) ' 1
Dim i3 = MethodFunction(Async Function() As Task(Of Integer)
Await Task.Delay(10)
'COMPILEWARNING: BC42105, "End Function"
End Function) ' 2
End Sub
Public Function Async_Regress134668_Test2() As Object
Async_Regress134668_Test2 = Nothing
Dim i2 = MethodFunction(Function() As Task
End Function) ' 3
End Function ' 4
Public Function Async_Regress134668_Test3() As Object
Dim i2 = MethodFunction(Function() As Task
Return Nothing
End Function)
End Function ' 5
End Module
</file>
</compilation>, {MscorlibRef_v4_0_30316_17626, MsvbRef_v4_0_30319_17929}, TestOptions.ReleaseDll)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC42105: Function '<anonymous method>' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function) ' 1
~~~~~~~~~~~~
BC42105: Function '<anonymous method>' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function) ' 2
~~~~~~~~~~~~
BC42105: Function '<anonymous method>' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function) ' 3
~~~~~~~~~~~~
BC42105: Function 'Async_Regress134668_Test3' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function ' 5
~~~~~~~~~~~~
]]></errors>)
End Sub
<WorkItem(545313, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545313")>
<Fact()>
Public Sub BC42105WRN_DefAsgNoRetValFuncRef1c()
' Make sure initializers are analyzed for errors/warnings ONLY ONCE
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC42105WRN_DefAsgNoRetValFuncRef1c">
<file name="a.vb">
Option Strict On
Imports System
Class C1
Private s As Func(Of String) = Function() As String
End Function
Public Sub New()
End Sub
Public Sub New(i As Integer)
MyClass.New()
End Sub
Public Sub New(i As Long)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
<![CDATA[
BC42105: Function '<anonymous method>' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function
~~~~~~~~~~~~
]]>
</errors>)
End Sub
<Fact()>
Public Sub BC42106WRN_DefAsgNoRetValOpRef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DefAsgNoRetValOpSubst1">
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class C(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)
Class C0
Shared Operator -(o As C0) As Object
End Operator ' C0
End Class
Class C1
Shared Operator -(o As C1) As T1
End Operator ' C1
End Class
Class C2
Shared Operator -(o As C2) As T2
End Operator ' C2
End Class
Class C3
Shared Operator -(o As C3) As T3
End Operator ' C3
End Class
Class C4
Shared Operator -(o As C4) As T4
End Operator ' C4
End Class
Class C5
Shared Operator -(o As C5) As T5
End Operator ' C5
End Class
Class C6
Shared Operator -(o As C6) As T6
End Operator ' C6
End Class
Class C7
Shared Operator -(o As C7) As T7
End Operator ' C7
End Class
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42106: Operator '-' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Operator ' C0
~~~~~~~~~~~~
BC42106: Operator '-' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Operator ' C2
~~~~~~~~~~~~
BC42106: Operator '-' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Operator ' C6
~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42107WRN_DefAsgNoRetValPropRef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DefAsgNoRetValPropSubst1">
<file name="a.vb">
Interface I
End Interface
Class A
End Class
Class C(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)
ReadOnly Property P0 As Object
Get
End Get ' P0
End Property
ReadOnly Property P1 As T1
Get
End Get ' P1
End Property
ReadOnly Property P2 As T2
Get
End Get ' P2
End Property
ReadOnly Property P3 As T3
Get
End Get ' P3
End Property
ReadOnly Property P4 As T4
Get
End Get ' P4
End Property
ReadOnly Property P5 As T5
Get
End Get ' P5
End Property
ReadOnly Property P6 As T6
Get
End Get ' P6
End Property
ReadOnly Property P7 As T7
Get
End Get ' P7
End Property
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42107: Property 'P0' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Get ' P0
~~~~~~~
BC42107: Property 'P2' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Get ' P2
~~~~~~~
BC42107: Property 'P6' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Get ' P6
~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540421, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540421")>
<Fact()>
Public Sub BC42108WRN_DefAsgUseNullRefByRefStr()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Structure S
Public Fld As String
End Structure
Class C
Shared Sub M(p1 As String, ByRef p2 As String)
Dim s1 As S
Dim s2 As S
Dim l1 As String
Dim a1 As String() = New String(3) {}
a1(2) = "abc"
M(s1)
M(s2.Fld)
M(l1)
M(p1)
M(p2)
M(a1(2))
End Sub
Shared Sub M(ByRef o As Object)
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42108: Variable 's1' is passed by reference before it has been assigned a value. A null reference exception could result at runtime. Make sure the structure or all the reference members are initialized before use
M(s1)
~~
BC42030: Variable 'Fld' is passed by reference before it has been assigned a value. A null reference exception could result at runtime.
M(s2.Fld)
~~~~~~
BC42030: Variable 'l1' is passed by reference before it has been assigned a value. A null reference exception could result at runtime.
M(l1)
~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42108_NoWarningForOutParameter()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Structure SSS
Public F As String
End Structure
Module Program
Sub Main(args As String())
Dim s As SSS
Call (New Dictionary(Of Integer, SSS)).TryGetValue(1, s)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC42108: Variable 's' is passed by reference before it has been assigned a value. A null reference exception could result at runtime. Make sure the structure or all the reference members are initialized before use
Call (New Dictionary(Of Integer, SSS)).TryGetValue(1, s)
~
</errors>)
End Sub
<Fact()>
Public Sub BC42108_StillWarningForLateBinding()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Structure SSS
Public F As String
End Structure
Module Program
Sub Main(args As String())
Dim s As SSS
Dim o As Object = New Dictionary(Of Integer, SSS)
o.TryGetValue(1, s)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC42108: Variable 's' is passed by reference before it has been assigned a value. A null reference exception could result at runtime. Make sure the structure or all the reference members are initialized before use
o.TryGetValue(1, s)
~
</errors>)
End Sub
<WorkItem(540421, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540421")>
<Fact()>
Public Sub BC42108WRN_DefAsgUseNullRefByRefStr2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Class C
Public Fld As String
End Class
Class CC
Public FldC As C
Public FldS As S
End Class
Structure S
Public Fld As String
End Structure
Structure SS
Public FldC As C
Public FldS As S
End Structure
Class Main
Shared Sub M(p1 As String, ByRef p2 As String)
Dim s1 As S
Dim s2 As SS
Dim s3 As SS
Dim c1 As C
Dim c2 As CC
Dim c3 As CC
M(s1.Fld)
M(s2.FldS.Fld)
M(s3.FldC.Fld)
M(c1.Fld)
M(c2.FldS.Fld)
M(c3.FldC.Fld)
End Sub
Shared Sub M(ByRef o As Object)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC42030: Variable 'Fld' is passed by reference before it has been assigned a value. A null reference exception could result at runtime.
M(s1.Fld)
~~~~~~
BC42030: Variable 'Fld' is passed by reference before it has been assigned a value. A null reference exception could result at runtime.
M(s2.FldS.Fld)
~~~~~~~~~~~
BC42104: Variable 'FldC' is used before it has been assigned a value. A null reference exception could result at runtime.
M(s3.FldC.Fld)
~~~~~~~
BC42104: Variable 'c1' is used before it has been assigned a value. A null reference exception could result at runtime.
M(c1.Fld)
~~
BC42104: Variable 'c2' is used before it has been assigned a value. A null reference exception could result at runtime.
M(c2.FldS.Fld)
~~
BC42104: Variable 'c3' is used before it has been assigned a value. A null reference exception could result at runtime.
M(c3.FldC.Fld)
~~
</errors>)
End Sub
<Fact()>
Public Sub BC42109WRN_DefAsgUseNullRefStr()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Structure S
Public F As Object
End Structure
Class C
Shared Sub M()
Dim s As S
M(s)
End Sub
Shared Sub M(o As Object)
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42109: Variable 's' is used before it has been assigned a value. A null reference exception could result at runtime. Make sure the structure or all the reference members are initialized before use
M(s)
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(546818, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546818")>
<Fact()>
Public Sub BC42109WRN_DefAsgUseNullRefStr_NoError()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Imports System
Public Structure AccObjFromWindow
Public hwnd As IntPtr
Public ppvObject As Object
End Structure
Class SSS
Public Sub S()
Dim input As AccObjFromWindow
input.hwnd = IntPtr.Zero
input.ppvObject = Nothing
Dim a = input
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
End Sub
<WorkItem(547098, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/547098")>
<Fact()>
Public Sub BC42109WRN_DefAsgUseNullRefStr_NoError2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module Module1
Sub Main()
Dim s As str1
Dim sTmp As String = ""
AddHandler s.e1, AddressOf s.sub1
Call s.revent(True, sTmp)
AddHandler s.e1, AddressOf s.sub2
sTmp = ""
Call s.revent(True, sTmp) ' place BP here
End Sub
End Module
Structure str1
Dim i As Integer
Public Event e1(ByVal b As Boolean, ByRef s As String)
Sub revent(ByVal b As Boolean, ByRef s As String)
RaiseEvent e1(b, s)
End Sub
Sub sub1(ByVal b As Boolean, ByRef s As String)
s = s & "1"
End Sub
Sub sub2(ByVal b As Boolean, ByRef s As String)
s = s & "2"
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
End Sub
<WorkItem(546377, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546377")>
<WorkItem(546423, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546423")>
<WorkItem(546420, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546420")>
<Fact()>
Public Sub Bug15747()
Dim comp = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Public Module Program
Sub Main()
Dim hscr As IntPtr
Try
hscr = New IntPtr
Catch ex As Exception
If Not hscr.Equals(IntPtr.Zero) Then
End If
End Try
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics()
End Sub
<WorkItem(546377, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546377")>
<WorkItem(546423, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546423")>
<WorkItem(546420, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546420")>
<Fact()>
Public Sub Bug15747b()
Dim comp = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Public Module Program
Sub Main()
Dim hscr As UIntPtr
Try
hscr = New UIntPtr
Catch ex As Exception
If Not hscr.Equals(UIntPtr.Zero) Then
End If
End Try
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics()
End Sub
<WorkItem(546175, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546175")>
<Fact()>
Public Sub BC42109WRN_DefAsgUseNullRefStr_Dev11Compat()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Public Structure NonGenericReference
Private s As String
Public Structure GenericReference(Of T)
Private s As String
End Structure
End Structure
Public Structure GenericReference(Of T)
Private s As String
Public Structure NonGenericReference
Private s As String
End Structure
End Structure
Public Structure GenericReference2(Of T)
Private s2 As Integer
End Structure
</file>
</compilation>)
Dim reference1 = compilation1.EmitToImageReference()
Dim reference2 = CreateReferenceFromIlCode(<![CDATA[
.class public sequential ansi sealed beforefieldinit GenericWithPtr`1<T>
extends [mscorlib]System.ValueType
{
//.field private int32* aa
} // end of class GenericWithPtr`1
]]>.Value)
Dim comp = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb">
Module Module1
Sub Main()
Dim a As NonGenericReference
Dim b As GenericReference(Of Integer)
Dim c As GenericReference(Of String)
Dim d As NonGenericReference.GenericReference(Of Integer)
Dim e As NonGenericReference.GenericReference(Of String)
Dim f As GenericReference(Of Integer).NonGenericReference
Dim g As GenericReference(Of String).NonGenericReference
Dim i As GenericReference2(Of Integer)
Dim j As GenericReference2(Of String)
Dim k As GenericWithPtr(Of Integer)
Dim z1 = a ' No Warning
Dim z2 = b
Dim z3 = c
Dim z4 = d
Dim z5 = e
Dim z6 = f
Dim z7 = g
Dim z8 = i ' No Warning
Dim z9 = j ' No Warning
Dim za = k ' No Warning
End Sub
End Module
</file>
</compilation>, references:={reference1, reference2}).
VerifyDiagnostics(Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "b").WithArguments("b"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "c").WithArguments("c"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "d").WithArguments("d"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "e").WithArguments("e"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "f").WithArguments("f"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "g").WithArguments("g"))
End Sub
<WorkItem(546175, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546175")>
<Fact()>
Public Sub BC42109WRN_DefAsgUseNullRefStr_Dev11Compat2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Public Structure NonGenericReference
Private s As String
Public Structure GenericReference(Of T)
Private s As String
End Structure
End Structure
Public Structure GenericReference(Of T)
Private s As String
Public Structure NonGenericReference
Private s As String
End Structure
End Structure
Public Structure GenericReference2(Of T)
Private s2 As Integer
End Structure
</file>
</compilation>)
Dim comp = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb">
Module Module1
Sub Main()
Dim a As NonGenericReference
Dim b As GenericReference(Of Integer)
Dim c As GenericReference(Of String)
Dim d As NonGenericReference.GenericReference(Of Integer)
Dim e As NonGenericReference.GenericReference(Of String)
Dim f As GenericReference(Of Integer).NonGenericReference
Dim g As GenericReference(Of String).NonGenericReference
Dim i As GenericReference2(Of Integer)
Dim j As GenericReference2(Of String)
Dim z1 = a ' Warning!!!
Dim z2 = b
Dim z3 = c
Dim z4 = d
Dim z5 = e
Dim z6 = f
Dim z7 = g
Dim z8 = i ' No Warning
Dim z9 = j ' No Warning
End Sub
End Module
</file>
</compilation>, references:={New VisualBasicCompilationReference(compilation1)}).
VerifyDiagnostics(Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "a").WithArguments("a"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "b").WithArguments("b"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "c").WithArguments("c"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "d").WithArguments("d"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "e").WithArguments("e"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "f").WithArguments("f"),
Diagnostic(ERRID.WRN_DefAsgUseNullRefStr, "g").WithArguments("g"))
End Sub
<WorkItem(652008, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/652008")>
<Fact()>
Public Sub BC42110WRN_FieldInForNotExplicit_DiagnosticRemoved()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="FieldInForNotExplicit">
<file name="a.vb">
Class Customer
Private Index As Integer
Sub Main()
For Index = 1 To 10
Next
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42322WRN_InterfaceConversion2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module Module1
Sub Main()
Dim xx As System.Collections.Generic.IEnumerator(Of Integer) = "hello"
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42322: Runtime errors might occur when converting 'String' to 'IEnumerator(Of Integer)'.
Dim xx As System.Collections.Generic.IEnumerator(Of Integer) = "hello"
~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(545479, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545479")>
<Fact()>
Public Sub BC42322WRN_InterfaceConversion2_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="c.vb"><![CDATA[
Imports System
Imports System.Runtime.InteropServices
Public Interface I
End Interface
<C(DirectCast(New C(""), I))>
<ComImport()>
NotInheritable Class C
Inherits Attribute
Public Sub New(s As String)
End Sub
End Class
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30934: Conversion from 'I' to 'String' cannot occur in a constant expression used as an argument to an attribute.
<C(DirectCast(New C(""), I))>
~~~~~~~~~~~~~~~~~~~~~~~~
BC42322: Runtime errors might occur when converting 'I' to 'String'.
<C(DirectCast(New C(""), I))>
~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC42324WRN_LiftControlVariableLambda()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="LiftControlVariableLambda">
<file name="a.vb">
Imports System
Class Customer
Sub Main()
For i As Integer = 1 To (function() i + 10)()
Dim exampleFunc1 As Func(Of Integer) = Function() i
Next
' since Dev11 the scope for foreach loops has been changed; no warnings here
For each j as integer in (function(){1+j, 2+j})()
Dim exampleFunc2 As Func(Of Integer) = Function() j
Next
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42324: Using the iteration variable in a lambda expression may have unexpected results. Instead, create a local variable within the loop and assign it the value of the iteration variable.
For i As Integer = 1 To (function() i + 10)()
~
BC42324: Using the iteration variable in a lambda expression may have unexpected results. Instead, create a local variable within the loop and assign it the value of the iteration variable.
Dim exampleFunc1 As Func(Of Integer) = Function() i
~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42326WRN_LambdaPassedToRemoveHandler()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaPassedToRemoveHandler">
<file name="a.vb">
Module Module1
Event ProcessInteger(ByVal x As Integer)
Sub Main()
AddHandler ProcessInteger, Function(m As Integer) m
RemoveHandler ProcessInteger, Function(m As Integer) m
End Sub
End Module
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.WRN_LambdaPassedToRemoveHandler, "Function(m As Integer) m"))
End Sub
<WorkItem(545252, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545252")>
<Fact()>
Public Sub BC30413ERR_WithEventsIsDelegate()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdaPassedToRemoveHandler">
<file name="a.vb">
Imports System
Class Derived
WithEvents e As Action = Sub() Exit Sub
WithEvents e1, e2 As New Integer()
End Class
</file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_WithEventsAsStruct, "e"),
Diagnostic(ERRID.ERR_WithEventsAsStruct, "e1"),
Diagnostic(ERRID.ERR_WithEventsAsStruct, "e2"))
End Sub
<WorkItem(545195, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545195")>
<Fact()>
Public Sub BC42328WRN_RelDelegatePassedToRemoveHandler()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RelDelegatePassedToRemoveHandler">
<file name="a.vb">
Class A
Public Val As Integer
Sub New(ByVal i As Integer)
Val = i
End Sub
End Class
Class B
Inherits A
Sub New(ByVal i As Integer)
MyBase.New(i)
End Sub
End Class
Class C1
Delegate Sub HandlerNum(ByVal i As Integer)
Delegate Sub HandlerCls(ByVal a As B)
Dim WithEvents inner As C1
Event evtNum As HandlerNum
Event evtCls As HandlerCls
Sub HandleLong1(ByVal l As Long)
End Sub
Sub HandlesWithNum(ByVal l As Long) Handles inner.evtNum
End Sub
Sub foo()
RemoveHandler evtNum, AddressOf HandleLong1
inner = New C1()
RemoveHandler inner.evtNum, AddressOf HandlesWithNum
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42328: The 'AddressOf' expression has no effect in this context because the method argument to 'AddressOf' requires a relaxed conversion to the delegate type of the event. Assign the 'AddressOf' expression to a variable, and use the variable to add or remove the method as the handler.
RemoveHandler evtNum, AddressOf HandleLong1
~~~~~~~~~~~
BC42328: The 'AddressOf' expression has no effect in this context because the method argument to 'AddressOf' requires a relaxed conversion to the delegate type of the event. Assign the 'AddressOf' expression to a variable, and use the variable to add or remove the method as the handler.
RemoveHandler inner.evtNum, AddressOf HandlesWithNum
~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42335WRN_TypeInferenceAssumed3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeInferenceAssumed3">
<file name="a.vb">
Option Strict On
Imports System.Collections.Generic
Module M1
Sub foo()
foo1({})
foo1({Nothing})
Foo2({}, {})
Foo2({Nothing}, {Nothing})
Foo2({Nothing}, {})
End Sub
Sub foo1(Of t)(ByVal x As t())
End Sub
Sub Foo2(Of t)(ByVal x As t, ByVal y As t)
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC42335: Data type of 't' in 'Public Sub foo1(Of t)(x As t())' could not be inferred. 'Object' assumed.
foo1({})
~~
BC42335: Data type of 't' in 'Public Sub foo1(Of t)(x As t())' could not be inferred. 'Object' assumed.
foo1({Nothing})
~~~~~~~~~
BC42335: Data type of 't' in 'Public Sub Foo2(Of t)(x As t, y As t)' could not be inferred. 'Object()' assumed.
Foo2({}, {})
~~
BC42335: Data type of 't' in 'Public Sub Foo2(Of t)(x As t, y As t)' could not be inferred. 'Object()' assumed.
Foo2({Nothing}, {Nothing})
~~~~~~~~~
BC42335: Data type of 't' in 'Public Sub Foo2(Of t)(x As t, y As t)' could not be inferred. 'Object()' assumed.
Foo2({Nothing}, {})
~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42349WRN_ObsoleteIdentityDirectCastForValueType()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ObsoleteIdentityDirectCastForValueType">
<file name="a.vb">
Class cls
Sub test()
Dim l1 = DirectCast(1L, Long)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42349: Using DirectCast operator to cast a value-type to the same type is obsolete.
Dim l1 = DirectCast(1L, Long)
~~
</expected>)
End Sub
<Fact()>
Public Sub BC42349WRN_ObsoleteIdentityDirectCastForValueType_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ObsoleteIdentityDirectCastForValueType">
<file name="a.vb">
Class C1
function test()
return DirectCast(True, Boolean)
End function
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42349: Using DirectCast operator to cast a value-type to the same type is obsolete.
return DirectCast(True, Boolean)
~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42351WRN_MutableStructureInUsing()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MutableStructureInUsing">
<file name="a.vb">
Imports System
Structure MutableStructure
Implements IDisposable
Dim dummy As Integer ' this field triggers the warning
Public Sub Dispose() Implements System.IDisposable.Dispose
End Sub
End Structure
Structure ImmutableStructure
Implements IDisposable
Public Shared disposed As Integer
Public Sub Dispose() Implements System.IDisposable.Dispose
disposed = disposed + 1
End Sub
End Structure
Class ReferenceType
Implements IDisposable
Dim dummy As Integer
Public Sub Dispose() Implements System.IDisposable.Dispose
End Sub
End Class
Module M1
Sub foo()
' resource type is a concrete structure + immutable (OK)
Using a As New ImmutableStructure()
End Using
Using New ImmutableStructure() ' ok
End Using
' resource type is a concrete structure + mutable (Warning)
Using b As New MutableStructure()
End Using
Using New MutableStructure() ' as expression also ok.
End Using
' reference types + mutable (OK)
Using c As New ReferenceType()
End Using
Using New ReferenceType() ' ok
End Using
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42351: Local variable 'b' is read-only and its type is a structure. Invoking its members or passing it ByRef does not change its content and might lead to unexpected results. Consider declaring this variable outside of the 'Using' block.
Using b As New MutableStructure()
~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42351WRN_MutableStructureInUsingGenericConstraints()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC42351WRN_MutableStructureInUsingGenericConstraints">
<file name="a.vb">
Imports System
Structure MutableStructure
Implements IDisposable
Dim dummy As Integer ' this field triggers the warning
Public Sub Dispose() Implements System.IDisposable.Dispose
End Sub
End Structure
Structure ImmutableStructure
Implements IDisposable
Public Shared disposed As Integer
Public Sub Dispose() Implements System.IDisposable.Dispose
disposed = disposed + 1
End Sub
End Structure
Class ReferenceType
Implements IDisposable
Dim dummy As Integer
Public Sub Dispose() Implements System.IDisposable.Dispose
End Sub
End Class
Module M1
Sub foo(Of T as {Structure, IDisposable},
U as {ReferenceType, New, IDisposable},
V as {Structure})()
' resource type is a type parameter with a structure constraint (Warning, always)
Using a As T = Directcast(new MutableStructure(), IDisposable)
End Using
' resource type is a type parameter with a reference type constraint (OK)
Using b As U = TryCast(new ReferenceType(), U)
End Using
' resource type is a type parameter with a structure constraint (Warning, always)
Using c As V = DirectCast(new ImmutableStructure(), IDisposable)
End Using
End Sub
End Module
' Getting a concrete structure as a class constraint through overridden generic methods
Class BaseGeneric(Of S)
Public Overridable Sub MySub(Of T As S)(param As T)
End Sub
End Class
Class DerivedImmutable
Inherits BaseGeneric(Of ImmutableStructure)
Public Overrides Sub MySub(Of T As ImmutableStructure)(param As T)
Using immutable As T = New ImmutableStructure() ' OK
End Using
End Sub
End Class
Class DerivedMutable
Inherits BaseGeneric(Of MutableStructure)
Public Overrides Sub MySub(Of T As MutableStructure)(param As T)
Using mutable As T = New MutableStructure() ' shows warning
End Using
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42351: Local variable 'a' is read-only and its type is a structure. Invoking its members or passing it ByRef does not change its content and might lead to unexpected results. Consider declaring this variable outside of the 'Using' block.
Using a As T = Directcast(new MutableStructure(), IDisposable)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36010: 'Using' operand of type 'V' must implement 'System.IDisposable'.
Using c As V = DirectCast(new ImmutableStructure(), IDisposable)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC42351: Local variable 'c' is read-only and its type is a structure. Invoking its members or passing it ByRef does not change its content and might lead to unexpected results. Consider declaring this variable outside of the 'Using' block.
Using c As V = DirectCast(new ImmutableStructure(), IDisposable)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC42351: Local variable 'mutable' is read-only and its type is a structure. Invoking its members or passing it ByRef does not change its content and might lead to unexpected results. Consider declaring this variable outside of the 'Using' block.
Using mutable As T = New MutableStructure() ' shows warning
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42352WRN_MutableGenericStructureInUsing()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MutableGenericStructureInUsing">
<file name="a.vb">
Imports System
Module M1
Class ReferenceType
Implements IDisposable
Dim dummy As Integer
Public Sub Dispose() Implements System.IDisposable.Dispose
End Sub
End Class
Sub Foo(Of T As {New, IDisposable}, U As {New, IDisposable})(ByVal x As T)
'COMPILEWARNING: BC42352, "a", BC42352, "b"
Using a as T = DirectCast(New ReferenceType(), IDisposable), b As New U()
End Using
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42352: Local variable 'a' is read-only. When its type is a structure, invoking its members or passing it ByRef does not change its content and might lead to unexpected results. Consider declaring this variable outside of the 'Using' block.
Using a as T = DirectCast(New ReferenceType(), IDisposable), b As New U()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC42352: Local variable 'b' is read-only. When its type is a structure, invoking its members or passing it ByRef does not change its content and might lead to unexpected results. Consider declaring this variable outside of the 'Using' block.
Using a as T = DirectCast(New ReferenceType(), IDisposable), b As New U()
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42353WRN_DefAsgNoRetValFuncVal1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Structure gStr1(Of T)
Function Fun1(ByVal t1 As T) As Boolean
End Function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42353: Function 'Fun1' doesn't return a value on all code paths. Are you missing a 'Return' statement?
End Function
~~~~~~~~~~~~
</expected>)
End Sub
<WorkItem(542802, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542802")>
<Fact()>
Public Sub BC42353WRN_DefAsgNoRetValFuncVal1_Lambda()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb">
Imports System.Linq
Class BaseClass
Sub Method()
Dim x = New Integer() {}
x.Where(Function(y)
Exit Function
Return y = ""
End Function)
End Sub
End Class
Class DerivedClass
Inherits BaseClass
Shared Sub Main()
End Sub
End Class
</file>
</compilation>, {Net40.References.SystemCore})
VerifyDiagnostics(compilation, Diagnostic(ERRID.WRN_DefAsgNoRetValFuncVal1, "End Function").WithArguments("<anonymous method>"))
End Sub
<WorkItem(542816, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542816")>
<Fact()>
Public Sub BC42353WRN_DefAsgNoRetValFuncVal1_Lambda_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb">
Imports System.Linq
Class BaseClass
Function Method()
Dim x = New Integer() {}
x.Where(Function(y)
Exit Function ' 0
Return y = ""
End Function) ' 1
End Function ' 2
End Class
Class DerivedClass
Inherits BaseClass
Shared Sub Main()
End Sub
End Class
</file>
</compilation>, {Net40.References.SystemCore})
AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC42353: Function '<anonymous method>' doesn't return a value on all code paths. Are you missing a 'Return' statement?
End Function) ' 1
~~~~~~~~~~~~
BC42105: Function 'Method' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
End Function ' 2
~~~~~~~~~~~~
]]></expected>)
End Sub
<Fact()>
Public Sub BC42353WRN_DefAsgNoRetValFuncVal1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Structure gStr1
Function Fun1(y As Integer) As Boolean
Exit Function
'Return y = ""
End Function
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42353: Function 'Fun1' doesn't return a value on all code paths. Are you missing a 'Return' statement?
End Function
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42353WRN_DefAsgNoRetValFuncVal1_Query_Lambda()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb">
Imports System
Imports System.Linq
Imports System.Runtime.CompilerServices
Class BaseClass
Sub Method()
Dim x = New Integer() {}
x.Where(Function(y)
Exit Function
Return y = ""
End Function)
End Sub
End Class
Class DerivedClass
Inherits BaseClass
Shared Sub Main()
End Sub
End Class
</file>
</compilation>, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42353: Function '<anonymous method>' doesn't return a value on all code paths. Are you missing a 'Return' statement?
End Function)
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42354WRN_DefAsgNoRetValOpVal1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared Operator -(x As C) As Integer
End Operator
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42354: Operator '-' doesn't return a value on all code paths. Are you missing a 'Return' statement?
End Operator
~~~~~~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42355WRN_DefAsgNoRetValPropVal1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb">
Class C
Shared F As Boolean
Shared ReadOnly Property P As Integer
Get
If F Then
Return 0
End If
End Get
End Property
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC42355: Property 'P' doesn't return a value on all code paths. Are you missing a 'Return' statement?
End Get
~~~~~~~
</expected>)
End Sub
<Fact()>
Public Sub BC42356WRN_UnreachableCode_MethodBody()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module M1
Sub Main()
dim x as integer = 0
goto l1
if x > 0 then
l1:
Console.WriteLine("hello 1.")
end if
goto l2
Console.WriteLine("hello 2.")
Console.WriteLine("hello 3.")
l2:
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42356WRN_UnreachableCode_LambdaBody()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module M1
Sub Main()
dim y as Action = sub()
dim x as integer = 0
goto l1
if x > 0 then
l1:
Console.WriteLine("hello 1.")
end if
goto l2
Console.WriteLine("hello 2.")
Console.WriteLine("hello 3.")
l2:
End Sub
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42359WRN_EmptyPrefixAndXmlnsLocalName()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports <xmlns:empty="">
Module M
Private F As Object = <x empty:xmlns="http://roslyn"/>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC42368: The xmlns attribute has special meaning and should not be written with a prefix.
Private F As Object = <x empty:xmlns="http://roslyn"/>
~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC42360WRN_PrefixAndXmlnsLocalName()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Option Strict On
Imports <xmlns:p1="http://roslyn/">
Module M
Private F1 As Object = <x p1:xmlns="http://roslyn/1"/>
Private F2 As Object = <x p2:xmlns="http://roslyn/2"/>
Private F3 As Object = <x xmlns:p3="http://roslyn/3a" p3:xmlns="http://roslyn/3b"/>
End Module
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC42360: It is not recommended to have attributes named xmlns. Did you mean to write 'xmlns:p1' to define a prefix named 'p1'?
Private F1 As Object = <x p1:xmlns="http://roslyn/1"/>
~~~~~~~~
BC31148: XML namespace prefix 'p2' is not defined.
Private F2 As Object = <x p2:xmlns="http://roslyn/2"/>
~~
BC42360: It is not recommended to have attributes named xmlns. Did you mean to write 'xmlns:p2' to define a prefix named 'p2'?
Private F2 As Object = <x p2:xmlns="http://roslyn/2"/>
~~~~~~~~
BC42360: It is not recommended to have attributes named xmlns. Did you mean to write 'xmlns:p3' to define a prefix named 'p3'?
Private F3 As Object = <x xmlns:p3="http://roslyn/3a" p3:xmlns="http://roslyn/3b"/>
~~~~~~~~
]]></errors>)
End Sub
#End Region
<Fact>
Public Sub Bug17315_CompilationUnit()
Dim c = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="C">
<file>
End Class
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
c.AssertTheseDiagnostics(
<errors>
BC30002: Type 'System.Void' is not defined.
End Class
~~~~~~~~~
BC30460: 'End Class' must be preceded by a matching 'Class'.
End Class
~~~~~~~~~
BC31091: Import of type 'Object' from assembly or module 'C.dll' failed.
End Class
~~~~~~~~~
</errors>)
End Sub
<WorkItem(938459, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/938459")>
<Fact>
Public Sub UnimplementedMethodsIncorrectSquiggleLocationInterfaceInheritanceOrdering()
Dim c = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="C">
<file>
Module Module1
Sub Main()
End Sub
End Module
Interface IBase
Sub method1()
End Interface
Interface IBase2
Sub method2()
End Interface
Interface IDerived
Inherits IBase
Sub method3()
End Interface
Interface IDerived2
Inherits IDerived
Sub method4()
End Interface
Class foo
Implements IDerived2, IDerived, IBase, IBase2
Public Sub method1() Implements IBase.method1
End Sub
Public Sub method2() Implements IBase2.method2
End Sub
Public Sub method4() Implements IDerived2.method4
End Sub
End Class
</file>
</compilation>)
c.AssertTheseDiagnostics(
<errors>
BC30149: Class 'foo' must implement 'Sub method3()' for interface 'IDerived'.
Implements IDerived2, IDerived, IBase, IBase2
~~~~~~~~
</errors>)
' Change order so interfaces are defined in a completely different order.
' The bug related to order of interfaces.
c = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="C">
<file>
Module Module1
Sub Main()
End Sub
End Module
Interface IBase
Sub method1()
End Interface
Interface IBase2
Sub method2()
End Interface
Interface IDerived
Inherits IBase
Sub method3()
End Interface
Interface IDerived2
Inherits IDerived
Sub method4()
End Interface
Class foo
Implements IBase, IBase2, IDerived2, IDerived
Public Sub method4() Implements IDerived2.method4
End Sub
Public Sub method1() Implements IBase.method1
End Sub
Public Sub method2() Implements IBase2.method2
End Sub
End Class
</file>
</compilation>)
c.AssertTheseDiagnostics(
<errors>
BC30149: Class 'foo' must implement 'Sub method3()' for interface 'IDerived'.
Implements IBase, IBase2, IDerived2, IDerived
~~~~~~~~ </errors>)
End Sub
<Fact>
Public Sub Bug17315_Namespace()
Dim c = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="C">
<file>
Namespace N
Sub Foo
End Sub
End Namespace
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
c.AssertTheseDiagnostics(
<errors>
BC30002: Type 'System.Void' is not defined.
Namespace N
~~~~~~~~~~~~
BC31091: Import of type 'Object' from assembly or module 'C.dll' failed.
Namespace N
~~~~~~~~~~~~
BC30001: Statement is not valid in a namespace.
Sub Foo
~~~~~~~
BC30002: Type 'System.Void' is not defined.
Sub Foo
~~~~~~~~
</errors>)
End Sub
<Fact(), WorkItem(530126, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530126")>
Public Sub Bug_15314_Class()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NotYetImplementedInRoslyn">
<file name="a.vb">
Public Class C
Public Sub New()
Protected Class D
Public Sub New()
End Class
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30026: 'End Sub' expected.
Public Sub New()
~~~~~~~~~~~~~~~~
BC30289: Statement cannot appear within a method body. End of method assumed.
Protected Class D
~~~~~~~~~~~~~~~~~
BC30026: 'End Sub' expected.
Public Sub New()
~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(530126, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530126")>
Public Sub Bug_15314_Interface()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NotYetImplementedInRoslyn">
<file name="a.vb">
Public Class C
Public Sub New()
Protected Interface D
End Interface
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30026: 'End Sub' expected.
Public Sub New()
~~~~~~~~~~~~~~~~
BC30289: Statement cannot appear within a method body. End of method assumed.
Protected Interface D
~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(530126, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530126")>
Public Sub Bug_15314_Enum()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NotYetImplementedInRoslyn">
<file name="a.vb">
Public Class CE
Public Sub New()
Protected Enum DE
blah
End Enum
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30026: 'End Sub' expected.
Public Sub New()
~~~~~~~~~~~~~~~~
BC30289: Statement cannot appear within a method body. End of method assumed.
Protected Enum DE
~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(530126, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530126")>
Public Sub Bug_15314_Structure()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NotYetImplementedInRoslyn">
<file name="a.vb">
Public Class CS
Public Sub New()
Protected Structure DS
End Structure
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30026: 'End Sub' expected.
Public Sub New()
~~~~~~~~~~~~~~~~
BC30289: Statement cannot appear within a method body. End of method assumed.
Protected Structure DS
~~~~~~~~~~~~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub Bug4185()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NotYetImplementedInRoslyn">
<file name="a.vb">
Public Class Hello5
Public Shared Sub Main(args As String())
System.Console.WriteLine("Hello, World!")
Environent.ExitCode = 0
End Sub
End Class
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC30451: 'Environent' is not declared. It may be inaccessible due to its protection level.
Environent.ExitCode = 0
~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(545179, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545179")>
Public Sub Bug13459()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NotYetImplementedInRoslyn">
<file name="a.vb">
Imports System
Module Program
Function ReturnVoid() As System.Void
Throw New Exception()
End Function
Sub Main()
Dim x = Function() As System.Void
Throw New Exception()
End Function
End Sub
End Module
</file>
</compilation>)
Dim expectedErrors1 = <errors>
BC31422: 'System.Void' can only be used in a GetType expression.
Function ReturnVoid() As System.Void
~~~~~~~~~~~
BC31422: 'System.Void' can only be used in a GetType expression.
Dim x = Function() As System.Void
~~~~~~~~~~~
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub BaseConstructorImplicitCallWithoutSystemVoid()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="BaseConstructorImplicitCallWithoutSystemVoid">
<file name="a.vb">
Public Class C1
Public Sub New()
End Sub
End Class
Public Class C2
Inherits C1
End Class
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31091: Import of type 'Object' from assembly or module 'BaseConstructorImplicitCallWithoutSystemVoid.dll' failed.
Public Class C1
~~
BC30002: Type 'System.Void' is not defined.
Public Sub New()
~~~~~~~~~~~~~~~~~
BC30002: Type 'System.Void' is not defined.
Public Class C2
~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub ParamArrayBindingCheckForAttributeConstructor()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="ParamArrayBindingCheckForAttributeConstructor">
<file name="a.vb">
Public Class C1
Public Sub S(ParamArray p As String())
End Sub
End Class
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30002: Type 'System.Void' is not defined.
Public Class C1
~~~~~~~~~~~~~~~~~
BC31091: Import of type 'Object' from assembly or module 'ParamArrayBindingCheckForAttributeConstructor.dll' failed.
Public Class C1
~~
BC30002: Type 'System.Void' is not defined.
Public Sub S(ParamArray p As String())
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.ParamArrayAttribute..ctor' is not defined.
Public Sub S(ParamArray p As String())
~~~~~~~~~~~~~~~~~~~~~~~~
BC30002: Type 'System.String' is not defined.
Public Sub S(ParamArray p As String())
~~~~~~
</errors>)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub DefaultPropertyBindingCheckForAttributeConstructor()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="DefaultPropertyBindingCheckForAttributeConstructor">
<file name="a.vb">
Public Class C1
Public Default Property P(prop As String)
Get
Return Nothing
End Get
Set
End Set
End Property
End Class
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30002: Type 'System.Void' is not defined.
Public Class C1
~~~~~~~~~~~~~~~~
BC31091: Import of type 'Object' from assembly or module 'DefaultPropertyBindingCheckForAttributeConstructor.dll' failed.
Public Class C1
~~
BC35000: Requested operation is not available because the runtime library function 'System.Reflection.DefaultMemberAttribute..ctor' is not defined.
Public Default Property P(prop As String)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30002: Type 'System.Object' is not defined.
Public Default Property P(prop As String)
~
BC30002: Type 'System.String' is not defined.
Public Default Property P(prop As String)
~~~~~~
BC30002: Type 'System.Void' is not defined.
Set
~~~
</errors>)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub ConstBindingCheckForDateTimeConstantConstructor()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DefaultPropertyBindingCheckForAttributeConstructor">
<file name="a.vb">
Imports System
Public Class C1
Const DT1 As DateTime = #01/01/2000#
Const DT2 = #01/01/2000#
End Class
</file>
<file name="b.vb">
Namespace System.Runtime.CompilerServices
Public Class DateTimeConstantAttribute
Public Sub New(a As String)
End Sub
End Class
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC35000: Requested operation is not available because the runtime library function 'System.Runtime.CompilerServices.DateTimeConstantAttribute..ctor' is not defined.
Const DT1 As DateTime = #01/01/2000#
~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Runtime.CompilerServices.DateTimeConstantAttribute..ctor' is not defined.
Const DT2 = #01/01/2000#
~~~~~~~~~~~~~~
</errors>)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub ConstBindingCheckForDecimalConstantConstructor()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DefaultPropertyBindingCheckForAttributeConstructor">
<file name="a.vb">
Imports System
Public Class C1
Const DT1 As Decimal = 12d
Const DT2 = 12d
End Class
</file>
<file name="b.vb">
Namespace System.Runtime.CompilerServices
Public Class DecimalConstantAttribute
Public Sub New(a As String)
End Sub
End Class
End Namespace
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC35000: Requested operation is not available because the runtime library function 'System.Runtime.CompilerServices.DecimalConstantAttribute..ctor' is not defined.
Const DT1 As Decimal = 12d
~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Runtime.CompilerServices.DecimalConstantAttribute..ctor' is not defined.
Const DT2 = 12d
~~~~~
</errors>)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub SynthesizedInstanceConstructorBinding()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="SynthesizedInstanceConstructorBinding">
<file name="a.vb">
Public Class C1
End Class
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30002: Type 'System.Void' is not defined.
Public Class C1
~~~~~~~~~~~~~~~~
BC31091: Import of type 'Object' from assembly or module 'SynthesizedInstanceConstructorBinding.dll' failed.
Public Class C1
~~
</errors>)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub SynthesizedSharedConstructorBinding()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="SynthesizedInstanceConstructorBinding">
<file name="a.vb">
Public Class C1
Const DA As DateTime = #1/1/1#
End Class
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30002: Type 'System.Void' is not defined.
Public Class C1
~~~~~~~~~~~~~~~~
BC31091: Import of type 'Object' from assembly or module 'SynthesizedInstanceConstructorBinding.dll' failed.
Public Class C1
~~
BC30002: Type 'DateTime' is not defined.
Const DA As DateTime = #1/1/1#
~~~~~~~~
BC31091: Import of type 'Object' from assembly or module 'SynthesizedInstanceConstructorBinding.dll' failed.
Const DA As DateTime = #1/1/1#
~~~~~~~~
BC30002: Type 'System.DateTime' is not defined.
Const DA As DateTime = #1/1/1#
~~~~~~~
</errors>)
End Sub
<WorkItem(541066, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541066")>
<Fact()>
Public Sub EnumWithoutMscorReference()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="EnumWithoutMscorReference">
<file name="a.vb">
Enum E
A
End Enum
</file>
</compilation>,
Enumerable.Empty(Of MetadataReference)())
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30002: Type 'System.Void' is not defined.
Enum E
~~~~~~~
BC30002: Type 'System.Int32' is not defined.
Enum E
~
BC31091: Import of type '[Enum]' from assembly or module 'EnumWithoutMscorReference.dll' failed.
Enum E
~
</errors>)
End Sub
<WorkItem(541468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541468")>
<Fact()>
Public Sub TypeUsedViaAlias01()
Dim compilation1 = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="TypeUsedViaAlias01">
<file name="a.vb">
Imports DnT = Microsoft.VisualBasic.DateAndTime
Class c
Sub S0()
Dim a = DnT.DateString
End Sub
End Class
</file>
</compilation>, {MsvbRef})
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC30002: Type 'System.Void' is not defined.
Class c
~~~~~~~~
BC30652: Reference required to assembly '<Missing Core Assembly>, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'Object'. Add one to your project.
Class c
~
BC30002: Type 'System.Void' is not defined.
Sub S0()
~~~~~~~~~
BC30002: Type 'System.Object' is not defined.
Dim a = DnT.DateString
~
BC30652: Reference required to assembly '<Missing Core Assembly>, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'Object'. Add one to your project.
Dim a = DnT.DateString
~~~
BC30652: Reference required to assembly '<Missing Core Assembly>, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'String'. Add one to your project.
Dim a = DnT.DateString
~~~~~~~~~~~~~~
BC30652: Reference required to assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' containing the type '[Object]'. Add one to your project.
Dim a = DnT.DateString
~~~~~~~~~~~~~~
]]></errors>)
End Sub
<WorkItem(541468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541468")>
<Fact()>
Public Sub TypeUsedViaAlias02()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="TypeUsedViaAlias02">
<file name="a.vb">
Imports MyClass1 = Class1
Class c
Dim _myclass As MyClass1 = Nothing
End Class
</file>
</compilation>,
{TestReferences.SymbolsTests.NoPia.NoPIAGenericsAsm1})
compilation1.AssertTheseDiagnostics(
<errors>
BC36924: Type 'List(Of FooStruct)' cannot be used across assembly boundaries because it has a generic type argument that is an embedded interop type.
Dim _myclass As MyClass1 = Nothing
~~~~~~~~
</errors>)
End Sub
<WorkItem(541468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541468")>
<Fact()>
Public Sub TypeUsedViaAlias03()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="TypeUsedViaAlias03">
<file name="a.vb">
Imports MyClass1 = Class1
Class c
Sub S0()
Dim _myclass = MyClass1.Class1Foo
End Sub
End Class
</file>
</compilation>,
{TestReferences.SymbolsTests.NoPia.NoPIAGenericsAsm1})
compilation1.AssertTheseDiagnostics(
<errors>
BC36924: Type 'List(Of FooStruct)' cannot be used across assembly boundaries because it has a generic type argument that is an embedded interop type.
Dim _myclass = MyClass1.Class1Foo
~~~~~~~~
BC36924: Type 'List(Of FooStruct)' cannot be used across assembly boundaries because it has a generic type argument that is an embedded interop type.
Dim _myclass = MyClass1.Class1Foo
~~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<WorkItem(541468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541468")>
<Fact()>
Public Sub TypeUsedViaAlias04()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="TypeUsedViaAlias04">
<file name="a.vb">
Imports MyClass1 = Class1
Class c
Sub S0()
Dim _myclass = directcast(nothing, MyClass1)
End Sub
End Class
</file>
</compilation>,
{TestReferences.SymbolsTests.NoPia.NoPIAGenericsAsm1})
compilation1.AssertTheseDiagnostics(
<errors>
BC36924: Type 'List(Of FooStruct)' cannot be used across assembly boundaries because it has a generic type argument that is an embedded interop type.
Dim _myclass = directcast(nothing, MyClass1)
~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub Bug8522()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ArrayInitNoType">
<file name="a.vb">
Imports System
Class A
Sub New(x As Action)
End Sub
Public Const X As Integer = 0
End Class
Class C
Inherits Attribute
Sub New(x As Integer)
End Sub
End Class
Module M
Friend Const main As Object=Main
Sub Main
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30500: Constant 'main' cannot depend on its own value.
Friend Const main As Object=Main
~~~~
BC30260: 'Main' is already declared as 'Friend Const main As Object' in this module.
Sub Main
~~~~
</expected>)
End Sub
<WorkItem(542596, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542596")>
<Fact()>
Public Sub RegularArgumentAfterNamed()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RegularArgumentAfterNamed">
<file name="a.vb">
Module Module1
Sub M1(x As Integer, y As Integer)
End Sub
Sub M1(x As Integer, y As Long)
End Sub
Sub M2(x As Integer, y As Integer)
End Sub
Sub Main()
M1(x:=2, 3) 'BIND:"M1(x:=2, 3)"
M2(x:=2, 3)
End Sub
End Module
</file>
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30241: Named argument expected. Please use language version 15.5 or greater to use non-trailing named arguments.
M1(x:=2, 3) 'BIND:"M1(x:=2, 3)"
~
BC30241: Named argument expected. Please use language version 15.5 or greater to use non-trailing named arguments.
M2(x:=2, 3)
~
</expected>)
End Sub
<Fact()>
Public Sub EventMissingName()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventMissingName">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event
Sub Main(args As String())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30203: Identifier expected.
Event
~
</errors>)
End Sub
<Fact()>
Public Sub EventClashSynthetic()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventClashSynthetic">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event E()
Dim EEvent As Integer
Sub Main(args As String())
End Sub
End Module </file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31060: event 'E' implicitly defines 'EEvent', which conflicts with a member of the same name in module 'Program'.
Event E()
~
</errors>)
End Sub
<Fact()>
Public Sub EventClashSyntheticDelegate()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventClashSyntheticDelegate">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event E()
Dim EEventHandler As Integer
Sub Main(args As String())
End Sub
End Module </file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31060: event 'E' implicitly defines 'EEventHandler', which conflicts with a member of the same name in module 'Program'.
Event E()
~
</errors>)
End Sub
<Fact()>
Public Sub EventNotADelegate()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventNotADelegate">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event E as Integer
Sub Main(args As String())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31044: Events declared with an 'As' clause must have a delegate type.
Event E as Integer
~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub EventParamsAndAs()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventParamsAndAs">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event E(x as integer) as Integer
Sub Main(args As String())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30032: Events cannot have a return type.
Event E(x as integer) as Integer
~~
</errors>)
End Sub
<Fact()>
Public Sub EventDelegateReturns()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventDelegateReturns">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event E as Func(of Integer)
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31084: Events cannot be declared with a delegate type that has a return type.
Event E as Func(of Integer)
~~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub EventDelegateClash()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventDelegateClash">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event E()
Event E(x as integer)
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30260: 'E' is already declared as 'Public Event E()' in this module.
Event E(x as integer)
~
</errors>)
End Sub
<Fact()>
Public Sub EventNameLength()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventNameLength">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee()
Event eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee()
Sub Main(args As String())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertNoDiagnostics(compilation1)
CompilationUtils.AssertTheseEmitDiagnostics(compilation1,
<errors>
BC37220: Name 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeEventHandler' exceeds the maximum length allowed in metadata.
Event eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub EventTypeChar()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventTypeChar">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Module Program
Event e$
Sub Main(args As String())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30468: Type declaration characters are not valid in this context.
Event e$
~~
</errors>)
End Sub
<Fact()>
Public Sub EventIllegalImplements()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventIllegalImplements">
<file name="a.vb">
Imports System
Imports System.Collections.Generic
Interface I0
Event e
End Interface
Interface I1
Event e Implements I0.e
End Interface
Class Cls1
Implements I0
Shared Event e Implements I0.e
End Class
Module Program
Event e Implements I0.e
Sub Main(args As String())
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30688: Events in interfaces cannot be declared 'Implements'.
Event e Implements I0.e
~~~~~~~~~~
BC30149: Class 'Cls1' must implement 'Event e()' for interface 'I0'.
Implements I0
~~
BC30505: Methods or events that implement interface members cannot be declared 'Shared'.
Shared Event e Implements I0.e
~~~~~~
BC31083: Members in a Module cannot implement interface members.
Event e Implements I0.e
~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventMissingAccessors()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventMissingAccessors">
<file name="a.vb">
Option Strict On
Imports System
Module Program
Delegate Sub del1(x As Integer, x As Integer)
Custom Event eeeeeee As del1
End Event
Sub Main(args As String())
AddHandler eeeeeee, Nothing
RemoveHandler eeeeeee, Nothing
RaiseEvent eeeeeee(1,1)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31130: 'AddHandler' definition missing for event 'Public Event eeeeeee As Program.del1'.
Custom Event eeeeeee As del1
~~~~~~~
BC31131: 'RemoveHandler' definition missing for event 'Public Event eeeeeee As Program.del1'.
Custom Event eeeeeee As del1
~~~~~~~
BC31132: 'RaiseEvent' definition missing for event 'Public Event eeeeeee As Program.del1'.
Custom Event eeeeeee As del1
~~~~~~~
BC31132: 'RaiseEvent' definition missing for event 'eeeeeee'.
RaiseEvent eeeeeee(1,1)
~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventDuplicateAccessors()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventDuplicateAccessors">
<file name="a.vb">
Option Strict On
Imports System
Module Program
Delegate Sub del1(x As Integer, x As Integer)
Custom Event eeeeeee As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Integer, x1 As Integer)
End RaiseEvent
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Integer, x1 As Integer)
End RaiseEvent
End Event
Sub Main(args As String())
AddHandler eeeeeee, Nothing
RemoveHandler eeeeeee, Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31127: 'AddHandler' is already declared.
AddHandler(value As del1)
~~~~~~~~~~~~~~~~~~~~~~~~~
BC31128: 'RemoveHandler' is already declared.
RemoveHandler(value As del1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31129: 'RaiseEvent' is already declared.
RaiseEvent(x As Integer, x1 As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventAccessorsWrongParamNum()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventDuplicateAccessors">
<file name="a.vb">
Option Strict On
Imports System
Module Program
Delegate Sub del1(x As Integer, x As Integer)
Custom Event eeeeeee As del1
AddHandler()
End AddHandler
RemoveHandler(value As del1, x As Integer)
End RemoveHandler
RaiseEvent(x As Integer, x1 As Integer)
End RaiseEvent
End Event
Sub Main(args As String())
AddHandler eeeeeee, Nothing
RemoveHandler eeeeeee, Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31133: 'AddHandler' and 'RemoveHandler' methods must have exactly one parameter.
AddHandler()
~~~~~~~~~~~~
BC31133: 'AddHandler' and 'RemoveHandler' methods must have exactly one parameter.
RemoveHandler(value As del1, x As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventAccessorsWrongParamTypes()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventDuplicateAccessors">
<file name="a.vb">
Option Strict Off
Imports System
Module Program
Delegate Sub del1(x As Integer)
Custom Event eeeeeee As del1
AddHandler(value As Action(Of Integer))
End AddHandler
RemoveHandler(value)
End RemoveHandler
RaiseEvent(x)
' not an error (strict off)
End RaiseEvent
End Event
Sub Main(args As String())
AddHandler eeeeeee, Nothing
RemoveHandler eeeeeee, Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31136: 'AddHandler' and 'RemoveHandler' method parameters must have the same delegate type as the containing event.
AddHandler(value As Action(Of Integer))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31136: 'AddHandler' and 'RemoveHandler' method parameters must have the same delegate type as the containing event.
RemoveHandler(value)
~~~~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventAccessorsWrongParamTypes1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventDuplicateAccessors">
<file name="a.vb">
Option Strict Off
Imports System
Module Program
Delegate Sub del1(x As Integer)
Custom Event eeeeeee As Object
AddHandler(value As Object)
End AddHandler
RemoveHandler(value)
End RemoveHandler
RaiseEvent(x)
' not an error (strict off)
End RaiseEvent
End Event
Sub Main(args As String())
AddHandler eeeeeee, Nothing
RemoveHandler eeeeeee, Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31044: Events declared with an 'As' clause must have a delegate type.
Custom Event eeeeeee As Object
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventAccessorsArgModifiers()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventAccessorsArgModifiers">
<file name="a.vb">
Option Strict Off
Imports System
Module Program
Delegate Sub del1(ByRef x As Integer)
Custom Event eeeeeee As del1
AddHandler(ParamArray value() As del1)
End AddHandler
RemoveHandler(Optional ByRef value As del1 = Nothing)
End RemoveHandler
RaiseEvent(Optional ByRef x As Integer = 1)
End RaiseEvent
End Event
Sub Main(args As String())
AddHandler eeeeeee, Nothing
RemoveHandler eeeeeee, Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31136: 'AddHandler' and 'RemoveHandler' method parameters must have the same delegate type as the containing event.
AddHandler(ParamArray value() As del1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'ParamArray'.
AddHandler(ParamArray value() As del1)
~~~~~~~~~~
BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'.
RemoveHandler(Optional ByRef value As del1 = Nothing)
~~~~~~~~
BC31134: 'AddHandler' and 'RemoveHandler' method parameters cannot be declared 'ByRef'.
RemoveHandler(Optional ByRef value As del1 = Nothing)
~~~~~
BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'.
RaiseEvent(Optional ByRef x As Integer = 1)
~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventRaiseRelaxed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventRaiseRelaxed1">
<file name="a.vb">
Option Strict On
Imports System
Module Program
Delegate Sub del1(x As Integer)
Custom Event eeeeeee1 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Short)
' error
End RaiseEvent
End Event
Custom Event eeeeeee2 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Integer, y As Integer)
' error
End RaiseEvent
End Event
Custom Event eeeeeee3 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Long)
'valid
End RaiseEvent
End Event
Custom Event eeeeeee4 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent()
' valid
End RaiseEvent
End Event
Sub Main(args As String())
AddHandler eeeeeee1, Nothing
RemoveHandler eeeeeee1, Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31137: 'RaiseEvent' method must have the same signature as the containing event's delegate type 'Program.del1'.
RaiseEvent(x As Short)
~~~~~~~~~~~~~~~~~~~~~~
BC31137: 'RaiseEvent' method must have the same signature as the containing event's delegate type 'Program.del1'.
RaiseEvent(x As Integer, y As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub CustomEventRaiseRelaxed2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CustomEventRaiseRelaxed3">
<file name="a.vb">
Option Strict Off
Imports System
Module Program
Delegate Sub del1(x As Integer)
Custom Event eeeeeee1 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Short)
' valid
End RaiseEvent
End Event
Custom Event eeeeeee2 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Integer, y As Integer)
' error
End RaiseEvent
End Event
Custom Event eeeeeee3 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent(x As Long)
'valid
End RaiseEvent
End Event
Custom Event eeeeeee4 As del1
AddHandler(value As del1)
End AddHandler
RemoveHandler(value As del1)
End RemoveHandler
RaiseEvent()
' valid
End RaiseEvent
End Event
Sub Main(args As String())
AddHandler eeeeeee1, Nothing
RemoveHandler eeeeeee1, Nothing
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC31137: 'RaiseEvent' method must have the same signature as the containing event's delegate type 'Program.del1'.
RaiseEvent(x As Integer, y As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub RaiseEventNotEvent()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RaiseEventNotEvent">
<file name="a.vb">
Imports System
Module Program
Delegate Sub del1()
Dim o As del1
Sub Main(args As String())
RaiseEvent o()
RaiseEvent Blah
RaiseEvent
RaiseEvent RaiseEvent
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30676: 'o' is not an event of 'Program'.
RaiseEvent o()
~
BC30451: 'Blah' is not declared. It may be inaccessible due to its protection level.
RaiseEvent Blah
~~~~
BC30203: Identifier expected.
RaiseEvent
~
BC30451: 'RaiseEvent' is not declared. It may be inaccessible due to its protection level.
RaiseEvent RaiseEvent
~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub RaiseEventInBase()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RaiseEventInBase">
<file name="a.vb">
Imports System
Module Program
Delegate Sub del1()
Dim o As del1
Sub Main(args As String())
End Sub
Class cls1
Public Shared Event EFieldLike As Action
Public Shared Custom Event ECustom As Action
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
Class cls2
Inherits cls1
Sub Test()
' valid as in Dev10
RaiseEvent EFieldLike()
' error
RaiseEvent E1()
End Sub
End Class
End Class
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30451: 'E1' is not declared. It may be inaccessible due to its protection level.
RaiseEvent E1()
~~
</errors>)
End Sub
<Fact()>
Public Sub RaiseEventStrictOn()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RaiseEventStrictOn">
<file name="a.vb">
Option Strict On
Imports System
Module Program
Delegate Sub del1(ByRef x As Object)
Event E As del1
Sub Main()
Dim v As String
RaiseEvent E(v)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC32029: Option Strict On disallows narrowing from type 'Object' to type 'String' in copying the value of 'ByRef' parameter 'x' back to the matching argument.
RaiseEvent E(v)
~
BC42104: Variable 'v' is used before it has been assigned a value. A null reference exception could result at runtime.
RaiseEvent E(v)
~
</errors>)
End Sub
<Fact()>
Public Sub RaiseEventStrictOff()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RaiseEventStrictOff">
<file name="a.vb">
Option Strict Off
Imports System
Module Program
Delegate Sub del1(ByRef x As Object)
Event E As del1
Sub Main()
Dim v As String
RaiseEvent E(v)
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC42030: Variable 'v' is passed by reference before it has been assigned a value. A null reference exception could result at runtime.
RaiseEvent E(v)
~
</errors>)
End Sub
<Fact()>
Public Sub ImplementNotValidDelegate()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplementDifferentDelegate">
<file name="a.vb">
Imports System
Module Program
Interface i1
Delegate Sub del1()
Delegate Sub del2(x As Integer)
Delegate Sub del3(x() As Integer)
Event E1 As del1
Event E2 As del2
Event E3 As del3
End Interface
Class cls1
Implements i1
Private Event E1 As Integer Implements i1.E1
Private Event E2 As Func(Of Integer) Implements i1.E2
Private Event E3 As Implements i1.E3
Private Event E4(ParamArray x() As Integer) Implements i1.E3
End Class
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30149: Class 'cls1' must implement 'Event E2 As Program.i1.del2' for interface 'i1'.
Implements i1
~~
BC31044: Events declared with an 'As' clause must have a delegate type.
Private Event E1 As Integer Implements i1.E1
~~~~~~~
BC31423: Event 'Private Event E1 As Integer' cannot implement event 'Event E1 As Program.i1.del1' on interface 'Program.i1' because their delegate types 'Integer' and 'Program.i1.del1' do not match.
Private Event E1 As Integer Implements i1.E1
~~~~~
BC31084: Events cannot be declared with a delegate type that has a return type.
Private Event E2 As Func(Of Integer) Implements i1.E2
~~~~~~~~~~~~~~~~
BC30401: 'E2' cannot implement 'E2' because there is no matching event on interface 'i1'.
Private Event E2 As Func(Of Integer) Implements i1.E2
~~~~~
BC30180: Keyword does not name a type.
Private Event E3 As Implements i1.E3
~
BC31044: Events declared with an 'As' clause must have a delegate type.
Private Event E3 As Implements i1.E3
~
BC33009: 'Event' parameters cannot be declared 'ParamArray'.
Private Event E4(ParamArray x() As Integer) Implements i1.E3
~~~~~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub ImplementDifferentDelegate()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplementDifferentDelegate">
<file name="a.vb">
Imports System
Module Program
Interface i1
Delegate Sub del1()
Delegate Sub del2(x As Integer)
Delegate Sub del3(ByRef x As Integer)
Event E1 As del1
Event E2 As del2
Event E3 As del3
End Interface
Class cls1
Implements i1
Private Event E1 As action Implements i1.E1
Private Event E2 As action Implements i1.E2
Private Event E3 As i1.del2 Implements i1.E3
End Class
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30149: Class 'cls1' must implement 'Event E2 As Program.i1.del2' for interface 'i1'.
Implements i1
~~
BC30149: Class 'cls1' must implement 'Event E3 As Program.i1.del3' for interface 'i1'.
Implements i1
~~
BC31423: Event 'Private Event E1 As Action' cannot implement event 'Event E1 As Program.i1.del1' on interface 'Program.i1' because their delegate types 'Action' and 'Program.i1.del1' do not match.
Private Event E1 As action Implements i1.E1
~~~~~
BC30401: 'E2' cannot implement 'E2' because there is no matching event on interface 'i1'.
Private Event E2 As action Implements i1.E2
~~~~~
BC30401: 'E3' cannot implement 'E3' because there is no matching event on interface 'i1'.
Private Event E3 As i1.del2 Implements i1.E3
~~~~~
</errors>)
End Sub
<Fact()>
Public Sub ImplementDifferentSignature()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplementDifferentDelegate">
<file name="a.vb">
Imports System
Module Program
Interface i1
Delegate Sub del1()
Delegate Sub del2(x As Integer)
Delegate Sub del3(ByRef x As Integer)
Event E1 As del1
Event E2 As del2
Event E3 As del3
End Interface
Class cls1
Implements i1
Private Event E1(x As Integer) Implements i1.E1
Private Event E2() Implements i1.E2
Private Event E3(x As Integer) Implements i1.E3
End Class
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30149: Class 'cls1' must implement 'Event E1 As Program.i1.del1' for interface 'i1'.
Implements i1
~~
BC30149: Class 'cls1' must implement 'Event E2 As Program.i1.del2' for interface 'i1'.
Implements i1
~~
BC30149: Class 'cls1' must implement 'Event E3 As Program.i1.del3' for interface 'i1'.
Implements i1
~~
BC30401: 'E1' cannot implement 'E1' because there is no matching event on interface 'i1'.
Private Event E1(x As Integer) Implements i1.E1
~~~~~
BC30401: 'E2' cannot implement 'E2' because there is no matching event on interface 'i1'.
Private Event E2() Implements i1.E2
~~~~~
BC30401: 'E3' cannot implement 'E3' because there is no matching event on interface 'i1'.
Private Event E3(x As Integer) Implements i1.E3
~~~~~
</errors>)
End Sub
<Fact()>
Public Sub ImplementConflicting()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplementConflicting">
<file name="a.vb">
Imports System
Module Program
Interface i1
Delegate Sub del1()
Delegate Sub del2(x As Integer)
Event E1 As del1
Event E2 As del2
Event E1a As del2
Event E2a As Action(Of Integer)
End Interface
Class cls1
Implements i1
Private Event E1 As i1.del1 Implements i1.E1, i1.E2
Private Event E2(x As Integer) Implements i1.E1a, i1.E2a
End Class
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30149: Class 'cls1' must implement 'Event E2 As Program.i1.del2' for interface 'i1'.
Implements i1
~~
BC30401: 'E1' cannot implement 'E2' because there is no matching event on interface 'i1'.
Private Event E1 As i1.del1 Implements i1.E1, i1.E2
~~~~~
BC31407: Event 'Private Event E2 As Program.i1.del2' cannot implement event 'Program.i1.Event E2a As Action(Of Integer)' because its delegate type does not match the delegate type of another event implemented by 'Private Event E2 As Program.i1.del2'.
Private Event E2(x As Integer) Implements i1.E1a, i1.E2a
~~~~~~
</errors>)
End Sub
<Fact()>
Public Sub ImplementTwice()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplementTwice">
<file name="a.vb">
Imports System
Module Program
Interface i1
Delegate Sub del1()
Delegate Sub del2(x As Integer)
Event E1 As del1
Event E2 As del2
End Interface
Class cls1
Implements i1
Private Event E1 As i1.del1 Implements i1.E1, i1.E1
Private Event E2() Implements i1.E1
End Class
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30149: Class 'cls1' must implement 'Event E2 As Program.i1.del2' for interface 'i1'.
Implements i1
~~
BC30583: 'i1.E1' cannot be implemented more than once.
Private Event E1 As i1.del1 Implements i1.E1, i1.E1
~~~~~
BC30583: 'i1.E1' cannot be implemented more than once.
Private Event E2() Implements i1.E1
~~~~~
</errors>)
End Sub
<Fact()>
Public Sub ImplementIncomplete()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImplementConflicting">
<file name="a.vb">
Imports System
Module Program
Interface i1
Delegate Sub del1()
Delegate Sub del2(x As Integer)
Event E1 As del1
Event E2 As del2
End Interface
Class cls1
Implements i1
Private Event E1 As i1.del1 Implements
Private Event E2() Implements i1
Private Event E3 Implements i1.
Private Event E4 Implements i1.Blah
End Class
Sub Main()
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors>
BC30149: Class 'cls1' must implement 'Event E1 As Program.i1.del1' for interface 'i1'.
Implements i1
~~
BC30149: Class 'cls1' must implement 'Event E2 As Program.i1.del2' for interface 'i1'.
Implements i1
~~
BC30203: Identifier expected.
Private Event E1 As i1.del1 Implements
~
BC30287: '.' expected.
Private Event E1 As i1.del1 Implements
~
BC30287: '.' expected.
Private Event E2() Implements i1
~~
BC30401: 'E2' cannot implement '' because there is no matching event on interface 'i1'.
Private Event E2() Implements i1
~~
BC30401: 'E3' cannot implement '' because there is no matching event on interface 'i1'.
Private Event E3 Implements i1.
~~~
BC30203: Identifier expected.
Private Event E3 Implements i1.
~
BC30401: 'E4' cannot implement 'Blah' because there is no matching event on interface 'i1'.
Private Event E4 Implements i1.Blah
~~~~~~~
</errors>)
End Sub
<WorkItem(543095, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543095")>
<Fact()>
Public Sub SelectCase_CaseStatementError()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SelectCase_CaseStatementError">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Dim x As New myclass1
Select x
Ca
End Sub
End Module
Structure myclass1
Implements IDisposable
Public Sub dispose() Implements IDisposable.Dispose
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30095: 'Select Case' must end with a matching 'End Select'.
Select x
~~~~~~~~
BC30058: Statements and labels are not valid between 'Select Case' and first 'Case'.
Ca
~~
BC30451: 'Ca' is not declared. It may be inaccessible due to its protection level.
Ca
~~
</expected>)
End Sub
<WorkItem(543095, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543095")>
<Fact()>
Public Sub SelectCase_CaseStatementError_02()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SelectCase_CaseStatementError">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Dim x As New myclass1
Select x
Case
End Select
Select x
Case y
End Select
End Sub
End Module
Structure myclass1
Implements IDisposable
Public Sub dispose() Implements IDisposable.Dispose
End Sub
End Structure
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30201: Expression expected.
Case
~
BC30451: 'y' is not declared. It may be inaccessible due to its protection level.
Case y
~
</expected>)
End Sub
<WorkItem(543095, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543095")>
<Fact()>
Public Sub SelectCase()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SelectCase">
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
Dim x As New myclass1
Select x
ca
End Select
End Sub
End Module
Structure myclass1
Implements IDisposable
Public Sub dispose() Implements IDisposable.Dispose
End Sub
End Structure
</file>
</compilation>)
VerifyDiagnostics(compilation, Diagnostic(ERRID.ERR_ExpectedCase, "ca"),
Diagnostic(ERRID.ERR_NameNotDeclared1, "ca").WithArguments("ca"))
End Sub
<WorkItem(543300, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543300")>
<Fact()>
Public Sub BoundConversion()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BoundConversion">
<file name="a.vb">
Imports System.Linq
Class C1
sharSub MAIN()
Dim lists = foo()
lists.Where(Function(ByVal item)
SyncLock item
End SyncLock
Return item.ToString() = ""
End Function).ToList()
End Sub
Shared Function foo() As List(Of myattribute1)
Return Nothing
End Function
End Class
</file>
</compilation>)
VerifyDiagnostics(compilation, Diagnostic(ERRID.ERR_ExpectedSpecifier, "MAIN()"),
Diagnostic(ERRID.ERR_ExpectedDeclaration, "sharSub"),
Diagnostic(ERRID.ERR_ExpectedDeclaration, "lists"),
Diagnostic(ERRID.ERR_ExecutableAsDeclaration, "SyncLock item"),
Diagnostic(ERRID.ERR_EndSyncLockNoSyncLock, "End SyncLock"),
Diagnostic(ERRID.ERR_ExecutableAsDeclaration, "Return item.ToString() = """""),
Diagnostic(ERRID.ERR_InvalidEndFunction, "End Function"),
Diagnostic(ERRID.ERR_ExpectedEOS, ")"),
Diagnostic(ERRID.ERR_InvalidEndSub, "End Sub"),
Diagnostic(ERRID.WRN_UndefinedOrEmptyNamespaceOrClass1, "System.Linq").WithArguments("System.Linq"),
Diagnostic(ERRID.ERR_UndefinedType1, "myattribute1").WithArguments("myattribute1"),
Diagnostic(ERRID.ERR_UndefinedType1, "List(Of myattribute1)").WithArguments("List"),
Diagnostic(ERRID.HDN_UnusedImportStatement, "Imports System.Linq"))
End Sub
<WorkItem(543300, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543300")>
<Fact()>
Public Sub BoundConversion_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="BoundConversion">
<file name="a.vb">
"".Where(Function(item)
Return lab1
End Function:
Return item.ToString() = ""
End Function).ToList()
End Sub
</file>
</compilation>, {Net40.References.SystemCore})
VerifyDiagnostics(compilation, Diagnostic(ERRID.ERR_Syntax, """"""),
Diagnostic(ERRID.ERR_ExecutableAsDeclaration, "Return lab1"),
Diagnostic(ERRID.ERR_InvalidEndFunction, "End Function"),
Diagnostic(ERRID.ERR_ExecutableAsDeclaration, "Return item.ToString() = """""),
Diagnostic(ERRID.ERR_InvalidEndFunction, "End Function"),
Diagnostic(ERRID.ERR_ExpectedEOS, ")"),
Diagnostic(ERRID.ERR_InvalidEndSub, "End Sub"))
End Sub
<WorkItem(543319, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543319")>
<Fact()>
Public Sub CaseOnlyAppearInSelect()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M1
Sub Main()
Select ""
Case "a"
If (True)
Case "b"
GoTo lab1
End If
End Select
lab1:
End Sub
End Module
]]></file>
</compilation>)
VerifyDiagnostics(compilation, Diagnostic(ERRID.ERR_CaseNoSelect, "Case ""b"""))
End Sub
<WorkItem(543319, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543319")>
<Fact()>
Public Sub CaseOnlyAppearInSelect_1()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Class Test
Public Shared Sub Main()
Select Case ""
Case "c"
Try
Case "a"
Catch ex As Exception
Case "b"
End Try
End Select
End Sub
End Class
]]></file>
</compilation>)
VerifyDiagnostics(compilation, Diagnostic(ERRID.ERR_CaseNoSelect, "Case ""a"""),
Diagnostic(ERRID.ERR_CaseNoSelect, "Case ""b"""))
End Sub
<WorkItem(543333, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543333")>
<Fact()>
Public Sub BindReturn()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Class Program
Shared Main()
Return Nothing
End sub
End Class
]]></file>
</compilation>)
VerifyDiagnostics(compilation, Diagnostic(ERRID.ERR_ExecutableAsDeclaration, "Return Nothing"),
Diagnostic(ERRID.ERR_InvalidEndSub, "End sub"))
End Sub
<WorkItem(543746, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543746")>
<Fact()>
Public Sub LocalConstAssignedToSelf()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module Program
Sub Main()
Const X = X
End Sub
End Module
]]></file>
</compilation>)
VerifyDiagnostics(compilation,
Diagnostic(ERRID.ERR_CircularEvaluation1, "X").WithArguments("X"),
Diagnostic(ERRID.WRN_DefAsgUseNullRef, "X").WithArguments("X"))
End Sub
<WorkItem(543746, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543746")>
<Fact>
Public Sub LocalConstCycle()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module Program
Sub Main()
Const Y = Z
Const Z = Y
Const a = c
Const b = a
Const c = b
End Sub
End Module
]]></file>
</compilation>)
VerifyDiagnostics(compilation,
Diagnostic(ERRID.ERR_UseOfLocalBeforeDeclaration1, "Z").WithArguments("Z"),
Diagnostic(ERRID.ERR_UseOfLocalBeforeDeclaration1, "c").WithArguments("c"))
End Sub
<WorkItem(543823, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543823")>
<Fact()>
Public Sub LocalConstCycle02()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module Program
Sub Main()
Const X = 3 + Z
Const Y = 2 + X
Const Z = 1 + Y
End Sub
End Module
]]></file>
</compilation>)
' Dev10: Diagnostic(ERRID.ERR_NameNotDeclared1, "Z").WithArguments("Z"))
VerifyDiagnostics(compilation,
Diagnostic(ERRID.ERR_UseOfLocalBeforeDeclaration1, "Z").WithArguments("Z"),
Diagnostic(ERRID.ERR_RequiredConstConversion2, "2").WithArguments("Integer", "Object"),
Diagnostic(ERRID.ERR_RequiredConstConversion2, "1").WithArguments("Integer", "Object"))
End Sub
<WorkItem(543821, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543821")>
<Fact()>
Public Sub LocalConstCycle03()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module Program
Sub Main()
Const X = Y
Const Y = Y + X
Const Z = Y + Z
End Sub
End Module
]]></file>
</compilation>)
VerifyDiagnostics(compilation,
Diagnostic(ERRID.ERR_UseOfLocalBeforeDeclaration1, "Y").WithArguments("Y"),
Diagnostic(ERRID.ERR_CircularEvaluation1, "Y").WithArguments("Y"),
Diagnostic(ERRID.ERR_CircularEvaluation1, "Z").WithArguments("Z"),
Diagnostic(ERRID.WRN_DefAsgUseNullRef, "Y").WithArguments("Y"),
Diagnostic(ERRID.WRN_DefAsgUseNullRef, "Z").WithArguments("Z"))
End Sub
<WorkItem(543755, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543755")>
<Fact()>
Public Sub BracketedIdentifierMissingEndBracket()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module Program
Sub Main()
Dim [foo as integer = 23 : Dim [goo As Char = "d"c
End Sub
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30203: Identifier expected.
Dim [foo as integer = 23 : Dim [goo As Char = "d"c
~
BC30034: Bracketed identifier is missing closing ']'.
Dim [foo as integer = 23 : Dim [goo As Char = "d"c
~~~~
BC30203: Identifier expected.
Dim [foo as integer = 23 : Dim [goo As Char = "d"c
~
BC30034: Bracketed identifier is missing closing ']'.
Dim [foo as integer = 23 : Dim [goo As Char = "d"c
~~~~
</expected>)
End Sub
<Fact(), WorkItem(536245, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/536245"), WorkItem(543652, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543652")>
Public Sub BC30192ERR_ParamArrayMustBeLast()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Class C1
Sub foo(byval Paramarray pArr1() as Integer, byval paramarray pArr2 as integer)
End Sub
End Class
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30192: End of parameter list expected. Cannot define parameters after a paramarray parameter.
Sub foo(byval Paramarray pArr1() as Integer, byval paramarray pArr2 as integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30050: ParamArray parameter must be an array.
Sub foo(byval Paramarray pArr1() as Integer, byval paramarray pArr2 as integer)
~~~~~
</expected>)
End Sub
<WorkItem(544501, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544501")>
<Fact()>
Public Sub TestCombinePrivateAndNotOverridable()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module Program
Sub Main(args As String())
c1.Bar()
End Sub
End Module
Class c1
Partial Private Sub foo(ByRef x() As Integer)
End Sub
End Class
</file>
<file name="b.vb">
Imports System
Partial Class c1
Private NotOverridable Sub Foo(ByRef x() As Integer)
Console.Write("Success")
End Sub
Shared Sub Bar()
Dim x = New c1()
x.foo({1})
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC31408: 'Private' and 'NotOverridable' cannot be combined.
Private NotOverridable Sub Foo(ByRef x() As Integer)
~~~~~~~~~~~~~~
</expected>)
End Sub
<WorkItem(546098, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546098")>
<Fact()>
Public Sub InstanceMemberOfStructInsideSharedLambda()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Imports System
Module Test
Public Structure S1
Dim a As Integer
Public Shared c As Action(Of Integer) = Sub(c)
a = 2
End Sub
End Structure
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
a = 2
~
</expected>)
End Sub
<WorkItem(546053, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546053")>
<Fact()>
Public Sub EventHandlerBindingError()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module Test
Sub lbHnd()
End Sub
Dim oc As Object
Sub Main()
AddHandler oc.evt, AddressOf lbHnd
End Sub
End Module
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30676: 'evt' is not an event of 'Object'.
AddHandler oc.evt, AddressOf lbHnd
~~~
</expected>)
End Sub
<WorkItem(530912, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530912")>
<Fact()>
Public Sub Bug_17183_LateBinding_Object()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Class classes
Public Property P As Object
Get
Return Nothing
End Get
Set
End Set
End Property
End Class
Module Module1
Sub Main()
Dim h As classes = Nothing
Dim x = h.P(0)
End Sub
End Module
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30574: Option Strict On disallows late binding.
Dim x = h.P(0)
~
</expected>)
End Sub
<WorkItem(530912, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530912")>
<Fact()>
Public Sub Bug_17183_LateBinding_Array()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Imports System
Class classes
Public Property P As Array
Get
Return Nothing
End Get
Set
End Set
End Property
End Class
Module Module1
Sub Main()
Dim h As classes = Nothing
Dim x = h.P(0)
End Sub
End Module
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30574: Option Strict On disallows late binding.
Dim x = h.P(0)
~
</expected>)
End Sub
<WorkItem(530912, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530912")>
<Fact()>
Public Sub Bug_17183_LateBinding_COM()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Imports System.Runtime.InteropServices
<TypeLibTypeAttribute(TypeLibTypeFlags.FDispatchable)>
Interface inter
Default Property sss(x As Integer) As Integer
End Interface
Class classes
Public Property P As inter
Get
Return Nothing
End Get
Set
End Set
End Property
End Class
Module Module1
Sub Main()
Dim h As classes = Nothing
Dim x = h.P(0) 'No Late Binding here
Dim y = h.P.Member 'Late Binding here - error
End Sub
End Module
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30574: Option Strict On disallows late binding.
Dim y = h.P.Member 'Late Binding here - error
~~~~~~~~~~
</expected>)
End Sub
<WorkItem(531400, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531400")>
<Fact()>
Public Sub Bug18070()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Module Program
Event E()
Sub Main()
End Sub
Sub Main1()
RaiseEvent E() ' 1
Static E As Integer = 1
AddHandler E, AddressOf Main ' 1
RemoveHandler E, AddressOf Main ' 1
End Sub
Sub Main2()
RaiseEvent E() ' 2
Dim E As Integer = 1
AddHandler E, AddressOf Main ' 2
RemoveHandler E, AddressOf Main ' 2
End Sub
Sub Main3(E As Integer)
RaiseEvent E() ' 3
AddHandler E, AddressOf Main ' 3
RemoveHandler E, AddressOf Main ' 3
End Sub
End Module
</file>
</compilation>)
CompileAndVerify(compilation)
End Sub
<Fact()>
Public Sub Bug547318()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
End Set
End Property
End Class
Font)
_FONT = Value
Set(ByVal Value As System.Drawing. 'BIND:"Drawing"
</file>
</compilation>)
Dim node As ExpressionSyntax = FindBindingText(Of ExpressionSyntax)(compilation, "a.vb")
Dim tree As SyntaxTree = (From t In compilation.SyntaxTrees Where t.FilePath = "a.vb").Single()
Dim semanticModel = compilation.GetSemanticModel(tree)
Dim bindInfo1 As SemanticInfoSummary = semanticModel.GetSemanticInfoSummary(DirectCast(node, ExpressionSyntax))
End Sub
<WorkItem(566606, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/566606")>
<Fact()>
Public Sub BrokenFor()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
</file>
</compilation>)
Dim text = <![CDATA[
Imports System
Module Program
Sub Main(args As String())
For {|stmt1:$$i|} = 1 To 20
Dim q As Action = Sub()
Console.WriteLine({|stmt1:i|})
End Sub
Next
End Sub
End Module
]]>
compilation = compilation.AddSyntaxTrees(Parse(text))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC30035: Syntax error.
For {|stmt1:$$i|} = 1 To 20
~
BC30035: Syntax error.
For {|stmt1:$$i|} = 1 To 20
~
BC30201: Expression expected.
For {|stmt1:$$i|} = 1 To 20
~
BC30249: '=' expected.
For {|stmt1:$$i|} = 1 To 20
~
BC30370: '}' expected.
For {|stmt1:$$i|} = 1 To 20
~
BC30037: Character is not valid.
For {|stmt1:$$i|} = 1 To 20
~
BC30037: Character is not valid.
For {|stmt1:$$i|} = 1 To 20
~
BC30037: Character is not valid.
For {|stmt1:$$i|} = 1 To 20
~
BC30037: Character is not valid.
For {|stmt1:$$i|} = 1 To 20
~
BC30198: ')' expected.
Console.WriteLine({|stmt1:i|})
~
BC30201: Expression expected.
Console.WriteLine({|stmt1:i|})
~
BC30370: '}' expected.
Console.WriteLine({|stmt1:i|})
~
BC30037: Character is not valid.
Console.WriteLine({|stmt1:i|})
~
BC30451: 'i' is not declared. It may be inaccessible due to its protection level.
Console.WriteLine({|stmt1:i|})
~
BC30037: Character is not valid.
Console.WriteLine({|stmt1:i|})
~
</expected>)
End Sub
<Fact>
Public Sub ConflictsWithTypesInVBCore_EmbeddedTypes()
Dim source =
<compilation>
<file><![CDATA[
Module Module1
Sub Main()
End Sub
End Module
'Partial Class on Type in Microsoft.VisualBasic
Namespace Microsoft.VisualBasic
Partial Class HideModuleNameAttribute
Inherits Attribute
Public Function ABC() As String
Return "Success"
End Function
Public Overrides ReadOnly Property TypeId As Object
Get
Return "TypeID"
End Get
End Property
End Class
End Namespace
]]>
</file>
</compilation>
Dim c = CompilationUtils.CreateEmptyCompilationWithReferences(source,
references:={MscorlibRef, SystemRef, SystemCoreRef},
options:=TestOptions.ReleaseDll.WithEmbedVbCoreRuntime(True)).VerifyDiagnostics(Diagnostic(ERRID.ERR_TypeClashesWithVbCoreType4, "HideModuleNameAttribute").WithArguments("class", "HideModuleNameAttribute", "class", "HideModuleNameAttribute"),
Diagnostic(ERRID.ERR_UndefinedType1, "Attribute").WithArguments("Attribute"),
Diagnostic(ERRID.ERR_OverrideNotNeeded3, "TypeId").WithArguments("property", "TypeId"))
End Sub
<Fact()>
Public Sub ERR_ExtensionMethodCannotBeLateBound_1()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Module Module1
Sub Main()
Dim x As New Test()
Dim y As Object = x
x.M(y)
End Sub
<System.Runtime.CompilerServices.Extension>
Sub M(this As Test, x As Double)
End Sub
End Module
Class Test
Sub M(x As Integer)
End Sub
Sub M(x As UInteger)
End Sub
End Class
]]></file>
</compilation>, {Net40.References.SystemCore}, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.Custom))
AssertTheseDiagnostics(compilation,
<expected>
BC36908: Late-bound extension methods are not supported.
x.M(y)
~
</expected>)
End Sub
<Fact()>
Public Sub ERR_ExtensionMethodCannotBeLateBound_2()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Module Module1
Sub Main()
Dim x As New Test()
Dim y As Object = x
x.M(y)
End Sub
<System.Runtime.CompilerServices.Extension>
Sub M(this As Test, x As Double, y as String)
End Sub
End Module
Class Test
Sub M(x As Integer)
End Sub
Sub M(x As UInteger)
End Sub
End Class
]]></file>
</compilation>, {Net40.References.SystemCore}, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.Custom))
AssertTheseDiagnostics(compilation,
<expected>
BC36908: Late-bound extension methods are not supported.
x.M(y)
~
</expected>)
End Sub
<Fact()>
Public Sub ERR_ExtensionMethodCannotBeLateBound_3()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Module Module1
Sub Main()
Dim x As New Test()
Dim y As Object = x
x.M(y)
End Sub
<System.Runtime.CompilerServices.Extension>
Sub M(this As Test, x As Double)
End Sub
End Module
Class Test
Sub M(x As UInteger)
End Sub
End Class
]]></file>
</compilation>, {Net40.References.SystemCore}, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.Custom))
AssertTheseDiagnostics(compilation,
<expected>
BC42016: Implicit conversion from 'Object' to 'UInteger'.
x.M(y)
~
</expected>)
CompileAndVerify(compilation)
End Sub
<Fact()>
Public Sub ERR_ExtensionMethodCannotBeLateBound_4()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Linq.Expressions
Imports System.Runtime.CompilerServices
Imports System.Collections.Generic
Module Module1
Sub Main()
Dim c1 As New C1()
Dim x As Object = New List(Of Integer)
Try
c1.fun(x)
Catch e As Exception
Console.WriteLine(e)
End Try
End Sub
<Extension>
Sub fun(Of X)(this As C1, ByVal a As Queue(Of X))
End Sub
End Module
Class C1
Sub fun(Of X)(ByVal a As List(Of X))
End Sub
Sub fun(Of X)(ByVal a As Stack(Of X))
End Sub
End Class
]]></file>
</compilation>, {Net40.References.SystemCore}, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.Custom))
AssertTheseDiagnostics(compilation,
<expected>
BC36908: Late-bound extension methods are not supported.
c1.fun(x)
~~~
</expected>)
End Sub
<Fact()>
Public Sub ERR_ExtensionMethodCannotBeLateBound_5()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Linq.Expressions
Imports System.Runtime.CompilerServices
Imports System.Collections.Generic
Module Module1
Sub Main()
Dim c1 As New C1()
Dim x As Object = New List(Of Integer)
Try
c1.fun(x)
Catch e As Exception
Console.WriteLine(e)
End Try
End Sub
<Extension>
Sub fun(Of X)(this As C1, ByVal a As Queue(Of X))
End Sub
End Module
Class C1
Sub fun(Of X)(ByVal a As List(Of X))
End Sub
End Class
]]></file>
</compilation>, {Net40.References.SystemCore}, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.Custom))
AssertTheseDiagnostics(compilation,
<expected>
BC36908: Late-bound extension methods are not supported.
c1.fun(x)
~~~
</expected>)
End Sub
<WorkItem(573728, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/573728")>
<Fact()>
Public Sub Bug573728()
Dim compilation =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Delegate Sub D(i As Integer)
Module M
Sub M(o As D)
o()
o(1, 2)
End Sub
End Module
]]></file>
</compilation>, TestOptions.ReleaseDll)
AssertTheseDiagnostics(compilation,
<expected>
BC30455: Argument not specified for parameter 'i' of 'D'.
o()
~
BC30057: Too many arguments to 'D'.
o(1, 2)
~
</expected>)
End Sub
<Fact(), WorkItem(792754, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/792754")>
Public Sub NameClashAcrossFiles()
Dim comp =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M
Sub Main()
End Sub
Private Test2 As Settings
End Module
]]></file>
<file name="b.vb"><![CDATA[
Module M ' b.vb
Private ReadOnly TOOL_OUTPUT_FILE_NAME As String = Settings.OutputFileName
Function Test() As Settings
return Nothing
End Function
End Module
]]></file>
</compilation>, TestOptions.ReleaseExe)
Dim allDiagnostics = comp.GetDiagnostics()
AssertTheseDiagnostics(allDiagnostics,
<expected><![CDATA[
BC30002: Type 'Settings' is not defined.
Private Test2 As Settings
~~~~~~~~
BC30179: module 'M' and module 'M' conflict in namespace '<Default>'.
Module M ' b.vb
~
BC30451: 'Settings' is not declared. It may be inaccessible due to its protection level.
Private ReadOnly TOOL_OUTPUT_FILE_NAME As String = Settings.OutputFileName
~~~~~~~~
BC30002: Type 'Settings' is not defined.
Function Test() As Settings
~~~~~~~~
]]></expected>)
Dim tree = comp.SyntaxTrees.Where(Function(t) t.FilePath.EndsWith("a.vb", StringComparison.Ordinal)).Single
Dim model = comp.GetSemanticModel(tree)
AssertTheseDiagnostics(model.GetDiagnostics(),
<expected><![CDATA[
BC30002: Type 'Settings' is not defined.
Private Test2 As Settings
~~~~~~~~
]]></expected>)
tree = comp.SyntaxTrees.Where(Function(t) t.FilePath.EndsWith("b.vb", StringComparison.Ordinal)).Single
model = comp.GetSemanticModel(tree)
AssertTheseDiagnostics(model.GetDiagnostics(),
<expected><![CDATA[
BC30179: module 'M' and module 'M' conflict in namespace '<Default>'.
Module M ' b.vb
~
BC30451: 'Settings' is not declared. It may be inaccessible due to its protection level.
Private ReadOnly TOOL_OUTPUT_FILE_NAME As String = Settings.OutputFileName
~~~~~~~~
BC30002: Type 'Settings' is not defined.
Function Test() As Settings
~~~~~~~~
]]></expected>)
End Sub
<Fact>
Public Sub BC42004WRN_RecursiveOperatorCall()
Dim comp =
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Friend Module RecAcc001mod
Class cls
Sub New()
End Sub
Shared Operator +(ByVal y As cls) As Object
Return +y
End Operator
Shared Operator -(ByVal x As cls, ByVal y As Object) As Object
Return x - y
End Operator
Public Shared Operator >>(ByVal x As cls, ByVal y As Integer) As Object
Return x >> y
End Operator
Public Shared Widening Operator CType(ByVal y As cls) As Integer
Return CType(y, Integer)
End Operator
End Class
End Module
]]></file>
</compilation>)
Dim allDiagnostics = comp.GetDiagnostics()
AssertTheseDiagnostics(allDiagnostics,
<expected><![CDATA[
BC42004: Expression recursively calls the containing Operator 'Public Shared Operator +(y As RecAcc001mod.cls) As Object'.
Return +y
~~
BC42004: Expression recursively calls the containing Operator 'Public Shared Operator -(x As RecAcc001mod.cls, y As Object) As Object'.
Return x - y
~~~~~
BC42004: Expression recursively calls the containing Operator 'Public Shared Operator >>(x As RecAcc001mod.cls, y As Integer) As Object'.
Return x >> y
~~~~~~
BC42004: Expression recursively calls the containing Operator 'Public Shared Widening Operator CType(y As RecAcc001mod.cls) As Integer'.
Return CType(y, Integer)
~
]]></expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_ReadonlyAutoProperties()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
Public Sub New()
'Check assignment of readonly auto property
Test = "Test"
End Sub
'Check readonly auto-properties
Public ReadOnly Property Test As String
End Class
Interface I1
ReadOnly Property Test1 As String
WriteOnly Property Test2 As String
Property Test3 As String
End Interface
MustInherit Class C1
MustOverride ReadOnly Property Test1 As String
MustOverride WriteOnly Property Test2 As String
MustOverride Property Test3 As String
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support readonly auto-implemented properties.
Public ReadOnly Property Test As String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic9))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 9.0 does not support auto-implemented properties.
Public ReadOnly Property Test As String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere01()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
Sub New()
#Region "Region in .ctor"
#End Region ' "Region in .ctor"
End Sub
Shared Sub New()
#Region "Region in .cctor"
#End Region ' "Region in .cctor"
End Sub
Public Sub ASub()
#Region "Region in a Sub"
#End Region ' "Region in a Sub"
End Sub
Public Function AFunc()
#Region "Region in a Func"
#End Region ' "Region in a Func"
End Function
Shared Operator +(x As TestClass, y As TestClass) As TestClass
#Region "Region in an operator"
#End Region ' "Region in an operator"
End Operator
Property P As Integer
Get
#Region "Region in a get"
#End Region ' "Region in a get"
End Get
Set(value As Integer)
#Region "Region in a set"
#End Region ' "Region in a set"
End Set
End Property
Custom Event E As System.Action
AddHandler(value As Action)
#Region "Region in an add"
#End Region ' "Region in an add"
End AddHandler
RemoveHandler(value As Action)
#Region "Region in a remove"
#End Region ' "Region in a remove"
End RemoveHandler
RaiseEvent()
#Region "Region in a raise"
#End Region ' "Region in a raise"
End RaiseEvent
End Event
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in .ctor"
~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in .ctor"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in .cctor"
~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in .cctor"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in a Sub"
~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in a Sub"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in a Func"
~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in a Func"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in an operator"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in an operator"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in a get"
~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in a get"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in a set"
~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in a set"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in an add"
~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in an add"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in a remove"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in a remove"
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region in a raise"
~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' "Region in a raise"
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere02()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
#Region "Region"
#End Region
Sub New()
End Sub
#Region "Region"
#End Region
Shared Sub New()
End Sub
#Region "Region"
#End Region
Public Sub ASub()
End Sub
#Region "Region"
#End Region
Public Function AFunc()
End Function
#Region "Region"
#End Region
Shared Operator +(x As TestClass, y As TestClass) As TestClass
End Operator
#Region "Region"
#End Region
Property P As Integer
#Region "Region"
#End Region
Get
End Get
#Region "Region"
#End Region
Set(value As Integer)
End Set
#Region "Region"
#End Region
End Property
#Region "Region"
#End Region
Custom Event E As System.Action
#Region "Region"
#End Region
AddHandler(value As Action)
End AddHandler
#Region "Region"
#End Region
RemoveHandler(value As Action)
End RemoveHandler
#Region "Region"
#End Region
RaiseEvent()
End RaiseEvent
#Region "Region"
#End Region
End Event
#Region "Region"
#End Region
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere03()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
#Region "Region"
Private f1 as Integer
#End Region
Sub New()
End Sub
#Region "Region"
Private f1 as Integer
#End Region
Shared Sub New()
End Sub
#Region "Region"
Private f1 as Integer
#End Region
Public Sub ASub()
End Sub
#Region "Region"
Private f1 as Integer
#End Region
Public Function AFunc()
End Function
#Region "Region"
Private f1 as Integer
#End Region
Shared Operator +(x As TestClass, y As TestClass) As TestClass
End Operator
#Region "Region"
Private f1 as Integer
#End Region
Property P As Integer
#Region "Region"
#End Region
Get
End Get
#Region "Region"
#End Region
Set(value As Integer)
End Set
#Region "Region"
#End Region
End Property
#Region "Region"
Private f1 as Integer
#End Region
Custom Event E As System.Action
#Region "Region"
#End Region
AddHandler(value As Action)
End AddHandler
#Region "Region"
#End Region
RemoveHandler(value As Action)
End RemoveHandler
#Region "Region"
#End Region
RaiseEvent()
End RaiseEvent
#Region "Region"
#End Region
End Event
#Region "Region"
Private f1 as Integer
#End Region
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere04()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
#Region "Region"
Sub New()
End Sub
#End Region
#Region "Region"
Shared Sub New()
End Sub
#End Region
#Region "Region"
Public Sub ASub()
End Sub
#End Region
#Region "Region"
Public Function AFunc()
End Function
#End Region
#Region "Region"
Shared Operator +(x As TestClass, y As TestClass) As TestClass
End Operator
#End Region
#Region "Region"
Property P As Integer
#Region "Region"
Get
End Get
#End Region
#Region "Region"
Set(value As Integer)
End Set
#End Region
End Property
#End Region
#Region "Region"
Custom Event E As System.Action
#Region "Region"
AddHandler(value As Action)
End AddHandler
#End Region
#Region "Region"
RemoveHandler(value As Action)
End RemoveHandler
#End Region
#Region "Region"
RaiseEvent()
End RaiseEvent
#End Region
End Event
#End Region
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere05()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
Property P As Integer
Get
#Region "Region"
#End Region
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC30481: 'Class' statement must end with a matching 'End Class'.
Class TestClass
~~~~~~~~~~~~~~~
BC30025: Property missing 'End Property'.
Property P As Integer
~~~~~~~~~~~~~~~~~~~~~
BC30631: 'Get' statement must end with a matching 'End Get'.
Get
~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere06()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
Property P As Integer
Get
End Get
#Region "Region"
#End Region</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC30481: 'Class' statement must end with a matching 'End Class'.
Class TestClass
~~~~~~~~~~~~~~~
BC30025: Property missing 'End Property'.
Property P As Integer
~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere07()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
Property P As Integer
Get
#Region "Region"
#End Region
End Property
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC30631: 'Get' statement must end with a matching 'End Get'.
Get
~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere08()
Dim source =
<compilation>
<file name="a.vb">
Class TestClass
Sub Test()
#if False
#Region "Region"
#End Region
#End if
End Sub
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere09()
Dim source =
<compilation>
<file name="a.vb">
#Region "Region 1"
#End Region ' 1
</file>
<file name="b.vb">
#Region "Region 2"
</file>
<file name="c.vb">
#End Region ' 3
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region 2"
~~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 3
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere10()
Dim source =
<compilation>
<file name="a.vb">
Namespace NS1
#Region "Region1"
#End Region ' 1
End Namespace
#Region "Region2"
Namespace NS2
#End Region ' 2
End Namespace
Namespace NS3
#Region "Region3"
End Namespace
#End Region ' 3
Namespace NS4
#Region "Region4"
End Namespace
Namespace NS5
#End Region ' 4
End Namespace
#Region "Region5"
Namespace NS6
End Namespace
#End Region ' 5
</file>
<file name="b.vb">
Namespace NS7
#Region "Region6"
End Namespace
</file>
<file name="c.vb">
Namespace NS8
#End Region ' 7
End Namespace
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere11()
Dim source =
<compilation>
<file name="a.vb">
Module NS1
#Region "Region1"
#End Region ' 1
End Module
#Region "Region2"
Module NS2
#End Region ' 2
End Module
Module NS3
#Region "Region3"
End Module
#End Region ' 3
Module NS4
#Region "Region4"
End Module
Module NS5
#End Region ' 4
End Module
#Region "Region5"
Module NS6
End Module
#End Region ' 5
</file>
<file name="b.vb">
Module NS7
#Region "Region6"
End Module
</file>
<file name="c.vb">
Module NS8
#End Region ' 7
End Module
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere12()
Dim source =
<compilation>
<file name="a.vb">
Class NS1
#Region "Region1"
#End Region ' 1
End Class
#Region "Region2"
Class NS2
#End Region ' 2
End Class
Class NS3
#Region "Region3"
End Class
#End Region ' 3
Class NS4
#Region "Region4"
End Class
Class NS5
#End Region ' 4
End Class
#Region "Region5"
Class NS6
End Class
#End Region ' 5
</file>
<file name="b.vb">
Class NS7
#Region "Region6"
End Class
</file>
<file name="c.vb">
Class NS8
#End Region ' 7
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere13()
Dim source =
<compilation>
<file name="a.vb">
Structure NS1
#Region "Region1"
#End Region ' 1
End Structure
#Region "Region2"
Structure NS2
#End Region ' 2
End Structure
Structure NS3
#Region "Region3"
End Structure
#End Region ' 3
Structure NS4
#Region "Region4"
End Structure
Structure NS5
#End Region ' 4
End Structure
#Region "Region5"
Structure NS6
End Structure
#End Region ' 5
</file>
<file name="b.vb">
Structure NS7
#Region "Region6"
End Structure
</file>
<file name="c.vb">
Structure NS8
#End Region ' 7
End Structure
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere14()
Dim source =
<compilation>
<file name="a.vb">
Interface NS1
#Region "Region1"
#End Region ' 1
End Interface
#Region "Region2"
Interface NS2
#End Region ' 2
End Interface
Interface NS3
#Region "Region3"
End Interface
#End Region ' 3
Interface NS4
#Region "Region4"
End Interface
Interface NS5
#End Region ' 4
End Interface
#Region "Region5"
Interface NS6
End Interface
#End Region ' 5
</file>
<file name="b.vb">
Interface NS7
#Region "Region6"
End Interface
</file>
<file name="c.vb">
Interface NS8
#End Region ' 7
End Interface
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere15()
Dim source =
<compilation>
<file name="a.vb">
Enum NS1
#Region "Region1"
#End Region ' 1
End Enum
#Region "Region2"
Enum NS2
#End Region ' 2
End Enum
Enum NS3
#Region "Region3"
End Enum
#End Region ' 3
Enum NS4
#Region "Region4"
End Enum
Enum NS5
#End Region ' 4
End Enum
#Region "Region5"
Enum NS6
End Enum
#End Region ' 5
</file>
<file name="b.vb">
Enum NS7
#Region "Region6"
End Enum
</file>
<file name="c.vb">
Enum NS8
#End Region ' 7
End Enum
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere16()
Dim source =
<compilation>
<file name="a.vb">
Class NS1
Property P1 As Integer
#Region "Region1"
#End Region ' 1
Get
End Get
Set
End Set
End Property
End Class
Class NS2
#Region "Region2"
Property P1 As Integer
#End Region ' 2
Get
End Get
Set
End Set
End Property
End Class
Class NS3
Property P1 As Integer
#Region "Region3"
Get
End Get
Set
End Set
End Property
#End Region ' 3
End Class
Class NS4
Property P1 As Integer
#Region "Region4"
Get
End Get
Set
End Set
End Property
Property P2 As Integer
#End Region ' 4
Get
End Get
Set
End Set
End Property
End Class
Class NS6
#Region "Region5"
Property P1 As Integer
Get
End Get
Set
End Set
End Property
#End Region ' 5
End Class
</file>
<file name="b.vb">
Class NS7
Property P1 As Integer
#Region "Region6"
Get
End Get
Set
End Set
End Property
End Class
</file>
<file name="c.vb">
Class NS8
Property P1 As Integer
#End Region ' 7
Get
End Get
Set
End Set
End Property
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere17()
Dim source =
<compilation>
<file name="a.vb">
Class NS1
Custom Event E1 As System.Action
#Region "Region1"
#End Region ' 1
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
End Class
Class NS2
#Region "Region2"
Custom Event E1 As System.Action
#End Region ' 2
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
End Class
Class NS3
Custom Event E1 As System.Action
#Region "Region3"
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
#End Region ' 3
End Class
Class NS4
Custom Event E1 As System.Action
#Region "Region4"
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
Custom Event E2 As System.Action
#End Region ' 4
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
End Class
Class NS6
#Region "Region5"
Custom Event E1 As System.Action
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
#End Region ' 5
End Class
</file>
<file name="b.vb">
Class NS7
Custom Event E1 As System.Action
#Region "Region6"
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
End Class
</file>
<file name="c.vb">
Class NS8
Custom Event E1 As System.Action
#End Region ' 7
AddHandler(value As Action)
End AddHandler
RemoveHandler(value As Action)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 3
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 4
~~~~~~~~~~~
BC30681: '#Region' statement must end with a matching '#End Region'.
#Region "Region6"
~~~~~~~~~~~~~~~~~
BC30680: '#End Region' must be preceded by a matching '#Region'.
#End Region ' 7
~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_RegionEveryWhere18()
Dim source =
<compilation>
<file name="a.vb">
#Region "Region1"
Class NS1
#Region "Region2"
Sub Test1()
#End Region ' 2
End Sub
End Class
#End Region ' 1
</file>
<file name="b.vb">
#Region "Region3"
Class NS2
Sub Test1()
#Region "Region4"
End Sub
#End Region ' 4
End Class
#End Region ' 3
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#End Region ' 2
~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support region directives within method bodies or regions crossing boundaries of declaration blocks.
#Region "Region4"
~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_CObjInAttributes()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Class TestClass1
<System.ComponentModel.DefaultValue(CObj("Test"))>
Public Property Test2 As String
'<System.ComponentModel.DefaultValue(CType("Test", Object))>
'Public Property Test3 As String
'<System.ComponentModel.DefaultValue(DirectCast("Test", Object))>
'Public Property Test4 As String
'<System.ComponentModel.DefaultValue(TryCast("Test", Object))>
'Public Property Test5 As String
End Class
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(source, {SystemRef}, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC36716: Visual Basic 12.0 does not support CObj in attribute arguments.
<System.ComponentModel.DefaultValue(CObj("Test"))>
~~~~
]]></expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_MultilineStrings()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Class TestClass
Dim test4 = "
This is
a muiltiline
string"
End Class
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support multiline string literals.
Dim test4 = "
~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_LineContinuationComments()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Class TestClass
Dim test5 As String = ""
Dim chars = From c In test5 'This is a test of comments in a linq statement
Let asc = Asc(c) 'VS2015 can handle this
Select asc
Sub Test()
Dim chars2 = From c In test5 'This is a test of comments in a linq statement
Let asc = Asc(c) 'VS2015 can handle this
Select asc
End Sub
End Class
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support line continuation comments.
Dim chars = From c In test5 'This is a test of comments in a linq statement
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support line continuation comments.
Dim chars2 = From c In test5 'This is a test of comments in a linq statement
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic9))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 9.0 does not support implicit line continuation.
Dim chars = From c In test5 'This is a test of comments in a linq statement
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 9.0 does not support implicit line continuation.
Dim chars2 = From c In test5 'This is a test of comments in a linq statement
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_TypeOfIsNot()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Class TestClass
Sub Test()
Dim test6 As String = ""
If TypeOf test6 IsNot System.String Then Console.WriteLine("That string isn't a string")
End Sub
End Class
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support TypeOf IsNot expression.
If TypeOf test6 IsNot System.String Then Console.WriteLine("That string isn't a string")
~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_YearFirstDateLiterals()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Class TestClass
Sub Test()
Dim d = #2015-08-23#
End Sub
End Class
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support year-first date literals.
Dim d = #2015-08-23#
~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_Pragma()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Class TestClass
Sub Test()
#Disable Warning BC42024
Dim test7 As String 'Should have no "unused variable" warning
#Enable Warning BC42024
End Sub
End Class
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support warning directives.
#Disable Warning BC42024
~~~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support warning directives.
#Enable Warning BC42024
~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_PartialModulesAndInterfaces()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Partial Module Module1
End Module
Partial Interface IFace
End Interface
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(source, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseParseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support partial modules.
Partial Module Module1
~~~~~~~~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support partial interfaces.
Partial Interface IFace
~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(5072, "https://github.com/dotnet/roslyn/issues/5072")>
Public Sub LangVersion_ImplementReadonlyWithReadwrite()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Interface IReadOnly
ReadOnly Property Test1 As String
WriteOnly Property Test2 As String
End Interface
Class ReadWrite
Implements IReadOnly
Public Property Test1 As String Implements IReadOnly.Test1
Public Property Test2 As String Implements IReadOnly.Test2
End Class
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(source, {SystemRef}, parseOptions:=VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersion.VisualBasic12))
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36716: Visual Basic 12.0 does not support implementing read-only or write-only property with read-write property.
Public Property Test1 As String Implements IReadOnly.Test1
~~~~~~~~~~~~~~~
BC36716: Visual Basic 12.0 does not support implementing read-only or write-only property with read-write property.
Public Property Test2 As String Implements IReadOnly.Test2
~~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact(), WorkItem(13617, "https://github.com/dotnet/roslyn/issues/13617")>
Public Sub MissingTypeArgumentInGenericExtensionMethod()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Runtime.CompilerServices
Module FooExtensions
<Extension()>
Public Function ExtensionMethod0(ByVal obj As Object)
Return GetType(Object)
End Function
<Extension()>
Public Function ExtensionMethod1(Of T)(ByVal obj As Object)
Return GetType(T)
End Function
<Extension()>
Public Function ExtensionMethod2(Of T1, T2)(ByVal obj As Object)
Return GetType(T1)
End Function
End Module
Module Module1
Sub Main()
Dim omittedArg0 As Type = "string literal".ExtensionMethod0(Of )()
Dim omittedArg1 As Type = "string literal".ExtensionMethod1(Of )()
Dim omittedArg2 As Type = "string literal".ExtensionMethod2(Of )()
Dim omittedArgFunc0 As Func(Of Object) = "string literal".ExtensionMethod0(Of )
Dim omittedArgFunc1 As Func(Of Object) = "string literal".ExtensionMethod1(Of )
Dim omittedArgFunc2 As Func(Of Object) = "string literal".ExtensionMethod2(Of )
Dim moreArgs0 As Type = "string literal".ExtensionMethod0(Of Integer)()
Dim moreArgs1 As Type = "string literal".ExtensionMethod1(Of Integer, Boolean)()
Dim moreArgs2 As Type = "string literal".ExtensionMethod2(Of Integer, Boolean, String)()
Dim lessArgs1 As Type = "string literal".ExtensionMethod1()
Dim lessArgs2 As Type = "string literal".ExtensionMethod2(Of Integer)()
Dim nonExistingMethod0 As Type = "string literal".ExtensionMethodNotFound0()
Dim nonExistingMethod1 As Type = "string literal".ExtensionMethodNotFound1(Of Integer)()
Dim nonExistingMethod2 As Type = "string literal".ExtensionMethodNotFound2(Of Integer, String)()
Dim exactArgs0 As Type = "string literal".ExtensionMethod0()
Dim exactArgs1 As Type = "string literal".ExtensionMethod1(Of Integer)()
Dim exactArgs2 As Type = "string literal".ExtensionMethod2(Of Integer, Boolean)()
End Sub
End Module
]]></file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(source, {Net40.References.SystemCore})
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC36907: Extension method 'Public Function ExtensionMethod0() As Object' defined in 'FooExtensions' is not generic (or has no free type parameters) and so cannot have type arguments.
Dim omittedArg0 As Type = "string literal".ExtensionMethod0(Of )()
~~~~~
BC30182: Type expected.
Dim omittedArg0 As Type = "string literal".ExtensionMethod0(Of )()
~
BC30182: Type expected.
Dim omittedArg1 As Type = "string literal".ExtensionMethod1(Of )()
~
BC36590: Too few type arguments to extension method 'Public Function ExtensionMethod2(Of T1, T2)() As Object' defined in 'FooExtensions'.
Dim omittedArg2 As Type = "string literal".ExtensionMethod2(Of )()
~~~~~
BC30182: Type expected.
Dim omittedArg2 As Type = "string literal".ExtensionMethod2(Of )()
~
BC36907: Extension method 'Public Function ExtensionMethod0() As Object' defined in 'FooExtensions' is not generic (or has no free type parameters) and so cannot have type arguments.
Dim omittedArgFunc0 As Func(Of Object) = "string literal".ExtensionMethod0(Of )
~~~~~
BC30182: Type expected.
Dim omittedArgFunc0 As Func(Of Object) = "string literal".ExtensionMethod0(Of )
~
BC30182: Type expected.
Dim omittedArgFunc1 As Func(Of Object) = "string literal".ExtensionMethod1(Of )
~
BC36590: Too few type arguments to extension method 'Public Function ExtensionMethod2(Of T1, T2)() As Object' defined in 'FooExtensions'.
Dim omittedArgFunc2 As Func(Of Object) = "string literal".ExtensionMethod2(Of )
~~~~~
BC30182: Type expected.
Dim omittedArgFunc2 As Func(Of Object) = "string literal".ExtensionMethod2(Of )
~
BC36907: Extension method 'Public Function ExtensionMethod0() As Object' defined in 'FooExtensions' is not generic (or has no free type parameters) and so cannot have type arguments.
Dim moreArgs0 As Type = "string literal".ExtensionMethod0(Of Integer)()
~~~~~~~~~~~~
BC36591: Too many type arguments to extension method 'Public Function ExtensionMethod1(Of T)() As Object' defined in 'FooExtensions'.
Dim moreArgs1 As Type = "string literal".ExtensionMethod1(Of Integer, Boolean)()
~~~~~~~~~~~~~~~~~~~~~
BC36591: Too many type arguments to extension method 'Public Function ExtensionMethod2(Of T1, T2)() As Object' defined in 'FooExtensions'.
Dim moreArgs2 As Type = "string literal".ExtensionMethod2(Of Integer, Boolean, String)()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC36589: Type parameter 'T' for extension method 'Public Function ExtensionMethod1(Of T)() As Object' defined in 'FooExtensions' cannot be inferred.
Dim lessArgs1 As Type = "string literal".ExtensionMethod1()
~~~~~~~~~~~~~~~~
BC36590: Too few type arguments to extension method 'Public Function ExtensionMethod2(Of T1, T2)() As Object' defined in 'FooExtensions'.
Dim lessArgs2 As Type = "string literal".ExtensionMethod2(Of Integer)()
~~~~~~~~~~~~
BC30456: 'ExtensionMethodNotFound0' is not a member of 'String'.
Dim nonExistingMethod0 As Type = "string literal".ExtensionMethodNotFound0()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30456: 'ExtensionMethodNotFound1' is not a member of 'String'.
Dim nonExistingMethod1 As Type = "string literal".ExtensionMethodNotFound1(Of Integer)()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30456: 'ExtensionMethodNotFound2' is not a member of 'String'.
Dim nonExistingMethod2 As Type = "string literal".ExtensionMethodNotFound2(Of Integer, String)()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
End Sub
End Class
End Namespace
|