File: SymbolsTests\SymbolErrorTests.vb
Web Access
Project: src\src\Compilers\VisualBasic\Test\Symbol\Microsoft.CodeAnalysis.VisualBasic.Symbol.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.Symbol.UnitTests)
' 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 System.Collections.Immutable
Imports System.Xml.Linq
Imports Basic.Reference.Assemblies
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
 
    ' this place is dedicated to various parser and/or symbol errors
    Public Class SymbolErrorTests
        Inherits BasicTestBase
 
#Region "Targeted Error Tests"
 
        <Fact>
        Public Sub BC30002ERR_UndefinedType1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UndefinedType1">
        <file name="a.vb"><![CDATA[
        Structure myStruct
            Sub Scen1(FixedRankArray_7(,) As unknowntype)
            End Sub
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'unknowntype' is not defined.
            Sub Scen1(FixedRankArray_7(,) As unknowntype)
                                             ~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30002ERR_UndefinedType1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UndefinedType1">
        <file name="a.vb"><![CDATA[
        Namespace NS1
            Structure myStruct
                Sub Scen1()
                End Sub
            End Structure
        End Namespace
        Namespace NS2
            Structure myStruct1
                Sub Scen1(ByVal S As myStruct)
                End Sub
            End Structure
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'myStruct' is not defined.
                Sub Scen1(ByVal S As myStruct)
                                     ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30015ERR_InheritsFromRestrictedType1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InheritsFromRestrictedType1">
        <file name="a.vb"><![CDATA[
        Structure myStruct1
            Class C1
                'COMPILEERROR: BC30015, "System.Enum"
                Inherits System.Enum
            End Class

            Class C2
                'COMPILEERROR: BC30015, "System.MulticastDelegate"
                Inherits System.MulticastDelegate
            End Class
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30015: Inheriting from '[Enum]' is not valid.
                Inherits System.Enum
                         ~~~~~~~~~~~
BC30015: Inheriting from 'MulticastDelegate' is not valid.
                Inherits System.MulticastDelegate
                         ~~~~~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30022ERR_ReadOnlyHasSet()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ReadOnlyHasSet">
        <file name="a.vb"><![CDATA[
        Class C1
            Private newPropertyValue As String
            Public ReadOnly Property NewProperty() As String
                Get
                    Return newPropertyValue
                End Get
                Set(ByVal value As String)
                    newPropertyValue = value
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30022: Properties declared 'ReadOnly' cannot have a 'Set'.
                Set(ByVal value As String)
                ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30022ERR_ReadOnlyHasSet2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
    <compilation name="ReadOnlyHasSet2">
        <file name="a.vb"><![CDATA[
        Class C1
            Inherits D2
            Public Overrides ReadOnly Property P_rw_rw_r As Integer
                Get
                    Return MyBase.P_rw_rw_r
                End Get
                Set(value As Integer)
                    MyBase.P_rw_rw_r = value
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>, ClassesWithReadWriteProperties)
            Dim expectedErrors1 = <errors><![CDATA[
BC30022: Properties declared 'ReadOnly' cannot have a 'Set'.
                Set(value As Integer)
                ~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30023ERR_WriteOnlyHasGet()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="WriteOnlyHasGet">
        <file name="a.vb"><![CDATA[
        Class C1
            Private newPropertyValue As String
            Public WriteOnly Property NewProperty() As String
                Get
                    Return newPropertyValue
                End Get
                Set(ByVal value As String)
                    newPropertyValue = value
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30023: Properties declared 'WriteOnly' cannot have a 'Get'.
                Get
                ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30023ERR_WriteOnlyHasGet2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
    <compilation name="WriteOnlyHasGet2">
        <file name="a.vb"><![CDATA[
        Class C1
            Inherits D2
            Public Overrides WriteOnly Property P_rw_rw_w As Integer
                Get
                    Return MyBase.P_rw_rw_w
                End Get
                Set(value As Integer)
                    MyBase.P_rw_rw_w = value
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>, ClassesWithReadWriteProperties)
            Dim expectedErrors1 = <errors><![CDATA[
BC30023: Properties declared 'WriteOnly' cannot have a 'Get'.
                Get
                ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30031ERR_FullyQualifiedNameTooLong1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
    <file name="a.vb"><![CDATA[
Namespace AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
    Namespace EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
        Namespace HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
            Namespace n
                Delegate Sub s()
            End Namespace

            Namespace KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
                Namespace NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
                    Namespace QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
                        Namespace TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU.VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVv
                            Class CCCCC(Of T)
                                Sub s1()

                                End Sub

                                Dim x As Integer

                                Class nestedCCCC

                                End Class
                            End Class

                            Structure ssssss

                            End Structure


                            Module mmmmmm

                            End Module

                            Enum eee
                                dummy
                            End Enum

                            Interface iii

                            End Interface

                            Delegate Sub s()

                            Delegate Function f() As Integer

                        End Namespace
                    End Namespace
                End Namespace
            End Namespace
        End Namespace
    End Namespace
End Namespace
    ]]></file>
</compilation>)
 
            Dim namespaceName As String = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG.HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ.KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU.VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVv"
            Dim expectedErrors = <errors>
BC37220: Name '<%= namespaceName %>.CCCCC`1' exceeds the maximum length allowed in metadata.
                            Class CCCCC(Of T)
                                  ~~~~~
BC37220: Name '<%= namespaceName %>.ssssss' exceeds the maximum length allowed in metadata.
                            Structure ssssss
                                      ~~~~~~
BC37220: Name '<%= namespaceName %>.mmmmmm' exceeds the maximum length allowed in metadata.
                            Module mmmmmm
                                   ~~~~~~
BC37220: Name '<%= namespaceName %>.eee' exceeds the maximum length allowed in metadata.
                            Enum eee
                                 ~~~
BC37220: Name '<%= namespaceName %>.iii' exceeds the maximum length allowed in metadata.
                            Interface iii
                                      ~~~
BC37220: Name '<%= namespaceName %>.s' exceeds the maximum length allowed in metadata.
                            Delegate Sub s()
                                         ~
BC37220: Name '<%= namespaceName %>.f' exceeds the maximum length allowed in metadata.
                            Delegate Function f() As Integer
                                              ~
</errors>
 
            CompilationUtils.AssertNoDeclarationDiagnostics(compilation)
            CompilationUtils.AssertTheseEmitDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30050ERR_ParamArrayNotArray()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ERR_ParamArrayNotArray">
        <file name="a.vb"><![CDATA[
        Option Explicit
        Structure myStruct1
            Public sub m1(ParamArray byval q)
            End Sub
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30050: ParamArray parameter must be an array.
            Public sub m1(ParamArray byval q)
                                           ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30051ERR_ParamArrayRank()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ParamArrayRank">
        <file name="a.vb"><![CDATA[
        Class zzz
            Shared Sub Main()
            End Sub
            Sub abc(ByVal ParamArray s(,) As Integer)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30051: ParamArray parameter must be a one-dimensional array.
            Sub abc(ByVal ParamArray s(,) As Integer)
                                     ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30121ERR_MultipleExtends()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MultipleExtends">
        <file name="a.vb"><![CDATA[
        Class C1(of T)
            Inherits Object
            Inherits system.StringComparer
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
            Inherits system.StringComparer
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30124ERR_PropMustHaveGetSet_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C1
            'COMPILEERROR: BC30124, "aprop"
            Property aprop() As String
                Get
                    Return "30124"
                End Get
            End Property
        End Class
        Partial Class C1
            'COMPILEERROR: BC30124, "aprop"
            Property aprop() As String
                Set(ByVal Value As String)
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
            Property aprop() As String
                     ~~~~~
BC30269: 'Public Property aprop As String' has multiple definitions with identical signatures.
            Property aprop() As String
                     ~~~~~
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
            Property aprop() As String
                     ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30124ERR_PropMustHaveGetSet_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Property P
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
            Property P
                     ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30125ERR_WriteOnlyHasNoWrite_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C1
            'COMPILEERROR: BC30125, "aprop"
            WriteOnly Property aprop() As String
            End Property
        End Class
        Partial Class C1
            Property aprop() As String
                Set(ByVal Value As String)
                End Set
                Get
                    Return "30125"
                End Get
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30125: 'WriteOnly' property must provide a 'Set'.
            WriteOnly Property aprop() As String
                               ~~~~~
BC30366: 'Public WriteOnly Property aprop As String' and 'Public Property aprop As String' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
            WriteOnly Property aprop() As String
                               ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30126ERR_ReadOnlyHasNoGet_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C1
            'COMPILEERROR: BC30126, "aprop"
            ReadOnly Property aprop() As String
            End Property
        End Class
        Partial Class C1
            Property aprop() As String
                Set(ByVal Value As String)
                End Set
                Get
                    Return "30126"
                End Get
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30126: 'ReadOnly' property must provide a 'Get'.
            ReadOnly Property aprop() As String
                              ~~~~~
BC30366: 'Public ReadOnly Property aprop As String' and 'Public Property aprop As String' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
            ReadOnly Property aprop() As String
                              ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30149ERR_UnimplementedMember3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UnimplementedMember3">
        <file name="a.vb"><![CDATA[
        Interface Ibase
            Function one() As String
        End Interface
        Interface Iderived
            Inherits Ibase
            Function two() As String
        End Interface
        Class C1
            Implements Iderived
        End Class
        Partial Class C1
            Public Function two() As String Implements Iderived.two
                Return "two"
            End Function
        End Class
        Class C2
            Implements Iderived
        End Class
        Partial Class C2
            Public Function one() As String Implements Iderived.one
                Return "one"
            End Function
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'C1' must implement 'Function one() As String' for interface 'Ibase'.
            Implements Iderived
                       ~~~~~~~~
BC30149: Class 'C2' must implement 'Function two() As String' for interface 'Iderived'.
            Implements Iderived
                       ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Spec changed in Roslyn
        <WorkItem(528701, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528701")>
        <Fact>
        Public Sub BC30154ERR_UnimplementedProperty3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UnimplementedProperty3">
        <file name="a.vb"><![CDATA[
        Interface PropInterface
            Property Scen1() As System.Collections.Generic.IEnumerable(Of Integer)
        End Interface
        Class HasProps
            'COMPILEERROR:BC30154,"PropInterface"
            Implements PropInterface
        End Class
                ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'HasProps' must implement 'Property Scen1 As IEnumerable(Of Integer)' for interface 'PropInterface'.
            Implements PropInterface
                       ~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30177ERR_DuplicateModifierCategoryUsed()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateModifierCategoryUsed">
        <file name="a.vb"><![CDATA[
        MustInherit Class C1
            MustOverride notoverridable Overridable Function StringFunc() As String
        End Class
                ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
            MustOverride notoverridable Overridable Function StringFunc() As String
                         ~~~~~~~~~~~~~~
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
            MustOverride notoverridable Overridable Function StringFunc() As String
                                        ~~~~~~~~~~~                                      
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30177ERR_DuplicateModifierCategoryUsed_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateModifierCategoryUsed">
        <file name="a.vb"><![CDATA[
        MustInherit Class C1
            MustOverride Overridable Function StringFunc() As String
        End Class
                ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
            MustOverride Overridable Function StringFunc() As String
                         ~~~~~~~~~~~                                      
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30178ERR_DuplicateSpecifier()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateSpecifier">
        <file name="a.vb"><![CDATA[
        Class test
            Shared Shared Sub Goo()
            End Sub
        End Class
                ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30178: Specifier is duplicated.
            Shared Shared Sub Goo()
                   ~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30178ERR_DuplicateSpecifier_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateSpecifier">
        <file name="a.vb"><![CDATA[
        class test
            friend shared friend function Goo()
            End function
        End class
                ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30178: Specifier is duplicated.
            friend shared friend function Goo()
                          ~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Checks for duplicate type declarations
        <Fact>
        Public Sub BC30179ERR_TypeConflict6()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class cc1
        End Class

        Class cC1
        End Class

        Class Cc1
        End Class

        structure CC1
        end structure
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30179: class 'cc1' and structure 'CC1' conflict in namespace '<Default>'.
Class cc1
      ~~~
BC30179: class 'cC1' and structure 'CC1' conflict in namespace '<Default>'.
        Class cC1
              ~~~
BC30179: class 'Cc1' and structure 'CC1' conflict in namespace '<Default>'.
        Class Cc1
              ~~~
BC30179: structure 'CC1' and class 'cc1' conflict in namespace '<Default>'.
        structure CC1
                  ~~~                                      
                        ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30179ERR_TypeConflict6_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
        Enum Unicode
            one
        End Enum
        Class Unicode
        End Class
        Module Unicode
        End Module
        Interface Unicode
        End Interface
        Delegate Sub Unicode()
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30179: enum 'Unicode' and class 'Unicode' conflict in namespace '<Default>'.
Enum Unicode
     ~~~~~~~
BC30179: class 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
        Class Unicode
              ~~~~~~~
BC30179: module 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
        Module Unicode
               ~~~~~~~
BC30179: interface 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
        Interface Unicode
                  ~~~~~~~
BC30179: delegate Class 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
        Delegate Sub Unicode()
                     ~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(528149, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528149")>
        <Fact>
        Public Sub BC30179ERR_TypeConflict6_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Namespace N
            Interface I
                ReadOnly Property P
                ReadOnly Property Q
            End Interface
            Interface I ' BC30179
                Property Q
            End Interface
            Structure S
                Class T
                End Class
                Interface I
                End Interface
            End Structure
            Structure S ' BC30179
                Structure T
                End Structure
                Dim I
            End Structure
            Enum E
                A
                B
            End Enum
            Enum E ' BC30179
                A
            End Enum
            Class S ' BC30179
                Dim T
            End Class
            Delegate Sub D()
            Delegate Function D(s$) ' BC30179
        End Namespace
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30179: interface 'I' and interface 'I' conflict in namespace 'N'.
            Interface I ' BC30179
                      ~
BC30179: structure 'S' and class 'S' conflict in namespace 'N'.
            Structure S
                      ~
BC30179: structure 'S' and class 'S' conflict in namespace 'N'.
            Structure S ' BC30179
                      ~
BC30179: enum 'E' and enum 'E' conflict in namespace 'N'.
            Enum E
                 ~
BC30179: enum 'E' and enum 'E' conflict in namespace 'N'.
            Enum E ' BC30179
                 ~
BC30179: class 'S' and structure 'S' conflict in namespace 'N'.
            Class S ' BC30179
                  ~
BC30179: delegate Class 'D' and delegate Class 'D' conflict in namespace 'N'.
            Delegate Function D(s$) ' BC30179
                              ~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(528149, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528149")>
        <Fact>
        Public Sub BC30179ERR_TypeConflict6_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Interface I
                ReadOnly Property P
                ReadOnly Property Q
            End Interface
            Interface I ' BC30179
                Property Q
            End Interface
            Structure S
                Class T
                End Class
                Interface I
                End Interface
            End Structure
            Structure S ' BC30179
                Structure T
                End Structure
                Dim I
            End Structure
            Enum E
                A
                B
            End Enum
            Enum E ' BC30179
                A
            End Enum
            Class S ' BC30179
                Dim T
            End Class
            Delegate Sub D()
            Delegate Function D(s$) ' BC30179
        End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30179: interface 'I' and interface 'I' conflict in class 'C'.
            Interface I ' BC30179
                      ~
BC30179: structure 'S' and class 'S' conflict in class 'C'.
            Structure S
                      ~
BC30179: structure 'S' and class 'S' conflict in class 'C'.
            Structure S ' BC30179
                      ~
BC30179: enum 'E' and enum 'E' conflict in class 'C'.
            Enum E
                 ~
BC30179: enum 'E' and enum 'E' conflict in class 'C'.
            Enum E ' BC30179
                 ~
BC30179: class 'S' and structure 'S' conflict in class 'C'.
            Class S ' BC30179
                  ~
BC30179: delegate Class 'D' and delegate Class 'D' conflict in class 'C'.
            Delegate Function D(s$) ' BC30179
                              ~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30179ERR_TypeConflict6_DupNestedEnumDeclarations()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateEnum1">
        <file name="a.vb"><![CDATA[
            Structure S1
                Enum goo
                    bar
                End Enum
                Enum goo
                    bar
                    another_bar
                End Enum
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30179: enum 'goo' and enum 'goo' conflict in structure 'S1'.
                Enum goo
                     ~~~
BC30179: enum 'goo' and enum 'goo' conflict in structure 'S1'.
                Enum goo
                     ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30179ERR_TypeConflict6_DupEnumDeclarations()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateEnum2">
        <file name="a.vb"><![CDATA[
                Enum goo
                    bar
                End Enum
                Enum goo
                    bar
                    another_bar
                End Enum
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30179: enum 'goo' and enum 'goo' conflict in namespace '<Default>'.
Enum goo
     ~~~
BC30179: enum 'goo' and enum 'goo' conflict in namespace '<Default>'.
                Enum goo
                     ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30182_ERR_UnrecognizedType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UnrecognizedType">
        <file name="a.vb"><![CDATA[
        Namespace NS
            Class C1
                Function GOO() As NS
                End Function
            End Class
        End Namespace
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30182: Type expected.
                Function GOO() As NS
                                  ~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30182_ERR_UnrecognizedType_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UnrecognizedType">
        <file name="a.vb"><![CDATA[
        Namespace NS
            Class C1
                inherits NS
            End Class
        End Namespace
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30182: Type expected.
                inherits NS
                         ~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30210ERR_StrictDisallowsImplicitProc()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Option Strict On
        Structure S1
            Public Function Goo()
            End Function
        End Structure
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
            Public Function Goo()
                            ~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30210ERR_StrictDisallowsImplicitProc_1()
            CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
        option strict on
        Public Class c1
            Shared Operator + (ByVal c As c1, ByVal b As c1)
            End Operator
        End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_StrictDisallowsImplicitProc, "+"),
                                    Diagnostic(ERRID.WRN_DefAsgNoRetValOpRef1, "End Operator").WithArguments("+"))
 
        End Sub
 
        <Fact>
        Public Sub BC30210ERR_StrictDisallowsImplicitProc_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Option Strict On
        Interface I
            ReadOnly Property P
        End Interface
        Structure S
            WriteOnly Property P
                Set(value As Object)
                End Set
            End Property
        End Structure
        Class C
            Property P(i As Integer)
                Get
                    Return Nothing
                End Get
                Set(value As Object)
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
            ReadOnly Property P
                              ~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
            WriteOnly Property P
                               ~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
            Property P(i As Integer)
                     ~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30210ERR_StrictDisallowsImplicitProc_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Option Strict On
        Delegate Sub D()
        Delegate Function E(o As Object)
        Delegate Function F() As Object
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
        Delegate Function E(o As Object)
                          ~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30210ERR_StrictDisallowsImplicitProc_Declare()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
    <file name="a.vb"><![CDATA[
Option Strict On

Module M
    Declare Sub test Lib "???" (a As Integer)
    Declare Sub F Lib "bar" ()
    Declare Function G Lib "bar" ()
End Module
    ]]></file>
</compilation>)
 
            Dim expectedErrors1 =
<errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
    Declare Function G Lib "bar" ()
                     ~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30211ERR_StrictDisallowsImplicitArgs()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Option Strict On
        Structure S1
            Public Function Goo(byval x) as integer
                return 1
            End Function
        End Structure
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
            Public Function Goo(byval x) as integer
                                      ~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30211ERR_StrictDisallowsImplicitArgs_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Option Strict On
        Interface I
            ReadOnly Property P(i) As Object
        End Interface
        Structure S
            WriteOnly Property P(x) As Object
                Set(value)
                End Set
            End Property
        End Structure
        Class C
            Property P(val) As I
                Get
                    Return Nothing
                End Get
                Set
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
            ReadOnly Property P(i) As Object
                                ~
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
            WriteOnly Property P(x) As Object
                                 ~
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
                Set(value)
                    ~~~~~
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
            Property P(val) As I
                       ~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30230ERR_ModuleCantInherit()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ModuleCantInherit">
        <file name="a.vb"><![CDATA[
        interface I1
        End interface 
        module M1 
            Inherits I1
        End module
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30230: 'Inherits' not valid in Modules.
            Inherits I1
            ~~~~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30231ERR_ModuleCantImplement()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ModuleCantImplement">
        <file name="a.vb"><![CDATA[
        Module M1
            Implements Object
        End Module
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30231: 'Implements' not valid in Modules.
            Implements Object
            ~~~~~~~~~~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30232ERR_BadImplementsType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadImplementsType">
        <file name="a.vb"><![CDATA[
        Class cls1
            Implements system.Enum
        End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30232: Implemented type must be an interface.
            Implements system.Enum
                       ~~~~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30233ERR_BadConstFlags1()
            Dim source =
<compilation name="delegates">
    <file name="a.vb"><![CDATA[
Option strict on
imports system

Class C1
    ' BC30233: 'Shared' is not valid on a constant declaration.
    Public Shared Const b As String = "goo"
    Public Const Shared c As String = "goo"

    ' BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public ReadOnly Const d As String = "goo"
    Public Const ReadOnly e As String = "goo"

    ' BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public Shared ReadOnly Const f As String = "goo"
End Class

Module M1
    ' Roslyn: Only BC30593: Variables in Modules cannot be declared 'Shared'.
    ' Dev10: Additional BC30233: 'Shared' is not valid on a constant declaration.
    Public Shared Const b As String = "goo"
    Public Const Shared c As String = "goo"

    ' BC30233: 'ReadOnly' is not valid on a constant declaration.    
    Public ReadOnly Const d As String = "goo"
    Public Const ReadOnly e As String = "goo"
End Module

Structure S1
    ' BC30233: 'Shared' is not valid on a constant declaration.
    Public Shared Const b As String = "goo"
    Public Const Shared c As String = "goo"

    ' BC30233: 'ReadOnly' is not valid on a constant declaration.    
    Public ReadOnly Const d As String = "goo"
    Public Const ReadOnly e As String = "goo"
End Structure
    ]]></file>
</compilation>
 
            Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
 
            CompilationUtils.AssertTheseDiagnostics(c1,
<expected><![CDATA[
BC30233: 'Shared' is not valid on a constant declaration.
    Public Shared Const b As String = "goo"
           ~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
    Public Const Shared c As String = "goo"
                 ~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public ReadOnly Const d As String = "goo"
           ~~~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public Const ReadOnly e As String = "goo"
                 ~~~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
    Public Shared ReadOnly Const f As String = "goo"
           ~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public Shared ReadOnly Const f As String = "goo"
                  ~~~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
    Public Shared Const b As String = "goo"
           ~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
    Public Const Shared c As String = "goo"
                 ~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public ReadOnly Const d As String = "goo"
           ~~~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public Const ReadOnly e As String = "goo"
                 ~~~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
    Public Shared Const b As String = "goo"
           ~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
    Public Const Shared c As String = "goo"
                 ~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public ReadOnly Const d As String = "goo"
           ~~~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
    Public Const ReadOnly e As String = "goo"
                 ~~~~~~~~
]]></expected>)
        End Sub
 
        <WorkItem(528365, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528365")>
        <Fact>
        Public Sub BC30233ERR_BadConstFlags1_02()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadConstFlags1">
        <file name="a.vb"><![CDATA[
        Imports Microsoft.VisualBasic
        Module M1
            'COMPILEERROR: BC30233, "Static"
            Static Const p As Integer = AscW("10")
        End Module
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30235: 'Static' is not valid on a member variable declaration.
            Static Const p As Integer = AscW("10")
            ~~~~~~
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact()>
        Public Sub BC30234ERR_BadWithEventsFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadWithEventsFlags1">
        <file name="a.vb"><![CDATA[
        Module M1
            'COMPILEERROR: BC30234, "ReadOnly"
            ReadOnly WithEvents var1 As Object
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30234: 'ReadOnly' is not valid on a WithEvents declaration.
            ReadOnly WithEvents var1 As Object
            ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30235ERR_BadDimFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadDimFlags1">
        <file name="a.vb"><![CDATA[
        Class cls1
            Default i As Integer
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30235: 'Default' is not valid on a member variable declaration.
            Default i As Integer
            ~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30237ERR_DuplicateParamName1_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
            <compilation>
                <file name="a.vb"><![CDATA[
                Option strict on
                Module m
                    Sub s1(ByVal a As Integer, ByVal a As Integer, a as string)

                    End Sub
                End Module
                ]]></file>
            </compilation>)
            Dim expectedErrors = <errors><![CDATA[
BC30237: Parameter already declared with name 'a'.
                    Sub s1(ByVal a As Integer, ByVal a As Integer, a as string)
                                                     ~
BC30237: Parameter already declared with name 'a'.
                    Sub s1(ByVal a As Integer, ByVal a As Integer, a as string)
                                                                   ~                                     
                       ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30237ERR_DuplicateParamName1_2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
            <compilation>
                <file name="a.vb"><![CDATA[
                Class C
                    WriteOnly Property P(ByVal a, ByVal b)
                        Set(ByVal b)
                        End Set
                    End Property
                    Property Q(x, y, x)
                        Get
                            Return Nothing
                        End Get
                        Set(value)
                        End Set
                    End Property
                End Class
                ]]></file>
            </compilation>)
            Dim expectedErrors = <errors><![CDATA[
BC30237: Parameter already declared with name 'b'.
                        Set(ByVal b)
                                  ~
BC30237: Parameter already declared with name 'x'.
                    Property Q(x, y, x)
                                     ~
                       ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30237ERR_DuplicateParamName1_ExternalMethods()
            Dim source =
<compilation>
    <file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices

Public Class C
    <MethodImplAttribute(MethodCodeType:=MethodCodeType.Runtime)>
    Shared Sub Runtime(a As Integer, a As Integer)
    End Sub

    <MethodImpl(MethodImplOptions.InternalCall)>
    Shared Sub InternalCall(b As Integer, b As Integer)
    End Sub

    <DllImport("goo")>
    Shared Sub DllImp(c As Integer, c As Integer)
    End Sub

    Declare Sub DeclareSub Lib "bar" (d As Integer, d As Integer)
End Class
]]></file>
</compilation>
            CreateCompilationWithMscorlib40(source).VerifyDiagnostics(
                Diagnostic(ERRID.ERR_DuplicateParamName1, "a").WithArguments("a"),
                Diagnostic(ERRID.ERR_DuplicateParamName1, "b").WithArguments("b"),
                Diagnostic(ERRID.ERR_DuplicateParamName1, "c").WithArguments("c"))
        End Sub
 
        <Fact>
        Public Sub BC30242ERR_BadMethodFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadMethodFlags1">
        <file name="a.vb"><![CDATA[
        Structure S1
            Default function  goo()
            End function
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30242: 'Default' is not valid on a method declaration.
            Default function  goo()
            ~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30243ERR_BadEventFlags1()
            CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadEventFlags1">
        <file name="a.vb"><![CDATA[
        Class c1
            Shared Event e1()
            Public Event e2()
            Sub raiser1()
                RaiseEvent e1()
            End Sub
            Sub raiser2()
                RaiseEvent e2()
            End Sub
        End Class
            Class c2
                Inherits c1
                'COMPILEERROR: BC30243, "Overrides"
                Overrides Event e1()
                'COMPILEERROR: BC30243, "Overloads"
                Overloads Event e2(ByVal i As Integer)
                'COMPILEERROR: BC30243, "Overloads", BC30243, "Overrides"
                Overloads Overrides Event e3(ByVal i As Integer)
                'COMPILEERROR: BC30243, "NotOverridable"
                NotOverridable Event e4()
                'COMPILEERROR: BC30243, "Default"
                Default Event e5()
                'COMPILEERROR: BC30243, "Static"
                Static Event e6()
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(
            Diagnostic(ERRID.ERR_BadEventFlags1, "Overrides").WithArguments("Overrides"),
            Diagnostic(ERRID.ERR_BadEventFlags1, "Overloads").WithArguments("Overloads"),
            Diagnostic(ERRID.ERR_BadEventFlags1, "Overloads").WithArguments("Overloads"),
            Diagnostic(ERRID.ERR_BadEventFlags1, "Overrides").WithArguments("Overrides"),
            Diagnostic(ERRID.ERR_BadEventFlags1, "NotOverridable").WithArguments("NotOverridable"),
            Diagnostic(ERRID.ERR_BadEventFlags1, "Default").WithArguments("Default"),
            Diagnostic(ERRID.ERR_BadEventFlags1, "Static").WithArguments("Static"),
            Diagnostic(ERRID.WRN_OverrideType5, "e1").WithArguments("event", "e1", "event", "class", "c1"),
            Diagnostic(ERRID.WRN_OverrideType5, "e2").WithArguments("event", "e2", "event", "class", "c1"))
        End Sub
 
        ' BC30244ERR_BadDeclareFlags1
        ' see AttributeTests
 
        <WorkItem(527697, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527697")>
        <Fact>
        Public Sub BC30246ERR_BadLocalConstFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadLocalConstFlags1">
        <file name="a.vb"><![CDATA[
        Module M1
            Sub Main()
                'COMPILEERROR: BC30246, "Shared"
                Shared Const x As Integer = 10
            End Sub
        End Module
        ]]></file>
    </compilation>).VerifyDiagnostics(
            Diagnostic(ERRID.ERR_BadLocalDimFlags1, "Shared").WithArguments("Shared"),
            Diagnostic(ERRID.WRN_UnusedLocalConst, "x").WithArguments("x"))
        End Sub
 
        <WorkItem(538967, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538967")>
        <Fact>
        Public Sub BC30247ERR_BadLocalDimFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadLocalDimFlags1">
        <file name="a.vb"><![CDATA[
        Module M1
            Sub Main()
                'COMPILEERROR: BC30247, "Shared"
                Shared x As Integer = 10
            End Sub
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30247: 'Shared' is not valid on a local variable declaration.
                Shared x As Integer = 10
                ~~~~~~
     ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact>
        Public Sub BC30257ERR_InheritanceCycle1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InheritanceCycle1">
        <file name="a.vb"><![CDATA[
        Public Class C1
            Inherits C2
        End Class
        Public Class C2
            Inherits C1
        End Class
        Module M1
            Sub Main()
            End Sub
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30257: Class 'C1' cannot inherit from itself: 
    'C1' inherits from 'C2'.
    'C2' inherits from 'C1'.
            Inherits C2
                     ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact>
        Public Sub BC30258ERR_InheritsFromNonClass()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InheritsFrom2">
        <file name="a.vb"><![CDATA[
        Structure myStruct1
            Class C1
            Inherits myStruct1
            End Class
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30258: Classes can inherit only from other classes.
            Inherits myStruct1
                     ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Checks for duplicate type declarations
        ' DEV code
        <Fact>
        Public Sub BC30260ERR_MultiplyDefinedType3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            class c
                sub i(ByVal i As Integer) 
                End Sub

                dim i(,,) as integer

                Public i, i As Integer

                Private i As Integer 

                Sub i()
                End Sub

            end class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
                dim i(,,) as integer
                    ~
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
                Public i, i As Integer
                       ~
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
                Public i, i As Integer
                          ~
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
                Private i As Integer 
                        ~   
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30260ERR_MultiplyDefinedType3_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
        Class C
            Enum E As Short
                A
            End Enum
            Function E()
            End Function
        End Class
        Interface I
            Structure S
            End Structure
            Sub S()
        End Interface
        Structure S
            Class C
            End Class
            Property C
            Interface I
            End Interface
            Private I
        End Structure
        ]]></file>
</compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30260: 'E' is already declared as 'Enum E' in this class.
            Function E()
                     ~
BC30260: 'S' is already declared as 'Structure S' in this interface.
            Sub S()
                ~
BC30260: 'C' is already declared as 'Class C' in this structure.
            Property C
                     ~
BC30260: 'I' is already declared as 'Interface I' in this structure.
            Private I
                    ~
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30260ERR_MultiplyDefinedType3_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        MustInherit Class C
            Overloads Property P
            Overloads Function P(o)
                Return Nothing
            End Function
            Overloads Shared Property Q(o)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            Overloads Sub Q()
            End Sub
            Class R
            End Class
            ReadOnly Property R(x, y)
                Get
                    Return Nothing
                End Get
            End Property
            Private WriteOnly Property S As Integer
                Set(value As Integer)
                End Set
            End Property
            Structure S
            End Structure
            Private Shared ReadOnly Property T As Integer
                Get
                    Return 0
                End Get
            End Property
            Private T
            Friend MustOverride Overloads Function U()
            Protected Property U
            Protected V As Object
            Friend Shared Property V
        End Class
        ]]></file>
    </compilation>)
 
            ' Note: Unlike Dev10, the error with 'S' is reported on the property
            ' rather than the struct, even though the struct appears first in source.
            ' That is because types are resolved before other members.
            Dim expectedErrors1 = <errors><![CDATA[
BC30260: 'P' is already declared as 'Public Overloads Property P As Object' in this class.
            Overloads Function P(o)
                               ~
BC30260: 'Q' is already declared as 'Public Shared Overloads Property Q(o As Object) As Object' in this class.
            Overloads Sub Q()
                          ~
BC30260: 'R' is already declared as 'Class R' in this class.
            ReadOnly Property R(x, y)
                              ~
BC30260: 'S' is already declared as 'Structure S' in this class.
            Private WriteOnly Property S As Integer
                                       ~
BC30260: 'T' is already declared as 'Private Shared ReadOnly Property T As Integer' in this class.
            Private T
                    ~
BC30260: 'U' is already declared as 'Friend MustOverride Overloads Function U() As Object' in this class.
            Protected Property U
                               ~
BC30260: 'V' is already declared as 'Protected V As Object' in this class.
            Friend Shared Property V
                                   ~
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30266ERR_BadOverrideAccess2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadLocalDimFlags1">
        <file name="a.vb"><![CDATA[
        Namespace NS1
            Class base
                Protected Overridable Function scen2(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                Public Overridable Function scen1(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
            End Class
            Partial Class base
                Friend Overridable Function scen3(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                Protected Friend Overridable Function scen4(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                Private Protected Overridable Function scen5(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                Protected Overridable Function scen6(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
            End Class
            Partial Class derived
                'COMPILEERROR: BC30266, "scen4"
                Protected Overrides Function scen4(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
            End Class
            Class derived
                Inherits base
                'COMPILEERROR: BC30266, "scen2"
                Friend Overrides Function scen2(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                'COMPILEERROR: BC30266, "scen3"
                Public Overrides Function scen3(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                'COMPILEERROR: BC30266, "scen1"
                Protected Overrides Function scen1(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                'COMPILEERROR: BC30266, "scen5"
                Protected Overrides Function scen5(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
                'COMPILEERROR: BC30266, "scen6"
                Private Protected Overrides Function scen6(Of t)(ByVal x As t) As String
                    Return "30266"
                End Function
            End Class
        End Namespace
        ]]></file>
    </compilation>,
        parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15_5))
            Dim expectedErrors1 = <errors><![CDATA[
BC30266: 'Protected Overrides Function scen4(Of t)(x As t) As String' cannot override 'Protected Friend Overridable Function scen4(Of t)(x As t) As String' because they have different access levels.
                Protected Overrides Function scen4(Of t)(ByVal x As t) As String
                                             ~~~~~
BC30266: 'Friend Overrides Function scen2(Of t)(x As t) As String' cannot override 'Protected Overridable Function scen2(Of t)(x As t) As String' because they have different access levels.
                Friend Overrides Function scen2(Of t)(ByVal x As t) As String
                                          ~~~~~
BC30266: 'Public Overrides Function scen3(Of t)(x As t) As String' cannot override 'Friend Overridable Function scen3(Of t)(x As t) As String' because they have different access levels.
                Public Overrides Function scen3(Of t)(ByVal x As t) As String
                                          ~~~~~
BC30266: 'Protected Overrides Function scen1(Of t)(x As t) As String' cannot override 'Public Overridable Function scen1(Of t)(x As t) As String' because they have different access levels.
                Protected Overrides Function scen1(Of t)(ByVal x As t) As String
                                             ~~~~~
BC30266: 'Protected Overrides Function scen5(Of t)(x As t) As String' cannot override 'Private Protected Overridable Function scen5(Of t)(x As t) As String' because they have different access levels.
                Protected Overrides Function scen5(Of t)(ByVal x As t) As String
                                             ~~~~~
BC30266: 'Private Protected Overrides Function scen6(Of t)(x As t) As String' cannot override 'Protected Overridable Function scen6(Of t)(x As t) As String' because they have different access levels.
                Private Protected Overrides Function scen6(Of t)(ByVal x As t) As String
                                                     ~~~~~
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact>
        Public Sub BC30267ERR_CantOverrideNotOverridable2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantOverrideNotOverridable2">
        <file name="a.vb"><![CDATA[
        Class c1
            Class c1_0
                Overridable Sub goo()
                End Sub
            End Class
            Class c1_1
                Inherits c1_0
                NotOverridable Overrides Sub goo()
                End Sub
            End Class
            Class c1_2
                Inherits c1_1
                'COMPILEERROR: BC30267, "goo"
                Overrides Sub goo()
                End Sub
            End Class
        End Class
        Class c1_2
            Inherits c1.c1_1
            'COMPILEERROR: BC30267, "goo"
            Overrides Sub goo()
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30267: 'Public Overrides Sub goo()' cannot override 'Public NotOverridable Overrides Sub goo()' because it is declared 'NotOverridable'.
                Overrides Sub goo()
                              ~~~
BC30267: 'Public Overrides Sub goo()' cannot override 'Public NotOverridable Overrides Sub goo()' because it is declared 'NotOverridable'.
            Overrides Sub goo()
                          ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30269ERR_DuplicateProcDef1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateProcDef1">
        <file name="a.vb"><![CDATA[
            Class C1
                Public Sub New() ' 1
                End Sub
                Public Sub New() ' 2
                End Sub
                Shared Sub New() ' ok :)
                End Sub

                Public Sub Goo1() ' 1
                End Sub
                Public Sub Goo1() ' 2
                End Sub
                Public Sub Goo1() ' 3
                End Sub

                Public overloads Sub Goo2() ' 1
                End Sub
                Public overloads Sub Goo2() ' 2
                End Sub

                Public Sub Goo3(Of T)(X As T) ' 1
                End Sub
                Public Sub Goo3(Of TT)(X As TT) ' 2
                End Sub

                Public Sub GooOK(x as Integer) ' 1
                End Sub
                Public Sub GooOK(x as Decimal) ' 2
                End Sub

                Public Shared Sub Main()
                End Sub
            End Class

            Class Base
               public overridable sub goo4() ' base
              End sub
            End Class

            Class Derived
                Inherits Base

                public overrides sub goo4() ' derived 1
                End sub
                public overloads sub goo4() ' derived 2
                End sub
            End Class

            Class PartialClass
                Public Sub Goo5() ' 1
                End Sub

                Public Sub Goo6(x as integer)
                End Sub
            End Class
            Partial Class PartialClass
                Public Sub Goo5() ' 2
                End Sub

                Public Sub Goo6(y as integer)
                End Sub
            End Class

        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Public Sub New()' has multiple definitions with identical signatures.
                Public Sub New() ' 1
                           ~~~
BC30269: 'Public Sub Goo1()' has multiple definitions with identical signatures.
                Public Sub Goo1() ' 1
                           ~~~~
BC30269: 'Public Sub Goo1()' has multiple definitions with identical signatures.
                Public Sub Goo1() ' 2
                           ~~~~
BC30269: 'Public Overloads Sub Goo2()' has multiple definitions with identical signatures.
                Public overloads Sub Goo2() ' 1
                                     ~~~~
BC30269: 'Public Sub Goo3(Of T)(X As T)' has multiple definitions with identical signatures.
                Public Sub Goo3(Of T)(X As T) ' 1
                           ~~~~
BC30269: 'Public Overrides Sub goo4()' has multiple definitions with identical signatures.
                public overrides sub goo4() ' derived 1
                                     ~~~~
BC30269: 'Public Sub Goo5()' has multiple definitions with identical signatures.
                Public Sub Goo5() ' 1
                           ~~~~
BC30269: 'Public Sub Goo6(x As Integer)' has multiple definitions with identical signatures.
                Public Sub Goo6(x as integer)
                           ~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30269ERR_DuplicateProcDef1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateProcDef1">
        <file name="a.vb"><![CDATA[
        Interface ii
            Sub abc()
        End Interface
        Structure teststruct
            Implements ii
            'COMPILEERROR: BC30269, "abc"
            Public Sub abc() Implements ii.abc
            End Sub
            'COMPILEERROR: BC30269, "New"
            Public Sub New(ByVal x As String)
            End Sub
        End Structure
        Partial Structure teststruct
            Implements ii
            Public Sub New(ByVal x As String)
            End Sub
            Public Sub abc() Implements ii.abc
            End Sub
        End Structure

        ]]></file>
    </compilation>)
 
            ' TODO: The last error is expected to go away once "Implements" is supported.
            Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Public Sub abc()' has multiple definitions with identical signatures.
            Public Sub abc() Implements ii.abc
                       ~~~
BC30269: 'Public Sub New(x As String)' has multiple definitions with identical signatures.
            Public Sub New(ByVal x As String)
                       ~~~
BC30583: 'ii.abc' cannot be implemented more than once.
            Public Sub abc() Implements ii.abc
                                        ~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(543162, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543162")>
        <Fact()>
        Public Sub BC30269ERR_DuplicateProcDef1_Shared()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateProcDef1">
        <file name="a.vb"><![CDATA[
Class C1
    Public Sub New1() ' 1
    End Sub
    Public Shared Sub New1() ' 2
    End Sub
End Class
        ]]></file>
    </compilation>)
 
            AssertTheseDiagnostics(compilation1, errs:=<expected><![CDATA[
BC30269: 'Public Sub New1()' has multiple definitions with identical signatures.
    Public Sub New1() ' 1
               ~~~~                                                     
                                                  ]]></expected>)
        End Sub
 
        <Fact>
        Public Sub BC30270ERR_BadInterfaceMethodFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadInterfaceMethodFlags1">
        <file name="a.vb"><![CDATA[
        Imports System.Collections
        Interface I
            Public Function A()
            Private Function B()
            Protected Function C()
            Friend Function D()
            Shared Function E()
            MustInherit Function F()
            NotInheritable Function G()
            Overrides Function H()
            Partial Function J()
            NotOverridable Function K()
            Overridable Function L()
            Iterator Function Goo() as IEnumerator
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30270: 'Public' is not valid on an interface method declaration.
            Public Function A()
            ~~~~~~
BC30270: 'Private' is not valid on an interface method declaration.
            Private Function B()
            ~~~~~~~
BC30270: 'Protected' is not valid on an interface method declaration.
            Protected Function C()
            ~~~~~~~~~
BC30270: 'Friend' is not valid on an interface method declaration.
            Friend Function D()
            ~~~~~~
BC30270: 'Shared' is not valid on an interface method declaration.
            Shared Function E()
            ~~~~~~
BC30242: 'MustInherit' is not valid on a method declaration.
            MustInherit Function F()
            ~~~~~~~~~~~
BC30242: 'NotInheritable' is not valid on a method declaration.
            NotInheritable Function G()
            ~~~~~~~~~~~~~~
BC30270: 'Overrides' is not valid on an interface method declaration.
            Overrides Function H()
            ~~~~~~~~~
BC30270: 'Partial' is not valid on an interface method declaration.
            Partial Function J()
            ~~~~~~~
BC30270: 'NotOverridable' is not valid on an interface method declaration.
            NotOverridable Function K()
            ~~~~~~~~~~~~~~
BC30270: 'Overridable' is not valid on an interface method declaration.
            Overridable Function L()
            ~~~~~~~~~~~
BC30270: 'Iterator' is not valid on an interface method declaration.
            Iterator Function Goo() as IEnumerator
            ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30273ERR_BadInterfacePropertyFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadInterfacePropertyFlags1">
        <file name="a.vb"><![CDATA[
        Imports System.Collections
        Interface I
            Public Property A
            Private Property B
            Protected Property C
            Friend Property D
            Shared Property E
            MustInherit Property F
            NotInheritable Property G
            Overrides Property H
            NotOverridable Property J
            Overridable Property K
            ReadOnly Property L ' No error
            WriteOnly Property M ' No error
            Default Property N(o) ' No error
            Iterator Property Goo() as IEnumerator
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30273: 'Public' is not valid on an interface property declaration.
            Public Property A
            ~~~~~~
BC30273: 'Private' is not valid on an interface property declaration.
            Private Property B
            ~~~~~~~
BC30273: 'Protected' is not valid on an interface property declaration.
            Protected Property C
            ~~~~~~~~~
BC30273: 'Friend' is not valid on an interface property declaration.
            Friend Property D
            ~~~~~~
BC30273: 'Shared' is not valid on an interface property declaration.
            Shared Property E
            ~~~~~~
BC30639: Properties cannot be declared 'MustInherit'.
            MustInherit Property F
            ~~~~~~~~~~~
BC30639: Properties cannot be declared 'NotInheritable'.
            NotInheritable Property G
            ~~~~~~~~~~~~~~
BC30273: 'Overrides' is not valid on an interface property declaration.
            Overrides Property H
            ~~~~~~~~~
BC30273: 'NotOverridable' is not valid on an interface property declaration.
            NotOverridable Property J
            ~~~~~~~~~~~~~~
BC30273: 'Overridable' is not valid on an interface property declaration.
            Overridable Property K
            ~~~~~~~~~~~
BC30273: 'Iterator' is not valid on an interface property declaration.
            Iterator Property Goo() as IEnumerator
            ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30275ERR_InterfaceCantUseEventSpecifier1()
            CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceCantUseEventSpecifier1">
        <file name="a.vb"><![CDATA[
        Interface I1
            'COMPILEERROR: BC30275, "friend"
            Friend Event goo()
        End Interface
        Interface I2
            'COMPILEERROR: BC30275, "protected"
            Protected Event goo()
        End Interface
        Interface I3
            'COMPILEERROR: BC30275, "Private"
            Private Event goo()
        End Interface
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InterfaceCantUseEventSpecifier1, "Friend").WithArguments("Friend"),
    Diagnostic(ERRID.ERR_InterfaceCantUseEventSpecifier1, "Protected").WithArguments("Protected"),
    Diagnostic(ERRID.ERR_InterfaceCantUseEventSpecifier1, "Private").WithArguments("Private"))
 
        End Sub
 
        <WorkItem(539943, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539943")>
        <Fact>
        Public Sub BC30280ERR_BadEmptyEnum1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadEmptyEnum1">
        <file name="a.vb"><![CDATA[
        Enum SEX
        End Enum
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30280: Enum 'SEX' must contain at least one member.
Enum SEX
     ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30283ERR_CantOverrideConstructor()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantOverrideConstructor">
        <file name="a.vb"><![CDATA[
        Class Class2
        Inherits Class1
            Overrides Sub New()
        End Sub
        End Class
        Class Class1
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30283: 'Sub New' cannot be declared 'Overrides'.
            Overrides Sub New()
            ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30284ERR_OverrideNotNeeded3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverrideNotNeeded3">
        <file name="a.vb"><![CDATA[
        Imports System
        Namespace NS30284
            Public Class Class1
                Dim xprop2, xprop3, xprop5
            End Class
            Public Class Class2
                Inherits Class1
                Interface interface1
                    ReadOnly Property prop1()
                    WriteOnly Property prop2()
                    WriteOnly Property prop3()
                    ReadOnly Property prop5()
                End Interface
                Public Sub New()
                    MyBase.New()
                End Sub
                Public Sub New(ByVal val As Short)
                    MyBase.New()
                End Sub
                'COMPILEERROR: BC30284, "prop1"
                Overrides WriteOnly Property prop1() As String
                    Set(ByVal Value As String)
                    End Set
                End Property
                'COMPILEERROR: BC30284, "prop2"
                Overrides ReadOnly Property prop2() As String
                    Get
                        Return "30284"
                    End Get
                End Property
                'COMPILEERROR: BC30284, "prop3"
                Overrides Property prop3() As String
                    Get
                        Return "30284"
                    End Get
                    Set(ByVal Value As String)
                    End Set
                End Property
                'COMPILEERROR: BC30284, "prop5"
                Overrides ReadOnly Property prop5()
                    Get
                        Return "30284"
                    End Get
                End Property
            End Class
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30284: property 'prop1' cannot be declared 'Overrides' because it does not override a property in a base class.
                Overrides WriteOnly Property prop1() As String
                                             ~~~~~
BC30284: property 'prop2' cannot be declared 'Overrides' because it does not override a property in a base class.
                Overrides ReadOnly Property prop2() As String
                                            ~~~~~
BC30284: property 'prop3' cannot be declared 'Overrides' because it does not override a property in a base class.
                Overrides Property prop3() As String
                                   ~~~~~
BC30284: property 'prop5' cannot be declared 'Overrides' because it does not override a property in a base class.
                Overrides ReadOnly Property prop5()
                                            ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        '        <Fact()>
        '        Public Sub BC30293ERR_RecordEmbeds2()
        '            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib(
        '    <compilation name="RecordEmbeds2">
        '       <file name="a.vb"><![CDATA[
        '            Class C1
        '            End Class
        '            Class C2
        '                Inherits C1
        '                Overrides WriteOnly Property prop1() As String
        '                    Set(ByVal value As String)
        '                    End Set
        '                End Property
        '            End Class
        '        ]]></file>
        '    </compilation>)
        '            Dim expectedErrors1 = <errors><![CDATA[
        'BC30293: property 'prop1' cannot be declared 'Overrides' because it does not override a property in a base class.	
        '            Overrides WriteOnly Property prop1() As String
        '                ~~~~~~
        '     ]]></errors>
        '            CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
        '        End Sub
 
        <Fact>
        Public Sub BC30294ERR_RecordCycle2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="RecordCycle2">
        <file name="a.vb"><![CDATA[
        Public Structure yyy
            Dim a As yyy
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30294: Structure 'yyy' cannot contain an instance of itself: 
    'yyy' contains 'yyy' (variable 'a').
            Dim a As yyy
                ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30296ERR_InterfaceCycle1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceCycle1">
        <file name="a.vb"><![CDATA[
        Public Class c0
            Protected Class cls1
                Public Interface I2
                    Interface I2
                        Inherits I2
                    End Interface
                End Interface
            End Class
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30296: Interface 'c0.cls1.I2.I2' cannot inherit from itself: 
    'c0.cls1.I2.I2' inherits from 'c0.cls1.I2.I2'.
                        Inherits I2
                                 ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30299ERR_InheritsFromCantInherit3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InheritsFromCantInherit3">
        <file name="a.vb"><![CDATA[
        Class c1
        NotInheritable Class c1_1
            Class c1_4
                Inherits c1_1
            End Class
        End Class
            Class c1_2
                Inherits c1_1
            End Class
        End Class
        Class c1_3
            Inherits c1.c1_1
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30299: 'c1_4' cannot inherit from class 'c1_1' because 'c1_1' is declared 'NotInheritable'.
                Inherits c1_1
                         ~~~~
BC30299: 'c1_2' cannot inherit from class 'c1_1' because 'c1_1' is declared 'NotInheritable'.
                Inherits c1_1
                         ~~~~
BC30299: 'c1_3' cannot inherit from class 'c1_1' because 'c1_1' is declared 'NotInheritable'.
            Inherits c1.c1_1
                     ~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30300ERR_OverloadWithOptional2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithOptional2">
        <file name="a.vb"><![CDATA[
        Class Cla30300
            'COMPILEERROR: BC30300, "goo"
            Public Function goo(ByVal arg As ULong)
                Return "BC30300"
            End Function
            Public Function goo(Optional ByVal arg As ULong = 1)
                Return "BC30300"
            End Function
            'COMPILEERROR: BC30300, "goo1"
            Public Function goo1()
                Return "BC30300"
            End Function
            Public Function goo1(Optional ByVal arg As ULong = 1)
                Return "BC30300"
            End Function
            'COMPILEERROR: BC30300, "goo2"
            Public Function goo2(ByVal arg As Integer)
                Return "BC30300"
            End Function
            Public Function goo2(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
                Return "BC30300"
            End Function
            'COMPILEERROR: BC30300, "goo3"
            Public Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
                Return "BC30300"
            End Function
            Public Function goo3(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
                Return "BC30300"
            End Function
        End Class
        Interface Scen2_1
            'COMPILEERROR: BC30300, "goo"
            Function goo(ByVal arg As ULong)
            Function goo(Optional ByVal arg As ULong = 1)
            'COMPILEERROR: BC30300, "goo1"
            Function goo1()
            Function goo1(Optional ByVal arg As ULong = 1)
            'COMPILEERROR: BC30300, "goo2"
            Function goo2(ByVal arg As Integer)
            Function goo2(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
            'COMPILEERROR: BC30300, "goo3"
            Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
            Function goo3(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30300: 'Public Function goo(arg As ULong) As Object' and 'Public Function goo([arg As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
            Public Function goo(ByVal arg As ULong)
                            ~~~
BC30300: 'Public Function goo3(arg As Integer, arg1 As ULong) As Object' and 'Public Function goo3(arg As Integer, [arg1 As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
            Public Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
                            ~~~~
BC30300: 'Function goo(arg As ULong) As Object' and 'Function goo([arg As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
            Function goo(ByVal arg As ULong)
                     ~~~
BC30300: 'Function goo3(arg As Integer, arg1 As ULong) As Object' and 'Function goo3(arg As Integer, [arg1 As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
            Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
                     ~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30301ERR_OverloadWithReturnType2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateProcDef1">
        <file name="a.vb"><![CDATA[
            Class C1
            End Class

            Class C2
            End Class

            Class C3
                Public Function Goo1(x as Integer) as Boolean ' 1
                  return true
                End Function
                Public Function Goo1(x as Integer) as Boolean ' 2
                  return true
                End Function
                Public Function Goo1(x as Integer) as Boolean ' 3
                  return true
                End Function
                Public Function Goo1(x as Integer) as Decimal ' 4
                  return 2.2
                End Function
                Public Function Goo1(x as Integer) as String  ' 5
                  return "42"
                End Function

                Public Function Goo2(Of T as C1)(x as Integer) as T ' 1
                  return nothing
                End Function
                Public Function Goo2(Of S as C2)(x as Integer) as S  ' 2
                  return nothing
                End Function

                Public Function Goo3(x as Integer) as Boolean ' 1
                  return true
                End Function
                Public Function Goo3(x as Decimal) as Boolean ' 2
                  return true
                End Function
                Public Function Goo3(x as Integer) as Boolean ' 3
                  return true
                End Function
                Public Function Goo3(x as Integer) as Boolean ' 4
                  return true
                End Function
                Public Function Goo3(x as Integer) as String  ' 5
                  return true
                End Function

                Public Shared Sub Main()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Public Function Goo1(x As Integer) As Boolean' has multiple definitions with identical signatures.
                Public Function Goo1(x as Integer) as Boolean ' 1
                                ~~~~
BC30269: 'Public Function Goo1(x As Integer) As Boolean' has multiple definitions with identical signatures.
                Public Function Goo1(x as Integer) as Boolean ' 2
                                ~~~~
BC30301: 'Public Function Goo1(x As Integer) As Boolean' and 'Public Function Goo1(x As Integer) As Decimal' cannot overload each other because they differ only by return types.
                Public Function Goo1(x as Integer) as Boolean ' 3
                                ~~~~
BC30301: 'Public Function Goo1(x As Integer) As Decimal' and 'Public Function Goo1(x As Integer) As String' cannot overload each other because they differ only by return types.
                Public Function Goo1(x as Integer) as Decimal ' 4
                                ~~~~
BC30269: 'Public Function Goo2(Of T As C1)(x As Integer) As T' has multiple definitions with identical signatures.
                Public Function Goo2(Of T as C1)(x as Integer) as T ' 1
                                ~~~~
BC30269: 'Public Function Goo3(x As Integer) As Boolean' has multiple definitions with identical signatures.
                Public Function Goo3(x as Integer) as Boolean ' 1
                                ~~~~
BC30269: 'Public Function Goo3(x As Integer) As Boolean' has multiple definitions with identical signatures.
                Public Function Goo3(x as Integer) as Boolean ' 3
                                ~~~~
BC30301: 'Public Function Goo3(x As Integer) As Boolean' and 'Public Function Goo3(x As Integer) As String' cannot overload each other because they differ only by return types.
                Public Function Goo3(x as Integer) as Boolean ' 4
                                ~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30301ERR_OverloadWithReturnType2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithReturnType2">
        <file name="a.vb"><![CDATA[
        Class Cla30301
            'COMPILEERROR: BC30301, "goo"
            Public Function goo(ByVal arg As ULong)
                Return "BC30301"
            End Function
            Public Function goo(ByVal arg As ULong) As String
                Return "BC30301"
            End Function
            'COMPILEERROR: BC30301, "goo1"
            Public Function goo1()
                Return "BC30301"
            End Function
            Public Function goo1() As String
                Return "BC30301"
            End Function
        End Class
        Interface Interface30301
            'COMPILEERROR: BC30301, "goo"
            Function goo(ByVal arg As ULong)
            Function goo(ByVal arg As ULong) As String
            'COMPILEERROR: BC30301, "goo1"
            Function goo1()
            Function goo1() As String
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30301: 'Public Function goo(arg As ULong) As Object' and 'Public Function goo(arg As ULong) As String' cannot overload each other because they differ only by return types.
            Public Function goo(ByVal arg As ULong)
                            ~~~
BC30301: 'Public Function goo1() As Object' and 'Public Function goo1() As String' cannot overload each other because they differ only by return types.
            Public Function goo1()
                            ~~~~
BC30301: 'Function goo(arg As ULong) As Object' and 'Function goo(arg As ULong) As String' cannot overload each other because they differ only by return types.
            Function goo(ByVal arg As ULong)
                     ~~~
BC30301: 'Function goo1() As Object' and 'Function goo1() As String' cannot overload each other because they differ only by return types.
            Function goo1()
                     ~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30302ERR_TypeCharWithType1_01()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="c.vb"><![CDATA[
        Class C
            Dim A% As Integer
            Dim B& As Long
            Dim C@ As Decimal
            Dim D! As Single
            Dim E# As Double
            Dim F$ As String
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
            Dim A% As Integer
                ~~
BC30302: Type character '&' cannot be used in a declaration with an explicit type.
            Dim B& As Long
                ~~
BC30302: Type character '@' cannot be used in a declaration with an explicit type.
            Dim C@ As Decimal
                ~~
BC30302: Type character '!' cannot be used in a declaration with an explicit type.
            Dim D! As Single
                ~~
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
            Dim E# As Double
                ~~
BC30302: Type character '$' cannot be used in a declaration with an explicit type.
            Dim F$ As String
                ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30302ERR_TypeCharWithType1_02()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="c.vb"><![CDATA[
        Class C
            Property A% As Integer
            Property B& As Long
            Property C@ As Decimal
            Property D! As Single
            Property E# As Double
            Property F$ As String
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
            Property A% As Integer
                     ~~
BC30302: Type character '&' cannot be used in a declaration with an explicit type.
            Property B& As Long
                     ~~
BC30302: Type character '@' cannot be used in a declaration with an explicit type.
            Property C@ As Decimal
                     ~~
BC30302: Type character '!' cannot be used in a declaration with an explicit type.
            Property D! As Single
                     ~~
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
            Property E# As Double
                     ~~
BC30302: Type character '$' cannot be used in a declaration with an explicit type.
            Property F$ As String
                     ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30302ERR_TypeCharWithType1_03()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="c.vb"><![CDATA[
Option Infer On            
Class C
    Shared Sub Main()
        For Each x% In New Integer() {1, 1}
        Next
        For Each x& In New Long() {1, 1}
        Next
        For Each x! In New Double() {1, 1}
        Next
        For Each x# In New Double() {1, 1}
        Next
        For Each x@ In New Decimal() {1, 1}
        Next
        'COMPILEERROR: BC30302
        For Each x% As Long In New Long() {1, 1, 1}
        Next
        For Each x# As Single In New Double() {1, 1, 1}
        Next
        For Each x@ As Decimal In New Decimal() {1, 1, 1}
        Next
        For Each x! As Object In New Long() {1, 1, 1}
        Next
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
        For Each x% As Long In New Long() {1, 1, 1}
                 ~~
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
        For Each x# As Single In New Double() {1, 1, 1}
                 ~~
BC30302: Type character '@' cannot be used in a declaration with an explicit type.
        For Each x@ As Decimal In New Decimal() {1, 1, 1}
                 ~~
BC30302: Type character '!' cannot be used in a declaration with an explicit type.
        For Each x! As Object In New Long() {1, 1, 1}
                 ~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30302ERR_TypeCharWithType1_04()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="c.vb"><![CDATA[
Option Infer On
Imports System
Module Module1
    Sub Main()
        Dim arr15#(,) As Double ' Invalid
    End Sub
End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
        Dim arr15#(,) As Double ' Invalid
            ~~~~~~
BC42024: Unused local variable: 'arr15'.
        Dim arr15#(,) As Double ' Invalid
            ~~~~~~
]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30303ERR_TypeCharOnSub()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="TypeCharOnSub">
        <file name="a.vb"><![CDATA[
        Interface I1
             Sub x%()
             Sub x#()
             Sub x@()
             Sub x!()
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Sub x()' has multiple definitions with identical signatures.
             Sub x%()
                 ~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
             Sub x%()
                 ~~
BC30269: 'Sub x()' has multiple definitions with identical signatures.
             Sub x#()
                 ~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
             Sub x#()
                 ~~
BC30269: 'Sub x()' has multiple definitions with identical signatures.
             Sub x@()
                 ~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
             Sub x@()
                 ~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
             Sub x!()
                 ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30305ERR_PartialMethodDefaultParameterValue2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            'COMPILEERROR: BC30305, "Goo6"
            Partial Private Sub Goo6(Optional ByVal x As Integer = 1)
            End Sub
            Private Sub Goo6(Optional ByVal x As Integer = 2)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC37203: Optional parameter of a method 'Private Sub Goo6([x As Integer = 2])' does not have the same default value as the corresponding parameter of the partial method 'Private Sub Goo6([x As Integer = 1])'.
            Private Sub Goo6(Optional ByVal x As Integer = 2)
                        ~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30305ERR_OverloadWithDefault2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            'COMPILEERROR: BC30305, "Goo6"
            Partial Private Sub Goo6(Optional ByVal x As Integer = 1)
            End Sub
            Sub Goo6(Optional ByVal x As Integer = 2)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31441: Method 'Goo6' must be declared 'Private' in order to implement partial method 'Goo6'.
            Sub Goo6(Optional ByVal x As Integer = 2)
                ~~~~
BC37203: Optional parameter of a method 'Public Sub Goo6([x As Integer = 2])' does not have the same default value as the corresponding parameter of the partial method 'Private Sub Goo6([x As Integer = 1])'.
            Sub Goo6(Optional ByVal x As Integer = 2)
                ~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(ParamArray x() As Integer)
            End Sub
            Private Sub Goo6(x() As Integer)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC37204: Parameter of a method 'Private Sub Goo6(x As Integer())' differs by ParamArray modifier from the corresponding parameter of the partial method 'Private Sub Goo6(ParamArray x As Integer())'.
            Private Sub Goo6(x() As Integer)
                        ~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(x() As Integer)
            End Sub
            Private Sub Goo6(ParamArray x() As Integer)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC37204: Parameter of a method 'Private Sub Goo6(ParamArray x As Integer())' differs by ParamArray modifier from the corresponding parameter of the partial method 'Private Sub Goo6(x As Integer())'.
            Private Sub Goo6(ParamArray x() As Integer)
                        ~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ''' <remarks>Only use with PEModuleSymbol and PEParameterSymbol</remarks>
        Private Sub AssertHasExactlyOneParamArrayAttribute(m As ModuleSymbol, paramSymbol As ParameterSymbol)
            Dim peModule = DirectCast(m, PEModuleSymbol).Module
            Dim paramHandle = DirectCast(paramSymbol, PEParameterSymbol).Handle
 
            Assert.Equal(1, peModule.GetParamArrayCountOrThrow(paramHandle))
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(<System.ParamArray()> x() As Integer)
            End Sub
            Private Sub Goo6(x() As Integer)
            End Sub

            Sub Use()
                Goo6()
            End Sub
        End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
 
            CompileAndVerify(compilation1,
                             symbolValidator:=Sub(m As ModuleSymbol)
                                                  Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
                                                  Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
                                                  Dim GooParam = Goo6.Parameters(0)
                                                  Assert.Equal(0, GooParam.GetAttributes().Length)
                                                  Assert.True(GooParam.IsParamArray)
                                                  AssertHasExactlyOneParamArrayAttribute(m, GooParam)
                                              End Sub)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(x() As Integer)
            End Sub
            Private Sub Goo6(<System.ParamArray()> x() As Integer)
            End Sub

            Sub Use()
                Goo6()
            End Sub
        End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
 
            CompileAndVerify(compilation1,
                             symbolValidator:=Sub(m As ModuleSymbol)
                                                  Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
                                                  Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
                                                  Dim GooParam = Goo6.Parameters(0)
                                                  Assert.Equal(0, GooParam.GetAttributes().Length)
                                                  Assert.True(GooParam.IsParamArray)
                                                  AssertHasExactlyOneParamArrayAttribute(m, GooParam)
                                              End Sub)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(ParamArray x() As Integer)
            End Sub
            Private Sub Goo6(<System.ParamArray()> x() As Integer)
            End Sub

            Sub Use()
                Goo6()
            End Sub
        End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
 
            CompileAndVerify(compilation1,
                             symbolValidator:=Sub(m As ModuleSymbol)
                                                  Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
                                                  Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
                                                  Dim GooParam = Goo6.Parameters(0)
                                                  Assert.Equal(0, GooParam.GetAttributes().Length)
                                                  Assert.True(GooParam.IsParamArray)
                                                  AssertHasExactlyOneParamArrayAttribute(m, GooParam)
                                              End Sub)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_6()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(<System.ParamArray()> x() As Integer)
            End Sub
            Private Sub Goo6(ParamArray x() As Integer)
            End Sub

            Sub Use()
                Goo6()
            End Sub
        End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
 
            CompileAndVerify(compilation1,
                             symbolValidator:=Sub(m As ModuleSymbol)
                                                  Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
                                                  Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
                                                  Dim GooParam = Goo6.Parameters(0)
                                                  Assert.Equal(0, GooParam.GetAttributes().Length)
                                                  Assert.True(GooParam.IsParamArray)
                                                  AssertHasExactlyOneParamArrayAttribute(m, GooParam)
                                              End Sub)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_7()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(<System.ParamArray()> x() As Integer)
            End Sub
            Private Sub Goo6(<System.ParamArray()> x() As Integer)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30663: Attribute 'ParamArrayAttribute' cannot be applied multiple times.
            Private Sub Goo6(<System.ParamArray()> x() As Integer)
                              ~~~~~~~~~~~~~~~~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_8()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(ParamArray x() As Integer)
            End Sub
            Private Sub Goo6(ParamArray x() As Integer)
            End Sub

            Sub Use()
                Goo6()
            End Sub
        End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
 
            CompileAndVerify(compilation1,
                             symbolValidator:=Sub(m As ModuleSymbol)
                                                  Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
                                                  Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
                                                  Dim GooParam = Goo6.Parameters(0)
                                                  Assert.Equal(0, GooParam.GetAttributes().Length)
                                                  Assert.True(GooParam.IsParamArray)
                                                  AssertHasExactlyOneParamArrayAttribute(m, GooParam)
                                              End Sub)
        End Sub
 
        <Fact>
        Public Sub ERR_PartialMethodParamArrayMismatch2_9()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30305
            Partial Private Sub Goo6(x() As Integer)
            End Sub
            Private Sub Goo6(x() As Integer)
            End Sub

            Sub Use()
                Goo6(Nothing)
            End Sub
        End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
 
            CompileAndVerify(compilation1,
                             symbolValidator:=Sub(m As ModuleSymbol)
                                                  Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
                                                  Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
                                                  Dim GooParam = Goo6.Parameters(0)
                                                  Assert.Equal(0, GooParam.GetAttributes().Length)
                                                  Assert.False(GooParam.IsParamArray)
                                              End Sub)
        End Sub
 
        <Fact()>
        Public Sub BC30307ERR_OverrideWithDefault2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OverloadWithDefault2">
        <file name="a.vb"><![CDATA[
        Module mod30307
            Class Class1
                Overridable Sub Scen1(Optional ByVal x As String = "bob")
                End Sub
                Overridable Sub Scen2(Optional ByVal x As Object = "bob")
                End Sub
                Overridable Function Scen3(Optional ByVal x As Integer = 3)
                End Function
                Overridable Function Scen4(Optional ByVal x As Integer = 3)
                End Function
            End Class
            Class class2
                Inherits Class1
                'COMPILEERROR:  BC30307, "Scen1"
                Overrides Sub Scen1(Optional ByVal x As String = "BOB")
                End Sub
                'COMPILEERROR:  BC30307, "Scen2"
                Overrides Sub Scen2(Optional ByVal x As Object = "BOB")
                End Sub
                Overrides Function Scen3(Optional ByVal x As Integer = 2 + 1)
                End Function
                'COMPILEERROR:  BC30307, "Scen4"
                Overrides Function Scen4(Optional ByVal x As Integer = 4)
                End Function
            End Class
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30307: 'Public Overrides Sub Scen1([x As String = "BOB"])' cannot override 'Public Overridable Sub Scen1([x As String = "bob"])' because they differ by the default values of optional parameters.
                Overrides Sub Scen1(Optional ByVal x As String = "BOB")
                              ~~~~~
BC30307: 'Public Overrides Sub Scen2([x As Object = "BOB"])' cannot override 'Public Overridable Sub Scen2([x As Object = "bob"])' because they differ by the default values of optional parameters.
                Overrides Sub Scen2(Optional ByVal x As Object = "BOB")
                              ~~~~~
BC30307: 'Public Overrides Function Scen4([x As Integer = 4]) As Object' cannot override 'Public Overridable Function Scen4([x As Integer = 3]) As Object' because they differ by the default values of optional parameters.
                Overrides Function Scen4(Optional ByVal x As Integer = 4)
                                   ~~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30308ERR_OverrideWithOptional2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OverrideWithOptional2">
        <file name="a.vb"><![CDATA[
        Module mod30308
            Class Class1
                Overridable Sub Scen1(Optional ByVal x As String = "bob")
                End Sub
                Overridable Sub Scen2(Optional ByVal x As Object = "bob")
                End Sub
                Overridable Function Scen3(Optional ByVal x As Integer = 3)
                End Function
                Overridable Function Scen4(Optional ByVal x As Integer = 3)
                End Function
            End Class
            Class class2
                Inherits Class1
                'COMPILEERROR:  BC30308, "Scen1"
                Overrides Sub Scen1(ByVal x As String)
                End Sub
                'COMPILEERROR:  BC30308, "Scen2"
                Overrides Sub Scen2(ByVal x As Object)
                End Sub
                Overrides Function Scen3(ByVal x As Integer)
                End Function
                'COMPILEERROR:  BC30308, "Scen4"
                Overrides Function Scen4(ByVal x As Integer)
                End Function
            End Class
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
 BC30308: 'Public Overrides Sub Scen1(x As String)' cannot override 'Public Overridable Sub Scen1([x As String = "bob"])' because they differ by optional parameters.
                Overrides Sub Scen1(ByVal x As String)
                              ~~~~~
BC30308: 'Public Overrides Sub Scen2(x As Object)' cannot override 'Public Overridable Sub Scen2([x As Object = "bob"])' because they differ by optional parameters.
                Overrides Sub Scen2(ByVal x As Object)
                              ~~~~~
BC30308: 'Public Overrides Function Scen3(x As Integer) As Object' cannot override 'Public Overridable Function Scen3([x As Integer = 3]) As Object' because they differ by optional parameters.
                Overrides Function Scen3(ByVal x As Integer)
                                   ~~~~~
BC30308: 'Public Overrides Function Scen4(x As Integer) As Object' cannot override 'Public Overridable Function Scen4([x As Integer = 3]) As Object' because they differ by optional parameters.
                Overrides Function Scen4(ByVal x As Integer)
                                   ~~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30345ERR_OverloadWithByref2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithByref2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30345
            Public overloads Sub Goo1(ByVal x as Integer) ' 1
            End Sub
            Public overloads Sub Goo1(ByRef x as Integer) ' 2
            End Sub

            Public overloads Function Goo2(ByVal x as Integer) as Integer' 1
              return 1
            End Function
            Public overloads Function Goo2(ByRef x as Integer) as Decimal' 2
              return 2.2
            End Function

            Public Shared Sub Main()
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30345: 'Public Overloads Sub Goo1(x As Integer)' and 'Public Overloads Sub Goo1(ByRef x As Integer)' cannot overload each other because they differ only by parameters declared 'ByRef' or 'ByVal'.
            Public overloads Sub Goo1(ByVal x as Integer) ' 1
                                 ~~~~
BC30301: 'Public Overloads Function Goo2(x As Integer) As Integer' and 'Public Overloads Function Goo2(ByRef x As Integer) As Decimal' cannot overload each other because they differ only by return types.
            Public overloads Function Goo2(ByVal x as Integer) as Integer' 1
                                      ~~~~
BC30345: 'Public Overloads Function Goo2(x As Integer) As Integer' and 'Public Overloads Function Goo2(ByRef x As Integer) As Decimal' cannot overload each other because they differ only by parameters declared 'ByRef' or 'ByVal'.
            Public overloads Function Goo2(ByVal x as Integer) as Integer' 1
                                      ~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30345ERR_OverloadWithByref2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithByref2">
        <file name="a.vb"><![CDATA[
        Public Class Cls30345
            'COMPILEERROR: BC30345, "Goo"
            Partial Private Sub Goo(Optional ByVal x As Integer = 2)
            End Sub
            Sub Goo(Optional ByRef x As Integer = 2)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30345: 'Private Sub Goo([x As Integer = 2])' and 'Public Sub Goo([ByRef x As Integer = 2])' cannot overload each other because they differ only by parameters declared 'ByRef' or 'ByVal'.
            Partial Private Sub Goo(Optional ByVal x As Integer = 2)
                                ~~~                                      
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30354ERR_InheritsFromNonInterface()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InheritsFromNonInterface">
        <file name="a.vb"><![CDATA[
        Module M1
            Interface I1
                 Inherits System.Enum
            End Interface
            Interface I2
                Inherits Scen1
            End Interface
            Interface I3
                Inherits System.Exception
            End Interface
            NotInheritable Class Scen1
                End Class
            END Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30354: Interface can inherit only from another interface.
                 Inherits System.Enum
                          ~~~~~~~~~~~
BC30354: Interface can inherit only from another interface.
                Inherits Scen1
                         ~~~~~
BC30354: Interface can inherit only from another interface.
                Inherits System.Exception
                         ~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30359ERR_DuplicateDefaultProps1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Interface I
            Default Property P(o)
            ReadOnly Property Q(o)
            Default WriteOnly Property R(o) ' BC30359
            Default Property P(x, y)
            Default Property Q(x, y) ' BC30359
            Property R(x, y)
        End Interface
        Class C
            Default Property P(o)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            ReadOnly Property Q(o)
                Get
                    Return Nothing
                End Get
            End Property
            Default WriteOnly Property R(o) ' BC30359
                Set(value)
                End Set
            End Property
            Default Property P(x, y)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            Default Property Q(x, y) ' BC30359
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            Property R(x, y)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
        End Class
        Structure S
            Default Property P(o)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            ReadOnly Property Q(o)
                Get
                    Return Nothing
                End Get
            End Property
            Default WriteOnly Property R(o) ' BC30359
                Set(value)
                End Set
            End Property
            Default Property P(x, y)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            Default Property Q(x, y) ' BC30359
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            Property R(x, y)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
        End Structure
        ]]></file>
    </compilation>)
            compilation1.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC30359: 'Default' can be applied to only one property name in a interface.
            Default WriteOnly Property R(o) ' BC30359
                                       ~
BC30359: 'Default' can be applied to only one property name in a interface.
            Default Property Q(x, y) ' BC30359
                             ~
BC30359: 'Default' can be applied to only one property name in a class.
            Default WriteOnly Property R(o) ' BC30359
                                       ~
BC30359: 'Default' can be applied to only one property name in a class.
            Default Property Q(x, y) ' BC30359
                             ~
BC30359: 'Default' can be applied to only one property name in a structure.
            Default WriteOnly Property R(o) ' BC30359
                                       ~
BC30359: 'Default' can be applied to only one property name in a structure.
            Default Property Q(x, y) ' BC30359
                             ~
     ]]></errors>)
        End Sub
 
        ' Property names with different case.
        <Fact>
        Public Sub BC30359ERR_DuplicateDefaultProps1_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
    Default ReadOnly Property P(o)
    Default WriteOnly Property p(x, y)
End Interface
Class C
    Default ReadOnly Property q(o)
        Get
            Return Nothing
        End Get
    End Property
    Default WriteOnly Property Q(x, y)
        Set(value)
        End Set
    End Property
End Class
Structure S
    Default ReadOnly Property R(o)
        Get
            Return Nothing
        End Get
    End Property
    Default WriteOnly Property r(x, y)
        Set(value)
        End Set
    End Property
End Structure
        ]]></file>
    </compilation>)
            compilation1.AssertNoErrors()
        End Sub
 
        <Fact>
        Public Sub BC30361ERR_DefaultMissingFromProperty2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DefaultMissingFromProperty2">
        <file name="a.vb"><![CDATA[
        MustInherit Class C
            Default Overridable Overloads ReadOnly Property P(x, y)
                Get
                    Return Nothing
                End Get
            End Property
            MustOverride Overloads Property P
        End Class
        Interface I
            Overloads WriteOnly Property Q(o)
            Overloads ReadOnly Property Q
            Default Overloads Property Q(x, y)
        End Interface
        Structure S
            ReadOnly Property R(x)
                Get
                    Return Nothing
                End Get
            End Property
            Default ReadOnly Property R(x, y)
                Get
                    Return Nothing
                End Get
            End Property
            Default ReadOnly Property R(x, y, z)
                Get
                    Return Nothing
                End Get
            End Property
        End Structure
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30361: 'Public Overridable Overloads ReadOnly Default Property P(x As Object, y As Object) As Object' and 'Public MustOverride Overloads Property P As Object' cannot overload each other because only one is declared 'Default'.
            MustOverride Overloads Property P
                                            ~
BC30361: 'Default Property Q(x As Object, y As Object) As Object' and 'WriteOnly Property Q(o As Object) As Object' cannot overload each other because only one is declared 'Default'.
            Overloads WriteOnly Property Q(o)
                                         ~
BC30361: 'Default Property Q(x As Object, y As Object) As Object' and 'ReadOnly Property Q As Object' cannot overload each other because only one is declared 'Default'.
            Overloads ReadOnly Property Q
                                        ~
BC30361: 'Public ReadOnly Default Property R(x As Object, y As Object) As Object' and 'Public ReadOnly Property R(x As Object) As Object' cannot overload each other because only one is declared 'Default'.
            ReadOnly Property R(x)
                              ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Property names with different case.
        <Fact>
        Public Sub BC30361ERR_DefaultMissingFromProperty2_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DefaultMissingFromProperty2">
        <file name="a.vb"><![CDATA[
Interface I
    Default Overloads ReadOnly Property P(o)
    Overloads WriteOnly Property p(x, y)
End Interface
Class C
    Overloads ReadOnly Property q(o)
        Get
            Return Nothing
        End Get
    End Property
    Default Overloads WriteOnly Property Q(x, y)
        Set(value)
        End Set
    End Property
End Class
Structure S
    Overloads ReadOnly Property R(o)
        Get
            Return Nothing
        End Get
    End Property
    Default Overloads WriteOnly Property r(x, y)
        Set(value)
        End Set
    End Property
End Structure
        ]]></file>
    </compilation>)
            compilation1.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC30361: 'ReadOnly Default Property P(o As Object) As Object' and 'WriteOnly Property p(x As Object, y As Object) As Object' cannot overload each other because only one is declared 'Default'.
    Overloads WriteOnly Property p(x, y)
                                 ~
BC30361: 'Public Overloads WriteOnly Default Property Q(x As Object, y As Object) As Object' and 'Public Overloads ReadOnly Property q(o As Object) As Object' cannot overload each other because only one is declared 'Default'.
    Overloads ReadOnly Property q(o)
                                ~
BC30361: 'Public Overloads WriteOnly Default Property r(x As Object, y As Object) As Object' and 'Public Overloads ReadOnly Property R(o As Object) As Object' cannot overload each other because only one is declared 'Default'.
    Overloads ReadOnly Property R(o)
                                ~
     ]]></errors>)
        End Sub
 
        <Fact>
        Public Sub BC30362ERR_OverridingPropertyKind2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverridingPropertyKind2">
        <file name="a.vb"><![CDATA[
        Public Class Class1
            Dim xprop11, xprop12
            Public Overridable ReadOnly Property prop10()
                Get
                    Return "Class1 prop10"
                End Get
            End Property
            Public Overridable WriteOnly Property prop11()
                Set(ByVal Value)
                    xprop11 = Value
                End Set
            End Property
            Public Overridable Property prop12()
                Get
                    prop12 = xprop12
                End Get
                Set(ByVal Value)
                    xprop12 = Value
                End Set
            End Property
        End Class
        Public Class Class2
            Inherits Class1
            'COMPILEERROR: BC30362, "prop10"
            Overrides WriteOnly Property prop10()
                Set(ByVal Value)
                End Set
            End Property
            'COMPILEERROR: BC30362, "prop11"
            Overrides ReadOnly Property prop11()
                Get
                End Get
            End Property
            'COMPILEERROR: BC30362, "prop12"
            Overrides ReadOnly Property prop12()
                Get
                End Get
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30362: 'Public Overrides WriteOnly Property prop10 As Object' cannot override 'Public Overridable ReadOnly Property prop10 As Object' because they differ by 'ReadOnly' or 'WriteOnly'.
            Overrides WriteOnly Property prop10()
                                         ~~~~~~
BC30362: 'Public Overrides ReadOnly Property prop11 As Object' cannot override 'Public Overridable WriteOnly Property prop11 As Object' because they differ by 'ReadOnly' or 'WriteOnly'.
            Overrides ReadOnly Property prop11()
                                        ~~~~~~
BC30362: 'Public Overrides ReadOnly Property prop12 As Object' cannot override 'Public Overridable Property prop12 As Object' because they differ by 'ReadOnly' or 'WriteOnly'.
            Overrides ReadOnly Property prop12()
                                        ~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30362ERR_OverridingPropertyKind3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
    <compilation name="OverridingPropertyKind3">
        <file name="a.vb"><![CDATA[
    Class D3
        Inherits D2

        Public Overrides Property P_rw_rw_r As Integer
            Get
                Return MyBase.P_rw_rw_r
            End Get
            Set(value As Integer)
                MyBase.P_rw_r_w = value
            End Set
        End Property

        Public Overrides Property P_rw_rw_w As Integer
            Get
                Return MyBase.P_rw_rw_r
            End Get
            Set(value As Integer)
                MyBase.P_rw_rw_w = value
            End Set
        End Property

    End Class
        ]]></file>
    </compilation>, ClassesWithReadWriteProperties)
            Dim expectedErrors1 = <errors><![CDATA[
BC30362: 'Public Overrides Property P_rw_rw_r As Integer' cannot override 'Public Overrides ReadOnly Property P_rw_rw_r As Integer' because they differ by 'ReadOnly' or 'WriteOnly'.
        Public Overrides Property P_rw_rw_r As Integer
                                  ~~~~~~~~~
BC30362: 'Public Overrides Property P_rw_rw_w As Integer' cannot override 'Public Overrides WriteOnly Property P_rw_rw_w As Integer' because they differ by 'ReadOnly' or 'WriteOnly'.
        Public Overrides Property P_rw_rw_w As Integer
                                  ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30364ERR_BadFlagsOnNew1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadFlagsOnNew1">
        <file name="a.vb"><![CDATA[
        Class S1
            overridable SUB NEW()
            end sub
        End Class 
        Class S2
            Shadows SUB NEW()
            end sub
        End Class 
        Class S3
            MustOverride SUB NEW()
        End Class 
        Class S4
            notoverridable SUB NEW()
            end sub
        End Class 
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30364: 'Sub New' cannot be declared 'overridable'.
            overridable SUB NEW()
            ~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'Shadows'.
            Shadows SUB NEW()
            ~~~~~~~
BC30364: 'Sub New' cannot be declared 'MustOverride'.
            MustOverride SUB NEW()
            ~~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'notoverridable'.
            notoverridable SUB NEW()
            ~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30366ERR_OverloadingPropertyKind2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadingPropertyKind2">
        <file name="a.vb"><![CDATA[
        Class Cls30366(Of T)
            ' COMPILEERROR: BC30366, "P1"
            ReadOnly Property P1() As T
                Get
                End Get
            End Property
            ' COMPILEERROR: BC30366, "P2"
            WriteOnly Property P2() As T
                Set(ByVal Value As T)
                End Set
            End Property
            Default Property P3(ByVal i As Integer) As T
                Get
                End Get
                Set(ByVal Value As T)
                End Set
            End Property
        End Class
        Partial Class Cls30366(Of T)
            WriteOnly Property P1() As T
                Set(ByVal Value As T)
                End Set
            End Property
            ReadOnly Property P2() As T
                Get
                End Get
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30366: 'Public ReadOnly Property P1 As T' and 'Public WriteOnly Property P1 As T' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
            ReadOnly Property P1() As T
                              ~~
BC30366: 'Public WriteOnly Property P2 As T' and 'Public ReadOnly Property P2 As T' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
            WriteOnly Property P2() As T
                               ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30368ERR_OverloadWithArrayVsParamArray2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithArrayVsParamArray2">
        <file name="a.vb"><![CDATA[
        Class Cls30368_1(Of T)
            Sub goo(ByVal p() As String)
            End Sub
            Sub goo(ByVal ParamArray v() As String)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30368: 'Public Sub goo(p As String())' and 'Public Sub goo(ParamArray v As String())' cannot overload each other because they differ only by parameters declared 'ParamArray'.
            Sub goo(ByVal p() As String)
                ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30368ERR_OverloadWithArrayVsParamArray2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithArrayVsParamArray2">
        <file name="a.vb"><![CDATA[
        Class Cls30368_1(Of T)
            Sub goo(ByVal p() As String)
            End Sub
            Sub goo(ByVal ParamArray v() As String)
            End Sub
        End Class
        Class Cls30368(Of T)
            Overloads Property Goo1(ByVal x()) As String
                Get
                    Goo1 = "get: VariantArray"
                End Get
                Set(ByVal Value As String)
                End Set
            End Property
            Overloads Property Goo1(ByVal ParamArray x()) As String
                Get
                    Goo1 = "get: ParamArray"
                End Get
                Set(ByVal Value As String)
                End Set
            End Property
            Overloads Property Goo2(ByVal x()) As String
                Get
                    Goo2 = "get: FixedArray"
                End Get
                Set(ByVal Value As String)
                End Set
            End Property
            Overloads Property Goo2(ByVal ParamArray x()) As String
                Get
                    Goo2 = "get: ParamArray"
                End Get
                Set(ByVal Value As String)
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30368: 'Public Sub goo(p As String())' and 'Public Sub goo(ParamArray v As String())' cannot overload each other because they differ only by parameters declared 'ParamArray'.
            Sub goo(ByVal p() As String)
                ~~~
BC30368: 'Public Overloads Property Goo1(x As Object()) As String' and 'Public Overloads Property Goo1(ParamArray x As Object()) As String' cannot overload each other because they differ only by parameters declared 'ParamArray'.
            Overloads Property Goo1(ByVal x()) As String
                               ~~~~
BC30368: 'Public Overloads Property Goo2(x As Object()) As String' and 'Public Overloads Property Goo2(ParamArray x As Object()) As String' cannot overload each other because they differ only by parameters declared 'ParamArray'.
            Overloads Property Goo2(ByVal x()) As String
                               ~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30371ERR_ModuleAsType1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
Module M1
End Module
Module M2
End Module
Module M3
End Module
Interface IA(Of T As M1)
End Interface
Interface IB
    Sub M(Of T As M2)()
End Interface
Interface IC(Of T)
End Interface
Class C
    Shared Sub M(o As IC(Of M3))
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30371: Module 'M1' cannot be used as a type.
Interface IA(Of T As M1)
                     ~~
BC30371: Module 'M2' cannot be used as a type.
    Sub M(Of T As M2)()
                  ~~
BC30371: Module 'M3' cannot be used as a type.
    Shared Sub M(o As IC(Of M3))
                            ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30371ERR_ModuleAsType1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
            Module M1
                Class C1
                    Function goo As M1
                        Return Nothing
                    End Function
                End Class
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30371: Module 'M1' cannot be used as a type.
                    Function goo As M1
                                    ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30385ERR_BadDelegateFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadDelegateFlags1">
        <file name="a.vb"><![CDATA[
            Class C1
                MustOverride Delegate Sub Del1()
                NotOverridable Delegate Sub Del2()
                Shared Delegate Sub Del3()
                Overrides Delegate Sub Del4()
                Overloads Delegate Sub Del5(ByRef y As Integer)
                Partial Delegate Sub Del6()
                Default Delegate Sub Del7()
                ReadOnly Delegate Sub Del8()
                WriteOnly Delegate Sub Del9()
                MustInherit Delegate Sub Del10()
                NotInheritable Delegate Sub Del11()
                Widening Delegate Sub Del12()
                Narrowing Delegate Sub Del13()
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30385: 'MustOverride' is not valid on a Delegate declaration.
                MustOverride Delegate Sub Del1()
                ~~~~~~~~~~~~
BC30385: 'NotOverridable' is not valid on a Delegate declaration.
                NotOverridable Delegate Sub Del2()
                ~~~~~~~~~~~~~~
BC30385: 'Shared' is not valid on a Delegate declaration.
                Shared Delegate Sub Del3()
                ~~~~~~
BC30385: 'Overrides' is not valid on a Delegate declaration.
                Overrides Delegate Sub Del4()
                ~~~~~~~~~
BC30385: 'Overloads' is not valid on a Delegate declaration.
                Overloads Delegate Sub Del5(ByRef y As Integer)
                ~~~~~~~~~
BC30385: 'Partial' is not valid on a Delegate declaration.
                Partial Delegate Sub Del6()
                ~~~~~~~
BC30385: 'Default' is not valid on a Delegate declaration.
                Default Delegate Sub Del7()
                ~~~~~~~
BC30385: 'ReadOnly' is not valid on a Delegate declaration.
                ReadOnly Delegate Sub Del8()
                ~~~~~~~~
BC30385: 'WriteOnly' is not valid on a Delegate declaration.
                WriteOnly Delegate Sub Del9()
                ~~~~~~~~~
BC30385: 'MustInherit' is not valid on a Delegate declaration.
                MustInherit Delegate Sub Del10()
                ~~~~~~~~~~~
BC30385: 'NotInheritable' is not valid on a Delegate declaration.
                NotInheritable Delegate Sub Del11()
                ~~~~~~~~~~~~~~
BC30385: 'Widening' is not valid on a Delegate declaration.
                Widening Delegate Sub Del12()
                ~~~~~~~~
BC30385: 'Narrowing' is not valid on a Delegate declaration.
                Narrowing Delegate Sub Del13()
                ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(538884, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538884")>
        <Fact>
        Public Sub BC30385ERR_BadDelegateFlags1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadDelegateFlags1">
        <file name="a.vb"><![CDATA[
            Structure S1
                MustOverride Delegate Sub Del1()
                NotOverridable Delegate Sub Del1()
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30385: 'MustOverride' is not valid on a Delegate declaration.
                MustOverride Delegate Sub Del1()
                ~~~~~~~~~~~~
BC30385: 'NotOverridable' is not valid on a Delegate declaration.
                NotOverridable Delegate Sub Del1()
                ~~~~~~~~~~~~~~
BC30179: delegate Class 'Del1' and delegate Class 'Del1' conflict in structure 'S1'.
                NotOverridable Delegate Sub Del1()
                                            ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30389ERR_InaccessibleSymbol2_AccessCheckCrossAssemblyDerived()
            Dim other As VisualBasicCompilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AccessCheckCrossAssemblyDerived1">
    <file name="a.vb"><![CDATA[
Public Class C
    Public Shared c_pub As Integer
    Friend Shared c_int As Integer
    Protected Shared c_pro As Integer
    Protected Friend Shared c_intpro As Integer
    Private Shared c_priv As Integer
End Class

Friend Class D
    Public Shared d_pub As Integer
End Class
    ]]></file>
</compilation>)
 
            CompilationUtils.AssertNoErrors(other)
 
            Dim comp As VisualBasicCompilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="AccessCheckCrossAssemblyDerived2">
    <file name="a.vb"><![CDATA[
Public Class A
    Inherits C

    Public Sub m()
        Dim aa As Integer = C.c_pub
        Dim bb As Integer = C.c_int
        Dim cc As Integer = C.c_pro
        Dim dd As Integer = C.c_intpro
        Dim ee As Integer = C.c_priv
        Dim ff As Integer = D.d_pub
    End Sub
End Class
    ]]></file>
</compilation>,
                {New VisualBasicCompilationReference(other)})
            'BC30389:    'C.c_int' is not accessible in this context because it is 'Friend'.
            '        Dim bb As Integer = C.c_int
            '                            ~~~~~~~
            'BC30389:    'C.c_priv' is not accessible in this context because it is 'Private'.
            '       Dim ee As Integer = C.c_priv
            '                           ~~~~~~~~
            'BC30389:    'D' is not accessible in this context because it is 'Friend'.
            '        Dim ff As Integer = D.d_pub
            '                            ~
            comp.VerifyDiagnostics(Diagnostic(ERRID.ERR_InaccessibleSymbol2, "C.c_int").WithArguments("C.c_int", "Friend"),
                                   Diagnostic(ERRID.ERR_InaccessibleSymbol2, "C.c_priv").WithArguments("C.c_priv", "Private"),
                                   Diagnostic(ERRID.ERR_InaccessibleSymbol2, "D").WithArguments("D", "Friend"))
 
        End Sub
 
        <Fact>
        Public Sub BC30395ERR_BadRecordFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ERR_BadRecordFlags1">
        <file name="a.vb"><![CDATA[
            MustOverride Structure Del1
            End Structure
            NotOverridable Structure Del2
            End Structure
            Shared Structure Del3
            End Structure
            Overrides Structure Del4
            End Structure
            Overloads Structure Del5
            End Structure
            Partial Structure Del6
            End Structure
            Default Structure Del7
            End Structure
            ReadOnly Structure Del8
            End Structure
            WriteOnly Structure Del9
            End Structure
            Widening Structure Del12
            End Structure
            Narrowing Structure Del13
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30395: 'MustOverride' is not valid on a Structure declaration.
MustOverride Structure Del1
~~~~~~~~~~~~
BC30395: 'NotOverridable' is not valid on a Structure declaration.
            NotOverridable Structure Del2
            ~~~~~~~~~~~~~~
BC30395: 'Shared' is not valid on a Structure declaration.
            Shared Structure Del3
            ~~~~~~
BC30395: 'Overrides' is not valid on a Structure declaration.
            Overrides Structure Del4
            ~~~~~~~~~
BC30395: 'Overloads' is not valid on a Structure declaration.
            Overloads Structure Del5
            ~~~~~~~~~
BC30395: 'Default' is not valid on a Structure declaration.
            Default Structure Del7
            ~~~~~~~
BC30395: 'ReadOnly' is not valid on a Structure declaration.
            ReadOnly Structure Del8
            ~~~~~~~~
BC30395: 'WriteOnly' is not valid on a Structure declaration.
            WriteOnly Structure Del9
            ~~~~~~~~~
BC30395: 'Widening' is not valid on a Structure declaration.
            Widening Structure Del12
            ~~~~~~~~
BC30395: 'Narrowing' is not valid on a Structure declaration.
            Narrowing Structure Del13
            ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30396ERR_BadEnumFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadEnumFlags1">
        <file name="a.vb"><![CDATA[
            MustOverride enum Del1
                male
            End enum
            NotOverridable enum Del2
                male
            End enum
            Shared enum Del3
                male
            End enum
            Overrides enum Del4
                male
            End enum
            Overloads enum Del5
                male
            End enum
            Partial enum Del6
                male
            End enum
            Default enum Del7
                male
            End enum
            ReadOnly enum Del8
                male
            End enum
            WriteOnly enum Del9
                male
            End enum
            Widening enum Del12
                male
            End enum
            Narrowing enum Del13
                male
            End enum
            MustInherit Enum Del14
                male
            End Enum
            NotInheritable Enum Del15
                male
            End Enum
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30396: 'MustOverride' is not valid on an Enum declaration.
MustOverride enum Del1
~~~~~~~~~~~~
BC30396: 'NotOverridable' is not valid on an Enum declaration.
            NotOverridable enum Del2
            ~~~~~~~~~~~~~~
BC30396: 'Shared' is not valid on an Enum declaration.
            Shared enum Del3
            ~~~~~~
BC30396: 'Overrides' is not valid on an Enum declaration.
            Overrides enum Del4
            ~~~~~~~~~
BC30396: 'Overloads' is not valid on an Enum declaration.
            Overloads enum Del5
            ~~~~~~~~~
BC30396: 'Partial' is not valid on an Enum declaration.
            Partial enum Del6
            ~~~~~~~
BC30396: 'Default' is not valid on an Enum declaration.
            Default enum Del7
            ~~~~~~~
BC30396: 'ReadOnly' is not valid on an Enum declaration.
            ReadOnly enum Del8
            ~~~~~~~~
BC30396: 'WriteOnly' is not valid on an Enum declaration.
            WriteOnly enum Del9
            ~~~~~~~~~
BC30396: 'Widening' is not valid on an Enum declaration.
            Widening enum Del12
            ~~~~~~~~
BC30396: 'Narrowing' is not valid on an Enum declaration.
            Narrowing enum Del13
            ~~~~~~~~~
BC30396: 'MustInherit' is not valid on an Enum declaration.
            MustInherit Enum Del14
            ~~~~~~~~~~~
BC30396: 'NotInheritable' is not valid on an Enum declaration.
            NotInheritable Enum Del15
            ~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30397ERR_BadInterfaceFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadInterfaceFlags1">
        <file name="a.vb"><![CDATA[
            Class C1
                MustOverride Interface Del1
                End Interface
                NotOverridable Interface Del2
                End Interface
                Shared Interface Del3
                End Interface
                Overrides Interface Del4
                End Interface
                Overloads Interface Del5
                End Interface
                Default Interface Del7
                End Interface
                ReadOnly Interface Del8
                End Interface
                WriteOnly Interface Del9
                End Interface
                Widening Interface Del12
                End Interface
                Narrowing Interface Del13
                End Interface
                MustInherit Interface Del14
                End Interface
                NotInheritable Interface Del15
                End Interface
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30397: 'MustOverride' is not valid on an Interface declaration.
                MustOverride Interface Del1
                ~~~~~~~~~~~~
BC30397: 'NotOverridable' is not valid on an Interface declaration.
                NotOverridable Interface Del2
                ~~~~~~~~~~~~~~
BC30397: 'Shared' is not valid on an Interface declaration.
                Shared Interface Del3
                ~~~~~~
BC30397: 'Overrides' is not valid on an Interface declaration.
                Overrides Interface Del4
                ~~~~~~~~~
BC30397: 'Overloads' is not valid on an Interface declaration.
                Overloads Interface Del5
                ~~~~~~~~~
BC30397: 'Default' is not valid on an Interface declaration.
                Default Interface Del7
                ~~~~~~~
BC30397: 'ReadOnly' is not valid on an Interface declaration.
                ReadOnly Interface Del8
                ~~~~~~~~
BC30397: 'WriteOnly' is not valid on an Interface declaration.
                WriteOnly Interface Del9
                ~~~~~~~~~
BC30397: 'Widening' is not valid on an Interface declaration.
                Widening Interface Del12
                ~~~~~~~~
BC30397: 'Narrowing' is not valid on an Interface declaration.
                Narrowing Interface Del13
                ~~~~~~~~~
BC30397: 'MustInherit' is not valid on an Interface declaration.
                MustInherit Interface Del14
                ~~~~~~~~~~~
BC30397: 'NotInheritable' is not valid on an Interface declaration.
                NotInheritable Interface Del15
                ~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30398ERR_OverrideWithByref2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OverrideWithByref2">
        <file name="a.vb"><![CDATA[
            Module mod30398
                Class Class1
                    Overridable Sub Scen1(ByRef x As String)
                    End Sub
                    Overridable Sub Scen2(ByRef x As Object)
                    End Sub
                    Overridable Function Scen3(ByRef x As Integer)
                    End Function
                    Overridable Function Scen4(ByRef x As Integer)
                    End Function
                End Class
                Class class2
                    Inherits Class1
                    'COMPILEERROR:  BC30398, "Scen1"
                    Overrides Sub Scen1(ByVal x As String)
                    End Sub
                    'COMPILEERROR:  BC30398, "Scen2"
                    Overrides Sub Scen2(ByVal x As Object)
                    End Sub
                    Overrides Function Scen3(ByVal x As Integer)
                    End Function
                    'COMPILEERROR:  BC30398, "Scen4"
                    Overrides Function Scen4(ByVal x As Integer)
                    End Function
                End Class
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30398: 'Public Overrides Sub Scen1(x As String)' cannot override 'Public Overridable Sub Scen1(ByRef x As String)' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
                    Overrides Sub Scen1(ByVal x As String)
                                  ~~~~~
BC30398: 'Public Overrides Sub Scen2(x As Object)' cannot override 'Public Overridable Sub Scen2(ByRef x As Object)' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
                    Overrides Sub Scen2(ByVal x As Object)
                                  ~~~~~
BC30398: 'Public Overrides Function Scen3(x As Integer) As Object' cannot override 'Public Overridable Function Scen3(ByRef x As Integer) As Object' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
                    Overrides Function Scen3(ByVal x As Integer)
                                       ~~~~~
BC30398: 'Public Overrides Function Scen4(x As Integer) As Object' cannot override 'Public Overridable Function Scen4(ByRef x As Integer) As Object' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
                    Overrides Function Scen4(ByVal x As Integer)
                                       ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30401ERR_IdentNotMemberOfInterface4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="IdentNotMemberOfInterface4">
        <file name="a.vb"><![CDATA[
Interface IA
    Function F() As Integer
    Property P As Object
End Interface
Interface IB
End Interface
Class A
    Implements IA
    Public Function F(o As Object) As Integer Implements IA.F
        Return Nothing
    End Function
    Public Property P As Boolean Implements IA.P
End Class
Class B
    Implements IB
    Public Function F() As Integer Implements IB.F
        Return Nothing
    End Function
    Public Property P As Boolean Implements IB.P
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'A' must implement 'Function F() As Integer' for interface 'IA'.
    Implements IA
               ~~
BC30149: Class 'A' must implement 'Property P As Object' for interface 'IA'.
    Implements IA
               ~~
BC30401: 'F' cannot implement 'F' because there is no matching function on interface 'IA'.
    Public Function F(o As Object) As Integer Implements IA.F
                                                         ~~~~
BC30401: 'P' cannot implement 'P' because there is no matching property on interface 'IA'.
    Public Property P As Boolean Implements IA.P
                                            ~~~~
BC30401: 'F' cannot implement 'F' because there is no matching function on interface 'IB'.
    Public Function F() As Integer Implements IB.F
                                              ~~~~
BC30401: 'P' cannot implement 'P' because there is no matching property on interface 'IB'.
    Public Property P As Boolean Implements IB.P
                                            ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30412ERR_WithEventsRequiresClass()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="WithEventsRequiresClass">
        <file name="a.vb"><![CDATA[
            Class ClsTest30412
                'COMPILEERROR: BC30412, "Field003WithEvents"
                Public WithEvents Field003WithEvents = {1, 2, 3}
            End Class
            Class ClsTest30412_2
                'COMPILEERROR: BC30412, "Field002WithEvents"
                Public WithEvents Field002WithEvents = New List(Of Integer) From {1, 2, 3}
            End Class
                    ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30412: 'WithEvents' variables must have an 'As' clause.
                Public WithEvents Field003WithEvents = {1, 2, 3}
                                  ~~~~~~~~~~~~~~~~~~
BC30412: 'WithEvents' variables must have an 'As' clause.
                Public WithEvents Field002WithEvents = New List(Of Integer) From {1, 2, 3}
                                  ~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30413ERR_WithEventsAsStruct()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="WithEventsAsStruct">
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Structure S
End Structure
Class C(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)
    WithEvents _i As I
    WithEvents _a As A
    WithEvents _s As S
    WithEvents _1 As T1
    WithEvents _2 As T2
    WithEvents _3 As T3
    WithEvents _4 As T4
    WithEvents _5 As T5
    WithEvents _6 As T6
    WithEvents _7 As T7
End Class
                    ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
    WithEvents _s As S
               ~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
    WithEvents _1 As T1
               ~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
    WithEvents _3 As T3
               ~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
    WithEvents _4 As T4
               ~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
    WithEvents _5 As T5
               ~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
    WithEvents _7 As T7
               ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30433ERR_ModuleCantUseMethodSpecifier1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
        Module M
            Protected Sub M()
            End Sub
            Shared Sub N()
            End Sub
            MustOverride Sub O()
            Overridable Sub P()
            End Sub
            Overrides Sub Q()
            End Sub
            Shadows Sub R()
            End Sub
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30433: Methods in a Module cannot be declared 'Protected'.
            Protected Sub M()
            ~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Shared'.
            Shared Sub N()
            ~~~~~~
BC30433: Methods in a Module cannot be declared 'MustOverride'.
            MustOverride Sub O()
            ~~~~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Overridable'.
            Overridable Sub P()
            ~~~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Overrides'.
            Overrides Sub Q()
            ~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Shadows'.
            Shadows Sub R()
            ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30434ERR_ModuleCantUseEventSpecifier1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ModuleCantUseEventSpecifier1">
        <file name="a.vb"><![CDATA[
            Module Shdmod
                'COMPILEERROR: BC30434, "Shadows"
                Shadows Event testx()
            End Module
                    ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
            BC30434: Events in a Module cannot be declared 'Shadows'.
                Shadows Event testx()
                ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30435ERR_StructCantUseVarSpecifier1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Structure S
    Protected F
    Protected Property P
    Property Q
        Protected Get
            Return Nothing
        End Get
        Set(value)
        End Set
    End Property
    Property R
        Get
            Return Nothing
        End Get
        Protected Set(value)
        End Set
    End Property
End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Protected'.
    Protected F
    ~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected'.
    Protected Property P
    ~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected'.
        Protected Get
        ~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected'.
        Protected Set(value)
        ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30435ERR_StructCantUseVarSpecifier1_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Structure S
    Protected Friend F
    Protected Friend Property P
    Property Q
        Protected Friend Get
            Return Nothing
        End Get
        Set(value)
        End Set
    End Property
    Property R
        Get
            Return Nothing
        End Get
        Protected Friend Set(value)
        End Set
    End Property
End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
    Protected Friend F
    ~~~~~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
    Protected Friend Property P
    ~~~~~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
        Protected Friend Get
        ~~~~~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
        Protected Friend Set(value)
        ~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30435ERR_StructCantUseVarSpecifier1_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Structure S
    Property P
        Protected Get
            Return Nothing
        End Get
        Protected Friend Set(value)
        End Set
    End Property
End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Protected'.
        Protected Get
        ~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
        Protected Friend Set(value)
        ~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(531467, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531467")>
        <Fact>
        Public Sub BC30435ERR_StructCantUseVarSpecifier1_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Public Structure ms
    Dim s As Integer
    Public Overridable Property p1()
        Get
            Return Nothing
        End Get
        Friend Set(ByVal Value)
        End Set
    End Property
    Public NotOverridable Property p2()
        Get
            Return Nothing
        End Get
        Friend Set(ByVal Value)
        End Set
    End Property
    Public MustOverride Property p3()
    Public Overridable Sub T1()
    End Sub
    Public NotOverridable Sub T2()
    End Sub
    Public MustOverride Sub T3()
End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Overridable'.
    Public Overridable Property p1()
           ~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'NotOverridable'.
    Public NotOverridable Property p2()
           ~~~~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
    Public NotOverridable Property p2()
                                   ~~
BC30435: Members in a Structure cannot be declared 'MustOverride'.
    Public MustOverride Property p3()
           ~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Overridable'.
    Public Overridable Sub T1()
           ~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'NotOverridable'.
    Public NotOverridable Sub T2()
           ~~~~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
    Public NotOverridable Sub T2()
                              ~~
BC30435: Members in a Structure cannot be declared 'MustOverride'.
    Public MustOverride Sub T3()
           ~~~~~~~~~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30436ERR_ModuleCantUseMemberSpecifier1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ModuleCantUseMemberSpecifier1">
        <file name="a.vb"><![CDATA[
            Module m1
                Protected Enum myenum As Integer
                    one
                End Enum
            End Module
                    ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30735: Type in a Module cannot be declared 'Protected'.
                Protected Enum myenum As Integer
                ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30437ERR_InvalidOverrideDueToReturn2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Class base(Of t)
                'COMPILEERROR: BC30437, "toString"
                Overrides Function tostring() As t
                End Function
            End Class
                    ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30437: 'Public Overrides Function tostring() As t' cannot override 'Public Overridable Overloads Function ToString() As String' because they differ by their return types.
                Overrides Function tostring() As t
                                   ~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30438ERR_ConstantWithNoValue()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
            Imports System
            Namespace NS30438
                Class c1
                    'COMPILEERROR: BC30438,"c1"
                    Const c1 As UInt16
                End Class
                Structure s1
                    'COMPILEERROR: BC30438,"c1"
                    Const c1 As UInt16
                End Structure
                Friend Module USign_001mod
                    'COMPILEERROR: BC30438,"c1"
                    Const c1 As UInt16
                End Module
            End Namespace
                    ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
            BC30438: Constants must have a value.
                    Const c1 As UInt16
                          ~~
BC30438: Constants must have a value.
                    Const c1 As UInt16
                          ~~
BC30438: Constants must have a value.
                    Const c1 As UInt16
                          ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(542127, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542127")>
        <Fact>
        Public Sub BC30438ERR_ConstantWithNoValue02()
            Dim source =
<compilation name="delegates">
    <file name="a.vb"><![CDATA[
Option strict on
imports system

Class C1
    Sub GOO()
        'COMPILEERROR: BC30438
        Const l6 As UInt16
        Const l7 as new UInt16
    End Sub
End Class
    ]]></file>
</compilation>
 
            Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
 
            CompilationUtils.AssertTheseDiagnostics(c1,
<expected><![CDATA[
BC30438: Constants must have a value.
        Const l6 As UInt16
              ~~
BC30438: Constants must have a value.
        Const l7 as new UInt16
              ~~
BC30246: 'new' is not valid on a local constant declaration.
        Const l7 as new UInt16
                    ~~~
]]></expected>)
        End Sub
 
        <Fact>
        Public Sub BC30443ERR_DuplicatePropertyGet()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicatePropertyGet">
        <file name="a.vb"><![CDATA[
            Class C
                Property P
                    Get
                        Return Nothing
                    End Get
                    Get
                        Return Nothing
                    End Get
                    Set
                    End Set
                    Get
                        Return Nothing
                    End Get
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30443: 'Get' is already declared.
                    Get
                    ~~~
BC30443: 'Get' is already declared.
                    Get
                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30444ERR_DuplicatePropertySet()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicatePropertySet">
        <file name="a.vb"><![CDATA[
            Class C
                WriteOnly Property P
                    Set
                    End Set
                    Set
                    End Set
                    Set
                    End Set
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30444: 'Set' is already declared.
                    Set
                    ~~~
BC30444: 'Set' is already declared.
                    Set
                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        '    <Fact()>
        '    Public Sub BC30445ERR_ConstAggregate()
        '        Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib(
        '<compilation name="DuplicatePropertySet">
        '   <file name="a.vb"><![CDATA[
        '        Module Constant
        '            Const d() As Long = {1, 2}, e() As Long = {1, 2}
        '            Sub main()
        '            End Sub
        '        End Module
        '    ]]></file>
        '</compilation>)
        '        Dim expectedErrors1 = <errors><![CDATA[
        '        BC30445: 'Set' is already declared.
        '                    Set(ByRef value)
        '                                ~~~~~~
        '             ]]></errors>
        '        CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
        '    End Sub
 
        <Fact>
        Public Sub BC30461ERR_BadClassFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadClassFlags1">
        <file name="a.vb"><![CDATA[
            NotOverridable class  C1
            End class 
            Shared class  C2
            End class 
            Overrides class  C3
            End class 
            Overloads class  C4
            End class 
            Partial class  C5
            End class 
            Default class  C6
            End class 
            ReadOnly class  C7
            End class 
            WriteOnly class  C8
            End class 
            Widening class  C9
            End class 
            Narrowing class  C10
            End class 
            MustInherit class  C11
            End class 
            NotInheritable class  C12
            End class 
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30461: Classes cannot be declared 'NotOverridable'.
NotOverridable class  C1
~~~~~~~~~~~~~~
BC30461: Classes cannot be declared 'Shared'.
            Shared class  C2
            ~~~~~~
BC30461: Classes cannot be declared 'Overrides'.
            Overrides class  C3
            ~~~~~~~~~
BC30461: Classes cannot be declared 'Overloads'.
            Overloads class  C4
            ~~~~~~~~~
BC30461: Classes cannot be declared 'Default'.
            Default class  C6
            ~~~~~~~
BC30461: Classes cannot be declared 'ReadOnly'.
            ReadOnly class  C7
            ~~~~~~~~
BC30461: Classes cannot be declared 'WriteOnly'.
            WriteOnly class  C8
            ~~~~~~~~~
BC30461: Classes cannot be declared 'Widening'.
            Widening class  C9
            ~~~~~~~~
BC30461: Classes cannot be declared 'Narrowing'.
            Narrowing class  C10
            ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30467ERR_NonNamespaceOrClassOnImport2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicatePropertySet">
        <file name="a.vb"><![CDATA[
        'COMPILEERROR: BC30467, "ns1.intfc1"
        Imports ns1.Intfc1
        'COMPILEERROR: BC30467, "ns1.intfc2(Of String)"
        Imports ns1.Intfc2(Of String)
        Namespace ns1
            Public Interface Intfc1
                Sub Intfc1goo()
            End Interface
            Public Interface Intfc2(Of t)
                Inherits Intfc1
                Sub intfc2goo()
            End Interface
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30467: 'Intfc1' for the Imports 'Intfc1' does not refer to a Namespace, Class, Structure, Enum or Module.
        Imports ns1.Intfc1
                ~~~~~~~~~~
BC30467: 'Intfc2' for the Imports 'Intfc2(Of String)' does not refer to a Namespace, Class, Structure, Enum or Module.
        Imports ns1.Intfc2(Of String)
                ~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30468ERR_TypecharNotallowed()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="TypecharNotallowed">
        <file name="a.vb"><![CDATA[
        Module M1
            Function scen1() as System.Datetime@
            End Function
        End Module
        Structure S1
            Function scen1() as System.sTRING#
            End Function
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30468: Type declaration characters are not valid in this context.
            Function scen1() as System.Datetime@
                                       ~~~~~~~~~
BC30468: Type declaration characters are not valid in this context.
            Function scen1() as System.sTRING#
                                       ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30476ERR_EventSourceIsArray()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventSourceIsArray">
        <file name="a.vb"><![CDATA[
        Public Class Class1
            Class Class2
                Event Goo()
            End Class
            'COMPILEERROR: BC30591, "h(3)",BC30476, "Class2"
            Dim WithEvents h(3) As Class2
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30476: 'WithEvents' variables cannot be typed as arrays.
            Dim WithEvents h(3) As Class2
                           ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30479ERR_SharedConstructorWithParams()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SharedConstructorWithParams">
        <file name="a.vb"><![CDATA[
        Structure Struct1
            Shared Sub new(ByVal x As Integer)
            End Sub
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30479: Shared 'Sub New' cannot have any parameters.
            Shared Sub new(ByVal x As Integer)
                          ~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30480ERR_SharedConstructorIllegalSpec1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SharedConstructorIllegalSpec1">
        <file name="a.vb"><![CDATA[
        Structure Struct1
            Shared public Sub new()
            End Sub
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30480: Shared 'Sub New' cannot be declared 'public'.
            Shared public Sub new()
                   ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30490ERR_BadFlagsWithDefault1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadFlagsWithDefault1">
        <file name="a.vb"><![CDATA[
        Class A
            Default Private Property P(o)
                Get
                    Return Nothing
                End Get
                Set
                End Set
            End Property
        End Class
        Class B
            Private ReadOnly Default Property Q(x, y)
                Get
                    Return Nothing
                End Get
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30490: 'Default' cannot be combined with 'Private'.
            Default Private Property P(o)
                    ~~~~~~~
BC30490: 'Default' cannot be combined with 'Private'.
            Private ReadOnly Default Property Q(x, y)
            ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30497ERR_NewCannotHandleEvents()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NewCannotHandleEvents">
        <file name="a.vb"><![CDATA[
        Class Cla30497
            'COMPILEERROR: BC30497, "New"
            Sub New() Handles var1.event1
            End Sub
        End Class
        Class Cla30497_1
            'COMPILEERROR: BC30497, "New"
            Shared Sub New() Handles var1.event1
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30497: 'Sub New' cannot handle events.
            Sub New() Handles var1.event1
                ~~~
BC30497: 'Sub New' cannot handle events.
            Shared Sub New() Handles var1.event1
                       ~~~
]]></errors>
            CompilationUtils.AssertTheseParseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30501ERR_BadFlagsOnSharedMeth1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        MustInherit Class C
            Shared NotOverridable Function F()
                Return Nothing
            End Function
            Shared Overrides Function G()
                Return Nothing
            End Function
            Overridable Shared Sub M()
            End Sub
            MustOverride Shared Sub N()
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30501: 'Shared' cannot be combined with 'NotOverridable' on a method declaration.
            Shared NotOverridable Function F()
                   ~~~~~~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'Overrides' on a method declaration.
            Shared Overrides Function G()
                   ~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'Overridable' on a method declaration.
            Overridable Shared Sub M()
            ~~~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'MustOverride' on a method declaration.
            MustOverride Shared Sub N()
            ~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(528324, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528324")>
        <Fact>
        Public Sub BC30501ERR_BadFlagsOnSharedMeth2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Class A
    Public Overridable Sub G()
        Console.WriteLine("A.G")
    End Sub
End Class
MustInherit Class B
    Inherits A
    Public Overrides Shared Sub G()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30501: 'Shared' cannot be combined with 'Overrides' on a method declaration.
    Public Overrides Shared Sub G()
           ~~~~~~~~~
BC40005: sub 'G' shadows an overridable method in the base class 'A'. To override the base method, this method must be declared 'Overrides'.
    Public Overrides Shared Sub G()
                                ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30502ERR_BadFlagsOnSharedProperty1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        MustInherit Class C
            NotOverridable Shared Property P
            Overrides Shared Property Q
            Overridable Shared Property R
            Shared MustOverride Property S
            Default Shared Property T(ByVal v)
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30502: 'Shared' cannot be combined with 'NotOverridable' on a property declaration.
            NotOverridable Shared Property P
            ~~~~~~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'Overrides' on a property declaration.
            Overrides Shared Property Q
            ~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'Overridable' on a property declaration.
            Overridable Shared Property R
            ~~~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'MustOverride' on a property declaration.
            Shared MustOverride Property S
                   ~~~~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'Default' on a property declaration.
            Default Shared Property T(ByVal v)
            ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30503ERR_BadFlagsOnStdModuleProperty1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadFlagsOnStdModuleProperty1">
        <file name="a.vb"><![CDATA[
        Module M
            Protected Property P
            Shared Property Q
            MustOverride Property R
            Overridable Property S
            Overrides Property T
            Shadows Property U
            Default Property V(o)
                Get
                    Return Nothing
                End Get
                Set
                End Set
            End Property
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30503: Properties in a Module cannot be declared 'Protected'.
            Protected Property P
            ~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Shared'.
            Shared Property Q
            ~~~~~~
BC30503: Properties in a Module cannot be declared 'MustOverride'.
            MustOverride Property R
            ~~~~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Overridable'.
            Overridable Property S
            ~~~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Overrides'.
            Overrides Property T
            ~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Shadows'.
            Shadows Property U
            ~~~~~~~
BC30503: Properties in a Module cannot be declared 'Default'.
            Default Property V(o)
            ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30505ERR_SharedOnProcThatImpl()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SharedOnProcThatImpl">
        <file name="a.vb"><![CDATA[
Delegate Sub D()
Interface I
    Sub M()
    Property P As Object
    Event E As D
End Interface
Class C
    Implements I
    Shared Sub M() Implements I.M
    End Sub
    Shared Property P As Object Implements I.P
    Shared Event E() Implements I.E
End Class
        ]]></file>
    </compilation>)
            compilation1.AssertTheseDiagnostics(<errors><![CDATA[
BC30149: Class 'C' must implement 'Event E As D' for interface 'I'.
    Implements I
               ~
BC30149: Class 'C' must implement 'Property P As Object' for interface 'I'.
    Implements I
               ~
BC30149: Class 'C' must implement 'Sub M()' for interface 'I'.
    Implements I
               ~
BC30505: Methods or events that implement interface members cannot be declared 'Shared'.
    Shared Sub M() Implements I.M
    ~~~~~~
BC30505: Methods or events that implement interface members cannot be declared 'Shared'.
    Shared Property P As Object Implements I.P
    ~~~~~~
BC30505: Methods or events that implement interface members cannot be declared 'Shared'.
    Shared Event E() Implements I.E
    ~~~~~~
                 ]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC30506ERR_NoWithEventsVarOnHandlesList()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="NoWithEventsVarOnHandlesList">
        <file name="a.vb"><![CDATA[
            Module mod30506
                'COMPILEERROR: BC30506, "clsEventError1"
                Sub scenario1() Handles clsEventError1.Event1
                End Sub
                'COMPILEERROR: BC30506, "I1"
                Sub scenario2() Handles I1.goo
                End Sub
                'COMPILEERROR: BC30506, "button1"
                Sub scenario3() Handles button1.click
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
                Sub scenario1() Handles clsEventError1.Event1
                                        ~~~~~~~~~~~~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
                Sub scenario2() Handles I1.goo
                                        ~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
                Sub scenario3() Handles button1.click
                                        ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub HandlesHiddenEvent()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="NoWithEventsVarOnHandlesList">
        <file name="a.vb"><![CDATA[
Imports System

Class HasEvents
    Event E1()
End Class

Class HasWithEvents
    Public WithEvents WE0 As HasEvents
    Public WithEvents WE1 As HasEvents
    Public WithEvents WE2 As HasEvents
    Public WithEvents _WE3 As HasEvents
End Class

Class HasWithEventsDerived
    Inherits HasWithEvents

    Overrides Property WE0() As HasEvents
        Get
            Return Nothing
        End Get
        Set(value As HasEvents)

        End Set
    End Property

    Overloads Property WE1(x As Integer) As Integer
        Get
            Return 1
        End Get
        Set(value As Integer)

        End Set
    End Property

    Property WE2(x As Integer) As Integer
        Get
            Return 1
        End Get
        Set(value As Integer)

        End Set
    End Property

    Property WE3 As Integer

    Shared Sub goo0() Handles WE0.E1
        Console.WriteLine("handled2")
    End Sub

    Shared Sub goo1() Handles WE1.E1
        Console.WriteLine("handled2")
    End Sub

    Shared Sub goo2() Handles WE2.E2
        Console.WriteLine("handled2")
    End Sub

    Shared Sub goo3() Handles WE3.E3
        Console.WriteLine("handled2")
    End Sub
End Class


Class Program
    Shared Sub Main(args As String())
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30284: property 'WE0' cannot be declared 'Overrides' because it does not override a property in a base class.
    Overrides Property WE0() As HasEvents
                       ~~~
BC40004: property 'WE0' conflicts with WithEvents variable 'WE0' in the base class 'HasWithEvents' and should be declared 'Shadows'.
    Overrides Property WE0() As HasEvents
                       ~~~
BC40004: property 'WE1' conflicts with WithEvents variable 'WE1' in the base class 'HasWithEvents' and should be declared 'Shadows'.
    Overloads Property WE1(x As Integer) As Integer
                       ~~~
BC40004: property 'WE2' conflicts with WithEvents variable 'WE2' in the base class 'HasWithEvents' and should be declared 'Shadows'.
    Property WE2(x As Integer) As Integer
             ~~~
BC40012: property 'WE3' implicitly declares '_WE3', which conflicts with a member in the base class 'HasWithEvents', and so the property should be declared 'Shadows'.
    Property WE3 As Integer
             ~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
    Shared Sub goo0() Handles WE0.E1
                              ~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
    Shared Sub goo1() Handles WE1.E1
                              ~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
    Shared Sub goo2() Handles WE2.E2
                              ~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
    Shared Sub goo3() Handles WE3.E3
                              ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub HandlesProperty001()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="HandlesProperty001">
        <file name="a.vb"><![CDATA[
Imports System
Imports System.ComponentModel

Namespace Project1
    Module m1
        Public Sub main()
            Dim c = New Sink
            Dim s = New OuterClass
            c.x = s
            s.Test()
        End Sub
    End Module

    Class EventSource
        Public Event MyEvent()
        Sub test()
            RaiseEvent MyEvent()
        End Sub
    End Class

    Class SomeBase
        <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
        Public Property SomePropertyInBase() As EventSource
            Get
                Console.Write("#Get#")
                Return Nothing
            End Get
            Set(value As EventSource)

            End Set
        End Property
    End Class

    Class OuterClass
        Inherits SomeBase

        Private Shared SubObject As New EventSource

        <DesignOnly(True)>
        <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
        Public Shared Property SomePropertyWrongValue() As EventSource
            Get
                Console.Write("#Get#")
                Return SubObject
            End Get
            Set(value As EventSource)

            End Set
        End Property

        Public Property SomePropertyNoAttribute() As EventSource
            Get
                Console.Write("#Get#")
                Return SubObject
            End Get
            Set(value As EventSource)

            End Set
        End Property

        Public Shared Property SomePropertyWriteOnly() As EventSource
            Get
                Console.Write("#Get#")
                Return SubObject
            End Get
            Set(value As EventSource)

            End Set
        End Property

        Sub Test()
            SubObject.test()
        End Sub
    End Class

    Class Sink

        Public WithEvents x As OuterClass
        Sub goo1() Handles x.SomePropertyWrongValue.MyEvent

            Console.Write("Handled Event On SubObject!")
        End Sub

        Sub goo2() Handles x.SomePropertyNoAttribute.MyEvent

            Console.Write("Handled Event On SubObject!")
        End Sub

        Sub goo3() Handles x.SomePropertyWriteonly.MyEvent

            Console.Write("Handled Event On SubObject!")
        End Sub

        Sub goo4() Handles x.SomePropertyInBase.MyEvent

            Console.Write("Handled Event On SubObject!")
        End Sub

        Sub test()
            x.Test()
        End Sub
        Sub New()
            x = New OuterClass
        End Sub
    End Class
    '.....
End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
        Sub goo1() Handles x.SomePropertyWrongValue.MyEvent
                           ~~~~~~~~~~~~~~~~~~~~~~~~
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
        Sub goo2() Handles x.SomePropertyNoAttribute.MyEvent
                           ~~~~~~~~~~~~~~~~~~~~~~~~~
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
        Sub goo3() Handles x.SomePropertyWriteonly.MyEvent
                           ~~~~~~~~~~~~~~~~~~~~~~~
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
        Sub goo4() Handles x.SomePropertyInBase.MyEvent
                           ~~~~~~~~~~~~~~~~~~~~
]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub WithEventsHides()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="WithEventsHides">
        <file name="a.vb"><![CDATA[
Imports System

Class HasEvents
    Event E1()
End Class

Class HasWithEvents
    Public WithEvents WE0 As HasEvents
    Public WithEvents WE1 As HasEvents
    Public Property WE2 As HasEvents
    Public Property WE3 As HasEvents
End Class

Class HasWithEventsDerived
    Inherits HasWithEvents

    Public WithEvents WE0 As HasEvents

    ' no warnings
    Public Shadows WithEvents WE1 As HasEvents

    Public WithEvents WE2 As HasEvents

    ' no warnings
    Public Shadows WithEvents WE3 As HasEvents

    Shared Sub goo0() Handles WE0.E1
        Console.WriteLine("handled2")
    End Sub

    Shared Sub goo1() Handles WE1.E1
        Console.WriteLine("handled2")
    End Sub

    Shared Sub goo2() Handles WE2.E1
        Console.WriteLine("handled2")
    End Sub

    Shared Sub goo3() Handles WE3.E1
        Console.WriteLine("handled2")
    End Sub
End Class


Class Program
    Shared Sub Main(args As String())
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40004: WithEvents variable 'WE0' conflicts with WithEvents variable 'WE0' in the base class 'HasWithEvents' and should be declared 'Shadows'.
    Public WithEvents WE0 As HasEvents
                      ~~~
BC40004: WithEvents variable 'WE2' conflicts with property 'WE2' in the base class 'HasWithEvents' and should be declared 'Shadows'.
    Public WithEvents WE2 As HasEvents
                      ~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub WithEventsOverloads()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="WithEventsOverloads">
        <file name="a.vb"><![CDATA[
Imports System

Class HasEvents
    Event E1()
End Class

Class HasWithEventsDerived
    Public WithEvents _WE1 As HasEvents

    Public Property WE0(x As Integer) As Integer
        Get
            Return 1
        End Get
        Set(value As Integer)

        End Set
    End Property

    Public Overloads Property WE2(x As Integer, y As Long) As Integer
        Get
            Return 1
        End Get
        Set(value As Integer)

        End Set
    End Property

    Public WithEvents WE0 As HasEvents

    Public Property WE1

    Public WithEvents WE2 As HasEvents

End Class


Class Program
    Shared Sub Main(args As String())
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31061: WithEvents variable '_WE1' conflicts with a member implicitly declared for property 'WE1' in class 'HasWithEventsDerived'.
    Public WithEvents _WE1 As HasEvents
                      ~~~~
BC30260: 'WE0' is already declared as 'Public Property WE0(x As Integer) As Integer' in this class.
    Public WithEvents WE0 As HasEvents
                      ~~~
BC30260: 'WE2' is already declared as 'Public Overloads Property WE2(x As Integer, y As Long) As Integer' in this class.
    Public WithEvents WE2 As HasEvents
                      ~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30508ERR_AccessMismatch6()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Namespace N
            Public Class A
                Protected Class C
                End Class
                Protected Structure S
                End Structure
                Private Interface I
                End Interface
                Public F As I
                Friend Function M() As C
                    Return Nothing
                End Function
            End Class
            Public Class B
                Inherits A
                Public G As C
                Friend ReadOnly H As S
                Public Function N(x As C) As S
                    Return Nothing
                End Function
            End Class
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'F' cannot expose type 'A.I' in namespace 'N' through class 'A'.
                Public F As I
                            ~
BC30508: 'M' cannot expose type 'A.C' in namespace 'N' through class 'A'.
                Friend Function M() As C
                                       ~
BC30508: 'G' cannot expose type 'A.C' in namespace 'N' through class 'B'.
                Public G As C
                            ~
BC30508: 'H' cannot expose type 'A.S' in namespace 'N' through class 'B'.
                Friend ReadOnly H As S
                                     ~
BC30508: 'x' cannot expose type 'A.C' in namespace 'N' through class 'B'.
                Public Function N(x As C) As S
                                       ~
BC30508: 'N' cannot expose type 'A.S' in namespace 'N' through class 'B'.
                Public Function N(x As C) As S
                                             ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30508ERR_AccessMismatch6_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Namespace NS30508
            Interface i1
            End Interface
            Interface i2
            End Interface
            Class C1(Of v)
                Implements i1
            End Class
            Class c2
                Implements i1
                Implements i2
                'COMPILEERROR: BC30508, "ProtectedClass"
                Function fiveB(Of t As ProtectedClass)() As String
                    Return "In fiveB"
                End Function
                'COMPILEERROR: BC30508, "Privateclass"
                Function fiveC(Of t As Privateclass)() As String
                    Return "In fiveC"
                End Function
                Protected Function fiveD(Of t As ProtectedClass)() As String
                    Return "In fiveB"
                End Function
                Private Function fiveE(Of t As Privateclass)() As String
                    Return "In fiveC"
                End Function
                Protected Class ProtectedClass
                End Class
                Private Class Privateclass
                End Class
            End Class
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'fiveB' cannot expose type 'c2.ProtectedClass' in namespace 'NS30508' through class 'c2'.
                Function fiveB(Of t As ProtectedClass)() As String
                                       ~~~~~~~~~~~~~~
BC30508: 'fiveC' cannot expose type 'c2.Privateclass' in namespace 'NS30508' through class 'c2'.
                Function fiveC(Of t As Privateclass)() As String
                                       ~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30508ERR_AccessMismatch6_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Namespace N
            Public Class A
                Protected Class C
                End Class
                Protected Structure S
                End Structure
                Private Interface I
                End Interface
                Protected Enum E
                    A
                End Enum
                Property P As I
            End Class
            Public Class B
                Inherits A
                Property Q As C
                Friend ReadOnly Property R(x As E) As S
                    Get
                        Return Nothing
                    End Get
                End Property
            End Class
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'P' cannot expose type 'A.I' in namespace 'N' through class 'A'.
                Property P As I
                              ~
BC30508: 'Q' cannot expose type 'A.C' in namespace 'N' through class 'B'.
                Property Q As C
                              ~
BC30508: 'x' cannot expose type 'A.E' in namespace 'N' through class 'B'.
                Friend ReadOnly Property R(x As E) As S
                                                ~
BC30508: 'R' cannot expose type 'A.S' in namespace 'N' through class 'B'.
                Friend ReadOnly Property R(x As E) As S
                                                      ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(528153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528153")>
        <Fact()>
        Public Sub BC30508ERR_AccessMismatch6_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Namespace N
            Public Class A
                Protected Class B
                End Class
                Public Class C
                    Function F() As B
                        Return Nothing
                    End Function
                    Public Class D
                        Sub M(o As B)
                        End Sub
                    End Class
                End Class
            End Class
            Public Class E
                Inherits A
                Function F() As B
                    Return Nothing
                End Function
            End Class
        End Namespace
        Public Class F
            Inherits N.A
            Sub M(o As B)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'F' cannot expose type 'A.B' in namespace 'N' through class 'C'.
                    Function F() As B
                                    ~
BC30508: 'o' cannot expose type 'A.B' in namespace 'N' through class 'D'.
                        Sub M(o As B)
                                   ~
BC30508: 'F' cannot expose type 'A.B' in namespace 'N' through class 'E'.
                Function F() As B
                                ~
BC30508: 'o' cannot expose type 'A.B' in namespace '<Default>' through class 'F'.
            Sub M(o As B)
                       ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30509ERR_InheritanceAccessMismatch5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InheritanceAccessMismatch5">
        <file name="a.vb"><![CDATA[
            Module Module1
                Private Class C1
                End Class
                Class C2
                    Inherits C1
                End Class
                Class C3
                    Protected Class C4
                    End Class
                    Class C5
                        Inherits C4
                    End Class
                End Class
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30509: 'C2' cannot inherit from class 'Module1.C1' because it expands the access of the base class to namespace '<Default>'.
                    Inherits C1
                             ~~
BC30509: 'C5' cannot inherit from class 'Module1.C3.C4' because it expands the access of the base class to namespace '<Default>'.
                        Inherits C4
                                 ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30529ERR_ParamTypingInconsistency()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ParamTypingInconsistency">
        <file name="a.vb"><![CDATA[
          class M1
                Sub Goo(ByVal [a], ByRef [continue], ByVal c As Single)
                End Sub
            End class  
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
                Sub Goo(ByVal [a], ByRef [continue], ByVal c As Single)
                              ~~~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
                Sub Goo(ByVal [a], ByRef [continue], ByVal c As Single)
                                         ~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30530ERR_ParamNameFunctionNameCollision_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
          class M1
                Function Goo(Of Goo)(ByVal Goo As Goo)
                End Function
          End class  
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32090: Type parameter cannot have the same name as its defining function.
                Function Goo(Of Goo)(ByVal Goo As Goo)
                                ~~~
BC30530: Parameter cannot have the same name as its defining function.
                Function Goo(Of Goo)(ByVal Goo As Goo)
                                           ~~~
BC32089: 'Goo' is already declared as a type parameter of this method.
                Function Goo(Of Goo)(ByVal Goo As Goo)
                                           ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30530ERR_ParamNameFunctionNameCollision_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            WriteOnly Property P(p, q)
                Set(value)
                End Set
            End Property
            Private _q
            WriteOnly Property Q
                Set(Q) ' No error
                    _q = Q
                End Set
            End Property
            Property R
                Get
                    Return Nothing
                End Get
                Set(get_R) ' No error
                End Set
            End Property
            WriteOnly Property S
                Set(set_S) ' No error
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30530: Parameter cannot have the same name as its defining function.
            WriteOnly Property P(p, q)
                                 ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540629, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540629")>
        <Fact>
        Public Sub BC30548ERR_InvalidAssemblyAttribute1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InvalidAssemblyAttribute1">
        <file name="a.vb"><![CDATA[
Imports System

'COMPILEERROR: BC30548, "Assembly: c1()"
<Assembly: c1()> 
'COMPILEERROR: BC30549, "Module: c1()"
<Module: c1()> 

<AttributeUsageAttribute(AttributeTargets.Class, Inherited:=False)>
NotInheritable Class c1Attribute
    Inherits Attribute
End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(
    Diagnostic(ERRID.ERR_InvalidAssemblyAttribute1, "c1").WithArguments("c1Attribute"),
    Diagnostic(ERRID.ERR_InvalidModuleAttribute1, "c1").WithArguments("c1Attribute"))
 
        End Sub
 
        <WorkItem(540629, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540629")>
        <Fact>
        Public Sub BC30549ERR_InvalidModuleAttribute1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InvalidModuleAttribute1">
        <file name="a.vb"><![CDATA[
Imports System
<Module: InternalsVisibleTo()> 
<AttributeUsageAttribute(AttributeTargets.Delegate)>
Class InternalsVisibleTo
    Inherits Attribute
End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidModuleAttribute1, "InternalsVisibleTo").WithArguments("InternalsVisibleTo"))
 
        End Sub
 
        <Fact>
        Public Sub BC30561ERR_AmbiguousInImports2()
            Dim options = TestOptions.ReleaseExe.WithGlobalImports(GlobalImport.Parse({"N1", "N2"}))
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AmbiguousInImports2">
        <file name="a.vb"><![CDATA[
           Public Class Cls2
                Implements i1
              End Class 
        ]]></file>
        <file name="b.vb"><![CDATA[
            Namespace N1
                Interface I1
                End Interface
            End Namespace
            Namespace N2
                Interface  I1
                End Interface
            End Namespace
        ]]></file>
    </compilation>, options:=options)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30561: 'I1' is ambiguous, imported from the namespaces or types 'N1, N2'.
                Implements i1
                           ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30562ERR_AmbiguousInModules2()
            Dim options = TestOptions.ReleaseExe.WithGlobalImports(GlobalImport.Parse({"N1", "N2"}))
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="AmbiguousInModules2">
        <file name="a.vb"><![CDATA[
           Public Class Cls2
                Implements i1
              End Class 
        ]]></file>
        <file name="b.vb"><![CDATA[
            Module N1
                Interface I1
                End Interface
            End Module
            Module N2
                Interface  I1
                End Interface
            End Module
        ]]></file>
    </compilation>, options)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30562: 'I1' is ambiguous between declarations in Modules 'N1, N2'.
                Implements i1
                           ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30572ERR_DuplicateNamedImportAlias1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BC30572ERR_DuplicateNamedImportAlias1">
        <file name="a.vb"><![CDATA[
         Imports Alias1 = N1.C1(of String)
         Imports Alias1 = N1.C1(of String)
        ]]></file>
        <file name="b.vb"><![CDATA[
            Module N1
                Class C1(of T)
                End class
            End Module
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30572: Alias 'Alias1' is already declared.
         Imports Alias1 = N1.C1(of String)
                 ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30573ERR_DuplicatePrefix()
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
    <file name="c.vb"><![CDATA[
Imports System.Xml.Linq
Imports <xmlns="default1">
Imports <xmlns="default2">
Imports <xmlns:p="p1">
Imports <xmlns:q="q">
Imports <xmlns:p="p2">
Class C
    Private F As XElement = <p:a xmlns:p="p3" xmlns:q="q"/>
End Class
    ]]></file>
</compilation>, references:=XmlReferences)
            compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30573: XML namespace prefix '' is already declared.
Imports <xmlns="default2">
        ~~~~~~~~~~~~~~~~~~
BC30573: XML namespace prefix 'p' is already declared.
Imports <xmlns:p="p2">
        ~~~~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC30573ERR_DuplicatePrefix_1()
            Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"<xmlns=""default1"">", "<xmlns=""default2"">", "<xmlns:p=""p1"">", "<xmlns:q=""q"">", "<xmlns:p=""p2"">"}))
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
    <file name="c.vb"><![CDATA[
Imports <xmlns="default">
Imports <xmlns:p="p">
Imports <xmlns:q="q">
Class C
End Class
    ]]></file>
</compilation>, references:=XmlReferences, options:=options)
            compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30573: Error in project-level import '<xmlns:p="p2">' at '<xmlns:p="p2">' : XML namespace prefix 'p' is already declared.
BC30573: Error in project-level import '<xmlns="default2">' at '<xmlns="default2">' : XML namespace prefix '' is already declared.
]]></errors>)
            Dim embedded = compilation.GetTypeByMetadataName("Microsoft.VisualBasic.Embedded")
            Assert.IsType(Of EmbeddedSymbolManager.EmbeddedNamedTypeSymbol)(embedded)
            Assert.False(DirectCast(embedded, INamedTypeSymbol).IsSerializable)
        End Sub
 
        <Fact>
        Public Sub BC30583ERR_MethodAlreadyImplemented2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MethodAlreadyImplemented2">
        <file name="a.vb"><![CDATA[
            Namespace NS1
                Interface i1
                    Sub goo()
                End Interface
                Interface i2
                    Inherits i1
                End Interface
                Interface i3
                    Inherits i1
                End Interface
                Class cls1
                    Implements i2, i3
                    Sub i2goo() Implements i2.goo
                        Console.WriteLine("in i1, goo")
                    End Sub
                    'COMPILEERROR: BC30583, "i3.goo"
                    Sub i3goo() Implements i3.goo
                        Console.WriteLine("in i3, goo")
                    End Sub
                End Class
            End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30583: 'i1.goo' cannot be implemented more than once.
                    Sub i3goo() Implements i3.goo
                                           ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30584ERR_DuplicateInInherits1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateInInherits1">
        <file name="a.vb"><![CDATA[
            Interface sce(Of T)
            End Interface
            Interface sce1
                Inherits sce(Of Integer)
                        Inherits sce(Of Integer)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30584: 'sce(Of Integer)' cannot be inherited more than once.
                        Inherits sce(Of Integer)
                                 ~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30584ERR_DuplicateInInherits1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateInInherits1">
        <file name="a.vb"><![CDATA[
            interface  I1
            End interface
            Structure s1
                Interface sce1
                    Inherits I1
                    Inherits I1
                End Interface
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30584: 'I1' cannot be inherited more than once.
                    Inherits I1
                             ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30590ERR_EventNotFound1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="EventNotFound1">
        <file name="a.vb"><![CDATA[
            Friend Module mod30590
                Class cls1
                    Event Ev2()
                End Class
                Class cls2 : Inherits cls1
                    Public WithEvents o As cls2
                    Private Shadows Sub Ev2()
                    End Sub
                    'COMPILEERROR: BC30590, "Ev2"
                    Private Sub o_Ev2() Handles o.Ev2
                    End Sub
                End Class
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30590: Event 'Ev2' cannot be found.
                    Private Sub o_Ev2() Handles o.Ev2
                                                  ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30593ERR_ModuleCantUseVariableSpecifier1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ModuleCantUseVariableSpecifier1">
        <file name="a.vb"><![CDATA[
            Class class1
            End Class
            Structure struct1
            End Structure
            Friend Module ObjInit14mod
                'COMPILEERROR: BC30593, "Shared"
                Shared cls As New class1()
                'COMPILEERROR: BC30593, "Shared"
                Shared xint As New Integer()
                'COMPILEERROR: BC30593, "Shared"
                Shared xdec As New Decimal(40@)
                'COMPILEERROR: BC30593, "Shared"
                Shared xstrct As New struct1()
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30593: Variables in Modules cannot be declared 'Shared'.
                Shared cls As New class1()
                ~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
                Shared xint As New Integer()
                ~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
                Shared xdec As New Decimal(40@)
                ~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
                Shared xstrct As New struct1()
                ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30594ERR_SharedEventNeedsSharedHandler()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="SharedEventNeedsSharedHandler">
        <file name="a.vb"><![CDATA[
            Module M1
                Class myCls
                    Event Event1()
                End Class
                Class myClass1
                    Shared WithEvents x As myCls
                    Public Sub EventHandler() Handles x.Event1
                    End Sub
                    Private Sub EventHandler1() Handles x.Event1
                    End Sub
                    Protected Sub EventHandler2() Handles x.Event1
                    End Sub
                    Friend Sub EventHandler3() Handles x.Event1
                    End Sub
                End Class
                Class myClass2
                    Shared WithEvents x As myCls
                    Overridable Sub EventHandler() Handles x.Event1
                    End Sub
                End Class
                MustInherit Class myClass3
                    Shared WithEvents x As myCls
                    MustOverride Sub EventHandler() Handles x.Event1
                End Class
                Class myClass4
                    Overridable Sub EventHandler()
                    End Sub
                End Class
                Class myClass7
                    Inherits myClass4
                    Shared WithEvents x As myCls
                    NotOverridable Overrides Sub EventHandler() Handles x.Event1
                    End Sub
                End Class
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
                    Public Sub EventHandler() Handles x.Event1
                                                      ~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
                    Public Sub EventHandler() Handles x.Event1
                                                        ~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
                    Private Sub EventHandler1() Handles x.Event1
                                                        ~
BC31029: Method 'EventHandler1' cannot handle event 'Event1' because they do not have a compatible signature.
                    Private Sub EventHandler1() Handles x.Event1
                                                          ~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
                    Protected Sub EventHandler2() Handles x.Event1
                                                          ~
BC31029: Method 'EventHandler2' cannot handle event 'Event1' because they do not have a compatible signature.
                    Protected Sub EventHandler2() Handles x.Event1
                                                            ~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
                    Friend Sub EventHandler3() Handles x.Event1
                                                       ~
BC31029: Method 'EventHandler3' cannot handle event 'Event1' because they do not have a compatible signature.
                    Friend Sub EventHandler3() Handles x.Event1
                                                         ~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
                    Overridable Sub EventHandler() Handles x.Event1
                                                           ~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
                    Overridable Sub EventHandler() Handles x.Event1
                                                             ~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
                    MustOverride Sub EventHandler() Handles x.Event1
                                                            ~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
                    MustOverride Sub EventHandler() Handles x.Event1
                                                              ~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
                    NotOverridable Overrides Sub EventHandler() Handles x.Event1
                                                                        ~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
                    NotOverridable Overrides Sub EventHandler() Handles x.Event1
                                                                          ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
            CompilationUtils.AssertTheseEmitDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30927ERR_MustOverOnNotInheritPartClsMem1_1()
            CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Class Test

    NotInheritable Class C

    End Class

    Partial Class C
        'COMPILEERROR: BC30927, "goo"
        MustOverride Function goo() As Integer
    End Class

End Class
    ]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_MustOverOnNotInheritPartClsMem1, "MustOverride").WithArguments("MustOverride"))
 
        End Sub
 
        <Fact>
        Public Sub NotInheritableInOtherPartial()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Class B
    Overridable Sub f()
    End Sub

    Overridable Property p As Integer
        Get
            Return 0
        End Get
        Set(value As Integer)
        End Set
    End Property
End Class

NotInheritable Class C
    Inherits B
End Class

Partial Class C
    MustOverride Sub f1()
    MustOverride Property p1 As Integer

    Overridable Sub f2()
    End Sub

    Overridable Property p2 As Integer
        Get
            Return 0
        End Get
        Set(value As Integer)
        End Set
    End Property

    NotOverridable Overrides Sub f()
    End Sub

    NotOverridable Overrides Property p As Integer
        Get
            Return 0
        End Get
        Set(value As Integer)
        End Set
    End Property
End Class    
]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30927: 'MustOverride' cannot be specified on this member because it is in a partial type that is declared 'NotInheritable' in another partial definition.
    MustOverride Sub f1()
    ~~~~~~~~~~~~
BC30927: 'MustOverride' cannot be specified on this member because it is in a partial type that is declared 'NotInheritable' in another partial definition.
    MustOverride Property p1 As Integer
    ~~~~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30607ERR_BadFlagsInNotInheritableClass1_2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            MustInherit Class A
                MustOverride Sub O()
                MustOverride Property R
            End Class
            NotInheritable Class B
                Inherits A
                Overridable Sub M()
                End Sub
                MustOverride Sub N()
                NotOverridable Overrides Sub O()
                End Sub
                Overridable Property P
                MustOverride Property Q
                NotOverridable Overrides Property R
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors = <errors><![CDATA[
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
                Overridable Sub M()
                ~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
                MustOverride Sub N()
                ~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
                NotOverridable Overrides Sub O()
                ~~~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
                Overridable Property P
                ~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
                MustOverride Property Q
                ~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
                NotOverridable Overrides Property R
                ~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <WorkItem(540594, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540594")>
        <Fact>
        Public Sub BC30610ERR_BaseOnlyClassesMustBeExplicit2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BaseOnlyClassesMustBeExplicit2">
        <file name="a.vb"><![CDATA[
           MustInherit Class Cls1
                MustOverride Sub Goo(ByVal Arg As Integer)
                MustOverride Sub Goo(ByVal Arg As Double)
            End Class
            'COMPILEERROR: BC30610, "cls2"
            Class cls2
                Inherits Cls1
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30610: Class 'cls2' must either be declared 'MustInherit' or override the following inherited 'MustOverride' member(s): 
    Cls1: Public MustOverride Sub Goo(Arg As Integer)
    Cls1: Public MustOverride Sub Goo(Arg As Double).
            Class cls2
                  ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(541026, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541026")>
        <Fact()>
        Public Sub BC30610ERR_BaseOnlyClassesMustBeExplicit2WithBC31411()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BaseOnlyClassesMustBeExplicit2">
        <file name="a.vb"><![CDATA[
           MustInherit Class Cls1
                MustOverride Sub Goo(ByVal Arg As Integer)
                MustOverride Sub Goo(ByVal Arg As Double)
            End Class
            'COMPILEERROR: BC30610, "cls2"
            Class cls2
                Inherits Cls1
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30610: Class 'cls2' must either be declared 'MustInherit' or override the following inherited 'MustOverride' member(s): 
    Cls1: Public MustOverride Sub Goo(Arg As Integer)
    Cls1: Public MustOverride Sub Goo(Arg As Double).
            Class cls2
                  ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30628ERR_StructCantInherit()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="StructCantInherit">
        <file name="a.vb"><![CDATA[
            Structure S1
                Structure S2
                    Inherits s1
                End Structure
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30628: Structures cannot have 'Inherits' statements.
                    Inherits s1
                    ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30629ERR_NewInStruct()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="NewInStruct">
        <file name="a.vb"><![CDATA[
            Module mod30629
                Structure Struct1
                    'COMPILEERROR:BC30629,"new"
                    Public Sub New()
                    End Sub
                End Structure
            End Module
        ]]></file>
    </compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic12))
            Dim expectedErrors1 = <errors><![CDATA[
BC30629: Structures cannot declare a non-shared 'Sub New' with no parameters.
                    Public Sub New()
                               ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC37240ERR_StructParameterlessInstanceCtorMustBePublic()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="NewInStruct">
        <file name="a.vb"><![CDATA[
            Module mod37240
                Structure Struct1
                    'COMPILEERROR:BC37240,"new"
                    Private Sub New()
                    End Sub
                End Structure

                sub Main
                end sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30629: Structures cannot declare a non-shared 'Sub New' with no parameters.
                    Private Sub New()
                                ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30639ERR_BadPropertyFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadPropertyFlags1">
        <file name="a.vb"><![CDATA[
        Interface I
            NotInheritable Property P
            MustInherit ReadOnly Property Q
            WriteOnly Const Property R(o)
            Partial Property S
        End Interface
        Class C
            NotInheritable Property T
            MustInherit ReadOnly Property U
                Get
                    Return Nothing
                End Get
            End Property
            WriteOnly Const Property V(o)
                Set(value)
                End Set
            End Property
            Partial Property W
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30639: Properties cannot be declared 'NotInheritable'.
            NotInheritable Property P
            ~~~~~~~~~~~~~~
BC30639: Properties cannot be declared 'MustInherit'.
            MustInherit ReadOnly Property Q
            ~~~~~~~~~~~
BC30639: Properties cannot be declared 'Const'.
            WriteOnly Const Property R(o)
                      ~~~~~
BC30639: Properties cannot be declared 'Partial'.
            Partial Property S
            ~~~~~~~
BC30639: Properties cannot be declared 'NotInheritable'.
            NotInheritable Property T
            ~~~~~~~~~~~~~~
BC30639: Properties cannot be declared 'MustInherit'.
            MustInherit ReadOnly Property U
            ~~~~~~~~~~~
BC30639: Properties cannot be declared 'Const'.
            WriteOnly Const Property V(o)
                      ~~~~~
BC30639: Properties cannot be declared 'Partial'.
            Partial Property W
            ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30645ERR_InvalidOptionalParameterUsage1()
            Dim compilation1 = CompilationUtils.CreateCompilation(
    <compilation name="InvalidOptionalParameterUsage1">
        <file name="a.vb"><![CDATA[
Module M1
    <System.Web.Services.WebMethod(True)>
    Public Function HelloWorld(Optional ByVal n As String = "e") As String
        Return "Hello World"
    End Function
End Module
        ]]></file>
    </compilation>, targetFramework:=TargetFramework.NetFramework)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
    Public Function HelloWorld(Optional ByVal n As String = "e") As String
                    ~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30645ERR_InvalidOptionalParameterUsage1a()
            Dim compilation1 = CompilationUtils.CreateCompilation(
    <compilation name="InvalidOptionalParameterUsage1a">
        <file name="a.vb"><![CDATA[
Module M1
    <System.Web.Services.WebMethod(True)>
    <System.Web.Services.WebMethod(False)>
    Public Function HelloWorld(Optional ByVal n As String = "e") As String
        Return "Hello World"
    End Function
End Module
        ]]></file>
    </compilation>, targetFramework:=TargetFramework.NetFramework)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
    BC30663: Attribute 'WebMethodAttribute' cannot be applied multiple times.
    <System.Web.Services.WebMethod(False)>
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
    Public Function HelloWorld(Optional ByVal n As String = "e") As String
                    ~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact(Skip:="https://github.com/dotnet/roslyn/issues/74779")>
        Public Sub BC30645ERR_InvalidOptionalParameterUsage1b()
            ' Dim references = {Net461.References.mscorlib, Net461.References.MicrosoftVisualBasic, Net461.References.SystemWebServices, Net461.References.SystemEnterpriseServices
            Dim compilation1 = CompilationUtils.CreateCompilation(
    <compilation name="InvalidOptionalParameterUsage1b">
        <file name="a.vb"><![CDATA[
Module M1
    <System.Web.Services.WebMethod()>
    Public Function HelloWorld1(Optional ByVal n As String = "e") As String
        Return "Hello World"
    End Function

    <System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled)>
    Public Function HelloWorld2(Optional ByVal n As String = "e") As String
        Return "Hello World"
    End Function

    <System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1)>
    Public Function HelloWorld3(Optional ByVal n As String = "e") As String
        Return "Hello World"
    End Function

    <System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1, True)>
    Public Function HelloWorld4(Optional ByVal n As String = "e") As String
        Return "Hello World"
    End Function

    <System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1, True, 123)>
    Public Function HelloWorld5(Optional ByVal n As String = "e") As String
        Return "Hello World"
    End Function
End Module
        ]]></file>
    </compilation>, targetFramework:=TargetFramework.NetFramework)
 
            CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
    Public Function HelloWorld1(Optional ByVal n As String = "e") As String
                    ~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
    Public Function HelloWorld2(Optional ByVal n As String = "e") As String
                    ~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
    Public Function HelloWorld3(Optional ByVal n As String = "e") As String
                    ~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
    Public Function HelloWorld4(Optional ByVal n As String = "e") As String
                    ~~~~~~~~~~~
BC30516: Overload resolution failed because no accessible 'New' accepts this number of arguments.
    <System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1, True, 123)>
                         ~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC30650ERR_InvalidEnumBase()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InvalidEnumBase">
        <file name="a.vb"><![CDATA[
            Module ICase1mod
                Enum color1 As Double
                    blue
                End Enum
                Enum color2 As String
                    blue
                End Enum
                Enum color3 As Single
                    blue
                End Enum
                Enum color4 As Date
                    blue
                End Enum
                Enum color5 As Object
                    blue
                End Enum
                Enum color6 As Boolean
                    blue
                End Enum
                Enum color7 As Decimal
                    blue
                End Enum
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30650: Enums must be declared as an integral type.
                Enum color1 As Double
                               ~~~~~~
BC30650: Enums must be declared as an integral type.
                Enum color2 As String
                               ~~~~~~
BC30650: Enums must be declared as an integral type.
                Enum color3 As Single
                               ~~~~~~
BC30650: Enums must be declared as an integral type.
                Enum color4 As Date
                               ~~~~
BC30650: Enums must be declared as an integral type.
                Enum color5 As Object
                               ~~~~~~
BC30650: Enums must be declared as an integral type.
                Enum color6 As Boolean
                               ~~~~~~~
BC30650: Enums must be declared as an integral type.
                Enum color7 As Decimal
                               ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30651ERR_ByRefIllegal1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ByRefIllegal1">
        <file name="a.vb"><![CDATA[
            Class C
                Property P(ByVal x, ByRef y)
                    Get
                        Return Nothing
                    End Get
                    Set(value)
                    End Set
                End Property
                ReadOnly Property Q(ParamArray p())
                    Get
                        Return Nothing
                    End Get
                End Property
                WriteOnly Property R(Optional x = Nothing)
                    Set(value)
                    End Set
                End Property
            End Class
            Interface I
                ReadOnly Property P(ByRef x, Optional ByVal y = Nothing)
                WriteOnly Property Q(ParamArray p())
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30651: property parameters cannot be declared 'ByRef'.
                Property P(ByVal x, ByRef y)
                                    ~~~~~
BC30651: property parameters cannot be declared 'ByRef'.
                ReadOnly Property P(ByRef x, Optional ByVal y = Nothing)
                                    ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30652ERR_UnreferencedAssembly3()
            Dim Lib1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="Lib1">
        <file name="a.vb"><![CDATA[
            Public Class C1
            End Class
        ]]></file>
    </compilation>)
            Dim Lib2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="Lib2">
        <file name="a.vb"><![CDATA[
            Public Class C2
                Dim s as C1
            End Class
        ]]></file>
    </compilation>)
            Dim ref1 = New VisualBasicCompilationReference(Lib1)
            Lib2 = Lib2.AddReferences(ref1)
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UnreferencedAssembly3">
        <file name="a.vb"><![CDATA[
            Public Class C
                Dim s as C1
            End Class
        ]]></file>
    </compilation>)
            Dim ref2 = New VisualBasicCompilationReference(Lib2)
            compilation1 = compilation1.AddReferences(ref2)
            Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'C1' is not defined.
                Dim s as C1
                         ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(538153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538153")>
        <Fact>
        Public Sub BC30656ERR_UnsupportedField1()
            Dim csharpComp = CSharp.CSharpCompilation.Create("Test", options:=New CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
            Dim text = "public class A  {      public static volatile int X;  }"
            Dim ref = Net40.References.mscorlib
            csharpComp = csharpComp.AddSyntaxTrees(CSharp.SyntaxFactory.ParseSyntaxTree(text))
            csharpComp = csharpComp.AddReferences(ref)
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="UnsupportedField1">
        <file name="a.vb"><![CDATA[
        Module M
            Dim X = A.X 
        End Module
        ]]></file>
    </compilation>)
            compilation1 = compilation1.AddReferences(MetadataReference.CreateFromImage(csharpComp.EmitToArray()))
            Dim expectedErrors1 = <errors><![CDATA[
BC30656: Field 'X' is of an unsupported type.
            Dim X = A.X 
                    ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30660ERR_LocalsCannotHaveAttributes()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="LocalsCannotHaveAttributes">
        <file name="at30660.vb"><![CDATA[
Imports System

<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
    Inherits Attribute
    Public Sub New(p As ULong)

    End Sub
End Class

Public Class Goo
    Public Function SSS() As Byte
        <My(12345)> Dim x As Byte = 1
        Return x
    End Function
End Class
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_LocalsCannotHaveAttributes, "<My(12345)>"))
 
        End Sub
 
        <Fact>
        Public Sub BC30662ERR_InvalidAttributeUsage2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InvalidAttributeUsage2">
        <file name="a.vb"><![CDATA[
Imports System

Namespace DecAttr
    <AttributeUsageAttribute(AttributeTargets.Property)> Class attr1
        Inherits Attribute
    End Class
    <AttributeUsage(AttributeTargets.Event)> Class attr2
        Inherits Attribute
    End Class
    <AttributeUsageAttribute(AttributeTargets.Delegate)> Class attr3
        Inherits Attribute
    End Class
    <AttributeUsage(AttributeTargets.Constructor)> Class attr4
        Inherits Attribute
    End Class
    <AttributeUsageAttribute(AttributeTargets.Field)> Class attr5
        Inherits Attribute
    End Class
    Class scen1
        <attr1()> Public Declare Function Beep1 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
        <attr2()> Public Declare Function Beep2 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
        <attr3()> Public Declare Function Beep3 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
        <attr4()> Public Declare Function Beep4 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
        <attr5()> Public Declare Function Beep5 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
    End Class
End Namespace
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr1").WithArguments("attr1", "Beep1"),
                                      Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr2").WithArguments("attr2", "Beep2"),
                                      Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr3").WithArguments("attr3", "Beep3"),
                                      Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr4").WithArguments("attr4", "Beep4"),
                                      Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr5").WithArguments("attr5", "Beep5"))
 
        End Sub
 
        <WorkItem(538370, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538370")>
        <Fact>
        Public Sub BC30663ERR_InvalidMultipleAttributeUsage1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InvalidMultipleAttributeUsage1">
        <file name="a.vb"><![CDATA[
Imports System

<Assembly:clscompliant(true), Assembly:clscompliant(true), Assembly:clscompliant(true)>
<Module:clscompliant(true), Module:clscompliant(true), Module:clscompliant(true)>

Namespace DecAttr
    <AttributeUsageAttribute(AttributeTargets.Property)>
    Class attrProperty
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Parameter)>
    Class attrParameter
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.ReturnValue)>
    Class attrReturnType
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Class)>
    Class attrClass
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Struct)>
    Class attrStruct
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Method)>
    Class attrMethod
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Field)>
    Class attrField
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Enum)>
    Class attrEnum
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Constructor)>
    Class attrCtor
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Delegate)>
    Class attrDelegate
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Interface)>
    Class attrInterface
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Assembly)>
    Class attrAssembly
        Inherits Attribute
    End Class

    <AttributeUsageAttribute(AttributeTargets.Module)>
    Class attrModule
        Inherits Attribute
    End Class


    <attrClass(), attrClass(), attrClass()>
    Module M1
    End Module

    <attrInterface(), attrInterface(), attrInterface()>
    Interface I
    End Interface

    <attrEnum(), attrEnum(), attrEnum()>
    Enum E
        member
    End Enum

    <attrDelegate(), attrDelegate(), attrDelegate()>
    Delegate Sub Del()

    <attrClass(), attrClass()>
    <attrClass()>
    Class scen1(Of T1)
        <attrCtor(), attrCtor(), attrCtor()>
        Public Sub New()
        End Sub

        <attrField(), attrField(), attrField()>
        Public field as Integer

        Private newPropertyValue As String
        <attrProperty()> ' first ok
        <attrProperty()> ' first error
        <attrProperty()> ' second error
        Public Property NewProperty() As String
            Get
                Return newPropertyValue
            End Get
            Set(ByVal value As String)
                newPropertyValue = value
            End Set
        End Property

        <attrMethod(), attrMethod(), attrMethod()>
        Public function Sub1(Of T)(
            <attrParameter(), attrParameter(), attrParameter()> a as Integer,
            b as T) as <attrReturnType(), attrReturnType(), attrReturnType()> Integer
            return 23
        End function

    End Class

    <attrStruct()>
    <attrStruct(), attrStruct()> 
    Structure S1
    End Structure
End Namespace
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Assembly:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Assembly:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Module:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Module:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrDelegate()").WithArguments("attrDelegate"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrDelegate()").WithArguments("attrDelegate"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrEnum()").WithArguments("attrEnum"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrEnum()").WithArguments("attrEnum"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrInterface()").WithArguments("attrInterface"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrInterface()").WithArguments("attrInterface"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrStruct()").WithArguments("attrStruct"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrStruct()").WithArguments("attrStruct"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrParameter()").WithArguments("attrParameter"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrParameter()").WithArguments("attrParameter"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrCtor()").WithArguments("attrCtor"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrCtor()").WithArguments("attrCtor"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrField()").WithArguments("attrField"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrField()").WithArguments("attrField"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrProperty()").WithArguments("attrProperty"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrProperty()").WithArguments("attrProperty"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrReturnType()").WithArguments("attrReturnType"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrReturnType()").WithArguments("attrReturnType"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrMethod()").WithArguments("attrMethod"),
                                        Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrMethod()").WithArguments("attrMethod"))
        End Sub
 
        <Fact()>
        Public Sub BC30663ERR_InvalidMultipleAttributeUsage1a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InvalidMultipleAttributeUsage1a">
        <file name="a.vb"><![CDATA[
Imports System

<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
    Inherits Attribute
End Class

<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
    Inherits Attribute
End Class

Partial Class C1
    <A1(), A2()>
    Partial Private Sub M(i As Integer)
    End Sub
End Class

Partial Class C1
    <A1(), A2()>
    Private Sub M(i As Integer)
        Dim s As New C1
        s.M(i)
    End Sub
End Class
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
        End Sub
 
        <Fact()>
        Public Sub BC30663ERR_InvalidMultipleAttributeUsage1b()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InvalidMultipleAttributeUsage1b">
        <file name="a.vb"><![CDATA[
Imports System

<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
    Inherits Attribute
End Class

<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
    Inherits Attribute
End Class

Partial Class C1
    <A2(), A1(), A2()>
    Partial Private Sub M(i As Integer)
    End Sub
End Class

Partial Class C1
    <A1(), A1(), A2()>
    Private Sub M(i As Integer)
        Dim s As New C1
        s.M(i)
    End Sub
End Class
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"),
                                      Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
        End Sub
 
        <Fact()>
        Public Sub BC30663ERR_InvalidMultipleAttributeUsage1c()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InvalidMultipleAttributeUsage1c">
        <file name="a.vb"><![CDATA[
Imports System

<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
    Inherits Attribute
End Class

<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
    Inherits Attribute
End Class

Partial Class C1
    Partial Private Sub M(<A1(), A2()>i As Integer)
    End Sub
End Class

Partial Class C1
    Private Sub M(<A1(), A2()>i As Integer)
        Dim s As New C1
        s.M(i)
    End Sub
End Class
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
        End Sub
 
        <Fact()>
        Public Sub BC30663ERR_InvalidMultipleAttributeUsage1d()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InvalidMultipleAttributeUsage1d">
        <file name="a.vb"><![CDATA[
Imports System

<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
    Inherits Attribute
End Class

<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
    Inherits Attribute
End Class

Partial Class C1
    Partial Private Sub M(<A2(), A1(), A2()>i As Integer)
    End Sub
End Class

Partial Class C1
    Private Sub M(<A1(), A1(), A2()>i As Integer)
        Dim s As New C1
        s.M(i)
    End Sub
End Class
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"),
                                      Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
        End Sub
 
        <Fact>
        Public Sub BC30668ERR_UseOfObsoleteSymbol2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="UseOfObsoleteSymbol2">
        <file name="a.vb"><![CDATA[
            Imports System
            Namespace NS
                Class clstest
                    <Obsolete("Scenario6 Message", True)> Protected Friend WriteOnly Property scenario6()
                        Set(ByVal Value)
                        End Set
                    End Property
                    <Obsolete("", True)> Public Shared WriteOnly Property scenario7()
                        Set(ByVal Value)
                        End Set
                    End Property
                    <Obsolete()> Default Property scenario8(ByVal i As Integer) As Integer
                        Get
                            Return 1
                        End Get
                        Set(ByVal Value As Integer)
                        End Set
                    End Property
                End Class
                Class clsTest1
                    <Obsolete("", True)> Default Public ReadOnly Property scenario9(ByVal i As Long) As Long
                        Get
                            Return 1
                        End Get
                    End Property
                End Class
                Friend Module OBS022mod
                    <Obsolete("Scenario1 Message", True)> WriteOnly Property Scenario1a()
                        Set(ByVal Value)
                        End Set
                    End Property
                    <Obsolete("Scenario2  Message", True)> ReadOnly Property scenario2()
                        Get
                            Return 1
                        End Get
                    End Property
                    Sub OBS022()
                        Dim obj As Object = 23%
                        Dim cls1 As New clstest()
                        'COMPILEERROR: BC30668, "Scenario1a"
                        Scenario1a = obj
                        'COMPILEERROR: BC30668, "scenario2"
                        obj = scenario2
                        'COMPILEERROR: BC30668, "cls1.scenario6"
                        cls1.scenario6 = obj
                        'COMPILEERROR: BC30668, "clstest.scenario7"
                        clstest.scenario7 = obj
                        Dim cls2 As New clsTest1()
                        'COMPILEERROR: BC30668, "cls2"
                        obj = cls2(4)
                    End Sub
                End Module
            End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30668: 'Public WriteOnly Property Scenario1a As Object' is obsolete: 'Scenario1 Message'.
                        Scenario1a = obj
                        ~~~~~~~~~~
BC30668: 'Public ReadOnly Property scenario2 As Object' is obsolete: 'Scenario2  Message'.
                        obj = scenario2
                              ~~~~~~~~~
BC30668: 'Protected Friend WriteOnly Property scenario6 As Object' is obsolete: 'Scenario6 Message'.
                        cls1.scenario6 = obj
                        ~~~~~~~~~~~~~~
BC31075: 'Public Shared WriteOnly Property scenario7 As Object' is obsolete.
                        clstest.scenario7 = obj
                        ~~~~~~~~~~~~~~~~~
BC31075: 'Public ReadOnly Default Property scenario9(i As Long) As Long' is obsolete.
                        obj = cls2(4)
                              ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(538173, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538173")>
        <Fact>
        Public Sub BC30683ERR_InheritsStmtWrongOrder()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InheritsStmtWrongOrder">
        <file name="a.vb"><![CDATA[
            Class cn1
                Public ss As Long
                'COMPILEERROR: BC30683, "Inherits c2"
                Inherits c2
            End Class
            Class c2
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30683: 'Inherits' statement must precede all declarations in a class.
                Inherits c2
                ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseParseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30688ERR_InterfaceEventCantUse1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceEventCantUse1">
        <file name="a.vb"><![CDATA[
           Interface I 
                Event Goo() Implements I.Goo
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30688: Events in interfaces cannot be declared 'Implements'.
                Event Goo() Implements I.Goo
                            ~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30695ERR_MustShadow2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustShadow2">
        <file name="a.vb"><![CDATA[
           Class c1
                'COMPILEERROR: BC30695, "goo", 
                Sub goo()
                End Sub
                Shadows Function goo(ByVal i As Integer) As Integer
                End Function
            End Class
            Class c2_1
                Public goo As Integer
            End Class
            Class c2_2
                Inherits c2_1
                Shadows Sub goo()
                End Sub
                'COMPILEERROR: BC30695,"goo"
                Sub goo(ByVal c As Char)
                End Sub
                'COMPILEERROR: BC30695,"goo"
                Sub goo(ByVal d As Double)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30695: sub 'goo' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
                Sub goo()
                    ~~~
BC30695: sub 'goo' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
                Sub goo(ByVal c As Char)
                    ~~~
BC40004: sub 'goo' conflicts with variable 'goo' in the base class 'c2_1' and should be declared 'Shadows'.
                Sub goo(ByVal c As Char)
                    ~~~
BC30695: sub 'goo' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
                Sub goo(ByVal d As Double)
                    ~~~
BC40004: sub 'goo' conflicts with variable 'goo' in the base class 'c2_1' and should be declared 'Shadows'.
                Sub goo(ByVal d As Double)
                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30695ERR_MustShadow2_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
                <compilation name="MustBeOverloads2">
                    <file name="a.vb"><![CDATA[
                    Class Base
                        Sub Method(x As Integer)
                        End Sub
                        Overloads Sub Method(x As String)
                        End Sub
                    End Class
                    Partial Class Derived1
                        Inherits Base
                        Shadows Sub Method(x As String)
                        End Sub
                    End Class
                    ]]></file>
                    <file name="b.vb"><![CDATA[
                    Class Derived1
                        Inherits Base
                        Overrides Sub Method(x As Integer)
                        End Sub
                    End Class
                    Class Derived2
                        Inherits Base
                        Function Method(x As String, y As Integer) As String
                        End Function
                        Overrides Sub Method(x As Integer)
                        End Sub
                    End Class
                    ]]></file>
                </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31409: sub 'Method' must be declared 'Overloads' because another 'Method' is declared 'Overloads' or 'Overrides'.
                        Sub Method(x As Integer)
                            ~~~~~~
BC30695: sub 'Method' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
                        Overrides Sub Method(x As Integer)
                                      ~~~~~~
BC31086: 'Public Overrides Sub Method(x As Integer)' cannot override 'Public Sub Method(x As Integer)' because it is not declared 'Overridable'.
                        Overrides Sub Method(x As Integer)
                                      ~~~~~~
BC31409: function 'Method' must be declared 'Overloads' because another 'Method' is declared 'Overloads' or 'Overrides'.
                        Function Method(x As String, y As Integer) As String
                                 ~~~~~~
BC40003: function 'Method' shadows an overloadable member declared in the base class 'Base'.  If you want to overload the base method, this method must be declared 'Overloads'.
                        Function Method(x As String, y As Integer) As String
                                 ~~~~~~
BC31086: 'Public Overrides Sub Method(x As Integer)' cannot override 'Public Sub Method(x As Integer)' because it is not declared 'Overridable'.
                        Overrides Sub Method(x As Integer)
                                      ~~~~~~
                         ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30696ERR_OverloadWithOptionalTypes2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverloadWithOptionalTypes2">
        <file name="a.vb"><![CDATA[
           Class Cla30696
                'COMPILEERROR: BC30696, "goo"
                Public Function goo(Optional ByVal arg As ULong = 1)
                    Return "BC30696"
                End Function
                Public Function goo(Optional ByVal arg As Integer = 1)
                    Return "BC30696"
                End Function

                'COMPILEERROR: BC30696, "goo3"
                Public Function goo1(ByVal arg As Integer, Optional ByVal arg1 As String = "")
                    Return "BC30696"
                End Function
                Public Function goo1(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
                    Return "BC30696"
                End Function
            End Class
            Interface Scen2_1
                'COMPILEERROR: BC30696, "goo"
                Function goo(Optional ByVal arg As Object = Nothing)
                Function goo(Optional ByVal arg As ULong = 1)
                'COMPILEERROR: BC30696, "goo3"
                Function goo1(ByVal arg As Integer, Optional ByVal arg1 As Object = Nothing)
                Function goo1(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
            End Interface
        ]]></file>
    </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, <errors><![CDATA[]]></errors>)
        End Sub
 
        <WorkItem(529018, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529018")>
        <Fact()>
        Public Sub BC30697ERR_OverrideWithOptionalTypes2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverrideWithOptionalTypes2">
        <file name="a.vb"><![CDATA[
            Class Base
                Public Overridable Sub goo(ByVal x As String, Optional ByVal y As String = "hello")
                End Sub
            End Class
            Class C1
                Inherits Base
                Public Overrides Sub goo(ByVal x As String, Optional ByVal y As Integer = 1)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30697: 'Public Overrides Sub goo(x As String, [y As Integer = 1])' cannot override 'Public Overridable Sub goo(x As String, [y As String = "hello"])' because they differ by the types of optional parameters.
                Public Overrides Sub goo(ByVal x As String, Optional ByVal y As Integer = 1)
                                     ~~~                                      
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30728ERR_StructsCannotHandleEvents()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="StructsCannotHandleEvents">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Event e()
                Sub goo() Handles c.e
                End Sub
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30728: Methods declared in structures cannot have 'Handles' clauses.
                Sub goo() Handles c.e
                    ~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
                Sub goo() Handles c.e
                                  ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30730ERR_OverridesImpliesOverridable()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverridesImpliesOverridable">
        <file name="a.vb"><![CDATA[
           Class CBase
                overridable function goo
                End function
            End Class
            Class C1
                Inherits CBase
                Overrides public Overridable function goo
                End function
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30730: Methods declared 'Overrides' cannot be declared 'Overridable' because they are implicitly overridable.
                Overrides public Overridable function goo
                                 ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Checks for ERRID_ModuleCantUseMemberSpecifier1
        ' Old name="ModifierErrorsInsideModules"
        <Fact>
        Public Sub BC30735ERR_ModuleCantUseTypeSpecifier1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
        Module m1
            protected Class c
                Protected Enum e1
                    a
                End Enum
            End Class

            Protected Enum e5
                a
            End Enum

            Shadows Enum e6
                a
             End Enum

            protected structure struct1
            end structure

            protected delegate Sub d1(i as integer)

        End Module
        ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30735: Type in a Module cannot be declared 'protected'.
            protected Class c
            ~~~~~~~~~
BC30735: Type in a Module cannot be declared 'Protected'.
            Protected Enum e5
            ~~~~~~~~~
BC30735: Type in a Module cannot be declared 'Shadows'.
            Shadows Enum e6
            ~~~~~~~
BC30735: Type in a Module cannot be declared 'protected'.
            protected structure struct1
            ~~~~~~~~~
BC30735: Type in a Module cannot be declared 'protected'.
            protected delegate Sub d1(i as integer)
            ~~~~~~~~~

                       ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC30770ERR_DefaultEventNotFound1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
    <compilation name="DefaultEventNotFound1">
        <file name="a.vb"><![CDATA[
        Imports System.ComponentModel

<DefaultEvent("LogonCompleted")> Public Class EventSource1
    Private Event LogonCompleted(ByVal UserName As String)
End Class

<DefaultEvent("LogonCompleteD")> Public Class EventSource2
    Public Event LogonCompleted(ByVal UserName As String)
End Class

<DefaultEvent("LogonCompleteD")> Public Class EventSource22
    Friend Event LogonCompleted(ByVal UserName As String)
End Class

<DefaultEvent("LogonCompleteD")> Public Class EventSource23
    Protected Event LogonCompleted(ByVal UserName As String)
End Class

<DefaultEvent("LogonCompleteD")> Public Class EventSource24
    Protected Friend Event LogonCompleted(ByVal UserName As String)
End Class

<DefaultEvent(Nothing)> Public Class EventSource3
End Class

<DefaultEvent("")> Public Class EventSource4
End Class

<DefaultEvent("  ")> Public Class EventSource5
End Class

Class Base
    Public Event LogonCompleted()
End Class

<DefaultEvent("LogonCompleted")> Class EventSource6
    Inherits Base
    Private Shadows Event LogonCompleted(ByVal UserName As String)
End Class

<DefaultEvent("LogonCompleted")> Interface EventSource7
End Interface

<DefaultEvent("LogonCompleted")> Structure EventSource8
End Structure
        ]]></file>
    </compilation>, {SystemRef}, TestOptions.ReleaseDll)
            Dim expectedErrors = <errors><![CDATA[
BC30770: Event 'LogonCompleted' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent("LogonCompleted")> Public Class EventSource1
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30770: Event 'LogonCompleteD' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent("LogonCompleteD")> Public Class EventSource23
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30770: Event 'LogonCompleteD' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent("LogonCompleteD")> Public Class EventSource24
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30770: Event '  ' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent("  ")> Public Class EventSource5
 ~~~~~~~~~~~~~~~~~~
BC30662: Attribute 'DefaultEventAttribute' cannot be applied to 'EventSource7' because the attribute is not valid on this declaration type.
<DefaultEvent("LogonCompleted")> Interface EventSource7
 ~~~~~~~~~~~~
BC30662: Attribute 'DefaultEventAttribute' cannot be applied to 'EventSource8' because the attribute is not valid on this declaration type.
<DefaultEvent("LogonCompleted")> Structure EventSource8
 ~~~~~~~~~~~~
                       ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact, WorkItem(545966, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545966")>
        Public Sub BC30772ERR_InvalidNonSerializedUsage()
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidNonSerializedUsage">
    <file name="a.vb"><![CDATA[
Imports System

Module M1
    <NonSerialized>
    Dim x = 1

    <NonSerialized> 
    Event E As System.Action
End Module
]]></file>
</compilation>)
 
            Dim expectedErrors =
<errors><![CDATA[
BC30772: 'NonSerialized' attribute will not have any effect on this member because its containing class is not exposed as 'Serializable'.
    <NonSerialized>
     ~~~~~~~~~~~~~
BC30772: 'NonSerialized' attribute will not have any effect on this member because its containing class is not exposed as 'Serializable'.
    <NonSerialized> 
     ~~~~~~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30786ERR_ModuleCantUseDLLDeclareSpecifier1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ModuleCantUseDLLDeclareSpecifier1">
        <file name="a.vb"><![CDATA[
        Module M
            Protected Declare Sub Goo Lib "My" ()
        End Module
        ]]></file>
    </compilation>)
            compilation.VerifyDiagnostics(
                Diagnostic(ERRID.ERR_ModuleCantUseDLLDeclareSpecifier1, "Protected").WithArguments("Protected"))
        End Sub
 
        <Fact>
        Public Sub BC30791ERR_StructCantUseDLLDeclareSpecifier1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="StructCantUseDLLDeclareSpecifier1">
        <file name="a.vb"><![CDATA[
        Structure M
            Protected Declare Sub Goo Lib "My" ()
        End Structure
        ]]></file>
    </compilation>)
            compilation.VerifyDiagnostics(
                Diagnostic(ERRID.ERR_StructCantUseDLLDeclareSpecifier1, "Protected").WithArguments("Protected"))
        End Sub
 
        <Fact>
        Public Sub BC30795ERR_SharedStructMemberCannotSpecifyNew()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SharedStructMemberCannotSpecifyNew">
        <file name="a.vb"><![CDATA[
        Structure S1
            ' does not work
            Dim structVar1 As New System.ApplicationException

            ' works
            Shared structVar2 As New System.ApplicationException
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors = <errors><![CDATA[
BC30795: Non-shared members in a Structure cannot be declared 'New'.
            Dim structVar1 As New System.ApplicationException
                              ~~~
                       ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC31049ERR_SharedStructMemberCannotSpecifyInitializers()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BC30795ERR_SharedStructMemberCannotSpecifyInitializers">
        <file name="a.vb"><![CDATA[
        Structure S1
            ' does not work
            Dim structVar1 As System.ApplicationException = New System.ApplicationException()

            ' works
            Shared structVar2 As System.ApplicationException = New System.ApplicationException()
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors = <errors><![CDATA[
BC31049: Initializers on structure members are valid only for 'Shared' members and constants.
            Dim structVar1 As System.ApplicationException = New System.ApplicationException()
                ~~~~~~~~~~
                                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30798ERR_InvalidTypeForAliasesImport2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InvalidTypeForAliasesImport2">
        <file name="a.vb"><![CDATA[
Imports aa = System.Action           'BC30798
Imports bb = ns1.Intfc2.intfc2goo    'BC40056

Namespace ns1
    Public Class Intfc2
        Public intfc2goo As Integer
    End Class
End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30798: 'Action' for the Imports alias to 'Action' does not refer to a Namespace, Class, Structure, Interface, Enum or Module.
Imports aa = System.Action           'BC30798
        ~~~~~~~~~~~~~~~~~~
BC40056: Namespace or type specified in the Imports 'ns1.Intfc2.intfc2goo' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports bb = ns1.Intfc2.intfc2goo    'BC40056
             ~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        <WorkItem(13926, "https://github.com/dotnet/roslyn/issues/13926")>
        Public Sub BadAliasTarget()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports BadAlias = unknown

Public Class Class1
    Public Shared Sub Main()
    End Sub

    Function Test() As BadAlias 
        Return Nothing
    End Function
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'unknown' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports BadAlias = unknown
                   ~~~~~~~
BC31208: Type or namespace 'unknown' is not defined.
    Function Test() As BadAlias 
                       ~~~~~~~~
                 ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
            Dim test = compilation1.GetTypeByMetadataName("Class1").GetMember(Of MethodSymbol)("Test")
 
            Assert.True(test.ReturnType.IsErrorType())
            Assert.Equal(DiagnosticSeverity.Error, DirectCast(test.ReturnType, ErrorTypeSymbol).ErrorInfo.Severity)
        End Sub
 
        <Fact>
        Public Sub BC30828ERR_ObsoleteAsAny()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ObsoleteAsAny">
        <file name="a.vb"><![CDATA[
        Class C1
            Declare Sub goo Lib "a.dll" (ByRef bit As Any)
        End Class
        ]]></file>
    </compilation>)
 
            compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_ObsoleteAsAny, "Any").WithArguments("Any"))
        End Sub
 
        <Fact>
        Public Sub BC30906ERR_OverrideWithArrayVsParamArray2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverrideWithArrayVsParamArray2">
        <file name="a.vb"><![CDATA[
        Class C1
            Overridable Sub goo(ByVal a As Integer())
            End Sub
        End Class
        Class C2
            Inherits C1
            Overrides Sub goo(ByVal ParamArray a As Integer())
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30906: 'Public Overrides Sub goo(ParamArray a As Integer())' cannot override 'Public Overridable Sub goo(a As Integer())' because they differ by parameters declared 'ParamArray'.
            Overrides Sub goo(ByVal ParamArray a As Integer())
                          ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30907ERR_CircularBaseDependencies4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CircularBaseDependencies4">
        <file name="a.vb"><![CDATA[
        Class A
            Inherits B
        End Class
        Class B
            Inherits C
        End Class
        Class C
            Inherits A.D
        End Class
        Partial Class A
            Class D
            End Class
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30907: This inheritance causes circular dependencies between class 'A' and its nested or base type '
    'A' inherits from 'B'.
    'B' inherits from 'C'.
    'C' inherits from 'A.D'.
    'A.D' is nested in 'A'.'.
            Inherits B
                     ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30908ERR_NestedBase2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NestedBase2">
        <file name="a.vb"><![CDATA[
        NotInheritable Class cls1b
            Inherits cls1a
            MustInherit Class cls1a
                Sub subScen1()
                    gstrexpectedresult = "Scen1"
                End Sub
            End Class
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31446: Class 'cls1b' cannot reference its nested type 'cls1b.cls1a' in Inherits clause.
            Inherits cls1a
                     ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30909ERR_AccessMismatchOutsideAssembly4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Public Class PublicClass
            Protected Friend Structure ProtectedFriendStructure
            End Structure
        End Class
        Friend Class FriendClass
        End Class
        Friend Structure FriendStructure
        End Structure
        Friend Interface FriendInterface
        End Interface
        Friend Enum FriendEnum
            A
        End Enum
        Public Class A
            Inherits PublicClass
            Public F As ProtectedFriendStructure
            Public G As FriendClass
            Public H As FriendStructure
        End Class
        Public Structure B
            Public F As FriendInterface
            Public G As FriendEnum
        End Structure
        Public Class C
            Inherits PublicClass
            Public Function F() As ProtectedFriendStructure
            End Function
            Public Sub M(x As FriendClass)
            End Sub
        End Class
        Public Interface I
            Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'F' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'A'.
            Public F As ProtectedFriendStructure
                        ~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'G' cannot expose type 'FriendClass' outside the project through class 'A'.
            Public G As FriendClass
                        ~~~~~~~~~~~
BC30909: 'H' cannot expose type 'FriendStructure' outside the project through class 'A'.
            Public H As FriendStructure
                        ~~~~~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendInterface' outside the project through structure 'B'.
            Public F As FriendInterface
                        ~~~~~~~~~~~~~~~
BC30909: 'G' cannot expose type 'FriendEnum' outside the project through structure 'B'.
            Public G As FriendEnum
                        ~~~~~~~~~~
BC30909: 'F' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'C'.
            Public Function F() As ProtectedFriendStructure
                                   ~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendClass' outside the project through class 'C'.
            Public Sub M(x As FriendClass)
                              ~~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendStructure' outside the project through interface 'I'.
            Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
                            ~~~~~~~~~~~~~~~
BC30909: 'y' cannot expose type 'FriendInterface' outside the project through interface 'I'.
            Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
                                                  ~~~~~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendEnum' outside the project through interface 'I'.
            Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
                                                                      ~~~~~~~~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Public Class PublicClass
            Protected Friend Structure ProtectedFriendStructure
            End Structure
        End Class
        Friend Class FriendClass
        End Class
        Friend Structure FriendStructure
        End Structure
        Friend Interface FriendInterface
        End Interface
        Friend Enum FriendEnum
            A
        End Enum
        Public Class A
            Inherits PublicClass
            Property P As ProtectedFriendStructure
            Property Q As FriendClass
            Property R As FriendStructure
        End Class
        Public Structure B
            Property P As FriendInterface
            Property Q As FriendEnum
        End Structure
        Public Class C
            Inherits PublicClass
            ReadOnly Property P(x As FriendClass) As ProtectedFriendStructure
                Get
                    Return Nothing
                End Get
            End Property
        End Class
        Public Interface I
            ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'P' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'A'.
            Property P As ProtectedFriendStructure
                          ~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'Q' cannot expose type 'FriendClass' outside the project through class 'A'.
            Property Q As FriendClass
                          ~~~~~~~~~~~
BC30909: 'R' cannot expose type 'FriendStructure' outside the project through class 'A'.
            Property R As FriendStructure
                          ~~~~~~~~~~~~~~~
BC30909: 'P' cannot expose type 'FriendInterface' outside the project through structure 'B'.
            Property P As FriendInterface
                          ~~~~~~~~~~~~~~~
BC30909: 'Q' cannot expose type 'FriendEnum' outside the project through structure 'B'.
            Property Q As FriendEnum
                          ~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendClass' outside the project through class 'C'.
            ReadOnly Property P(x As FriendClass) As ProtectedFriendStructure
                                     ~~~~~~~~~~~
BC30909: 'P' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'C'.
            ReadOnly Property P(x As FriendClass) As ProtectedFriendStructure
                                                     ~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendStructure' outside the project through interface 'I'.
            ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
                                     ~~~~~~~~~~~~~~~
BC30909: 'y' cannot expose type 'FriendInterface' outside the project through interface 'I'.
            ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
                                                           ~~~~~~~~~~~~~~~
BC30909: 'P' cannot expose type 'FriendEnum' outside the project through interface 'I'.
            ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
                                                                               ~~~~~~~~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(528153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528153")>
        <Fact()>
        Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Public Class PublicClass
            Protected Friend Interface ProtectedFriendInterface
            End Interface
            Protected Friend Class ProtectedFriendClass
            End Class
        End Class
        Friend Interface FriendInterface
        End Interface
        Friend Class FriendClass
        End Class
        Public Class A
            Inherits PublicClass
            Public Sub M(Of T As ProtectedFriendInterface, U As ProtectedFriendClass)()
            End Sub
        End Class
        Public Structure B
            Public Sub M(Of T As FriendInterface, U As FriendClass)()
            End Sub
        End Structure
        Public Interface I
            Function F(Of T As FriendInterface, U As FriendClass)() As Object
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'M' cannot expose type 'PublicClass.ProtectedFriendInterface' outside the project through class 'A'.
            Public Sub M(Of T As ProtectedFriendInterface, U As ProtectedFriendClass)()
                                 ~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'M' cannot expose type 'PublicClass.ProtectedFriendClass' outside the project through class 'A'.
            Public Sub M(Of T As ProtectedFriendInterface, U As ProtectedFriendClass)()
                                                                ~~~~~~~~~~~~~~~~~~~~
BC30909: 'M' cannot expose type 'FriendInterface' outside the project through structure 'B'.
            Public Sub M(Of T As FriendInterface, U As FriendClass)()
                                 ~~~~~~~~~~~~~~~
BC30909: 'M' cannot expose type 'FriendClass' outside the project through structure 'B'.
            Public Sub M(Of T As FriendInterface, U As FriendClass)()
                                                       ~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendInterface' outside the project through interface 'I'.
            Function F(Of T As FriendInterface, U As FriendClass)() As Object
                               ~~~~~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendClass' outside the project through interface 'I'.
            Function F(Of T As FriendInterface, U As FriendClass)() As Object
                                                     ~~~~~~~~~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(528153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528153")>
        <Fact()>
        Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Namespace N
            Public Interface A
                Friend Interface B
                End Interface
                Public Interface C
                    Function F() As B
                    Public Interface D
                        Sub M(o As B)
                    End Interface
                End Interface
            End Interface
            Public Interface E
                Inherits A
                Function F() As B
            End Interface
            Public Interface F
                Sub M(o As A.B)
            End Interface
        End Namespace
        Public Interface G
            Function F() As N.A.B
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'F' cannot expose type 'A.B' outside the project through interface 'C'.
                    Function F() As B
                                    ~
BC30909: 'o' cannot expose type 'A.B' outside the project through interface 'D'.
                        Sub M(o As B)
                                   ~
BC30909: 'F' cannot expose type 'A.B' outside the project through interface 'E'.
                Function F() As B
                                ~
BC30909: 'o' cannot expose type 'A.B' outside the project through interface 'F'.
                Sub M(o As A.B)
                           ~~~
BC30909: 'F' cannot expose type 'A.B' outside the project through interface 'G'.
            Function F() As N.A.B
                            ~~~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Friend Enum E
            A
        End Enum
        Public Class C
            Public Const F As E = E.A
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'F' cannot expose type 'E' outside the project through class 'C'.
            Public Const F As E = E.A
                              ~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30910ERR_InheritanceAccessMismatchOutside3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InheritanceAccessMismatchOutside3">
        <file name="a.vb"><![CDATA[
        Friend Interface I1
        End Interface
        Public Interface I2
            Inherits I1
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30910: 'I2' cannot inherit from interface 'I1' because it expands the access of the base interface outside the assembly.
            Inherits I1
                     ~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30911ERR_UseOfObsoletePropertyAccessor3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UseOfObsoletePropertyAccessor3">
        <file name="a.vb"><![CDATA[
        Imports System
        Class C1
            ReadOnly Property p As String
                <Obsolete("hello", True)>
                Get
                    Return "hello"
                End Get
            End Property
        End Class
        Class C2
            Sub goo()
                Dim s As New C1
                Dim a = s.p
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30911: 'Get' accessor of 'Public ReadOnly Property p As String' is obsolete: 'hello'.
                Dim a = s.p
                        ~~~
]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30912ERR_UseOfObsoletePropertyAccessor2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UseOfObsoletePropertyAccessor2">
        <file name="a.vb"><![CDATA[
        Imports System
        Class C1
            ReadOnly Property p As String
                <Obsolete(nothing,True)>
                Get
                    Return "hello"
                End Get
            End Property
        End Class
        Class C2
            Sub goo()
                Dim s As New C1
                Dim a = s.p
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30912: 'Get' accessor of 'Public ReadOnly Property p As String' is obsolete.
                Dim a = s.p
                        ~~~
]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543640, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543640")>
        Public Sub BC30914ERR_AccessMismatchImplementedEvent6()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AccessMismatchImplementedEvent6">
        <file name="a.vb"><![CDATA[
        Public Class C
            Protected Interface i1
                Event goo()
            End Interface
            Friend Class c1
                Implements i1
                Public Event goo() Implements i1.goo
            End Class
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30914: 'goo' cannot expose the underlying delegate type 'C.i1.gooEventHandler' of the event it is implementing to namespace '<Default>' through class 'c1'.
                Public Event goo() Implements i1.goo
                             ~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543641, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543641")>
        Public Sub BC30915ERR_AccessMismatchImplementedEvent4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AccessMismatchImplementedEvent4">
        <file name="a.vb"><![CDATA[
        Interface i1
            Event goo()
        End Interface
        Public Class c1
            Implements i1
            Public Event goo() Implements i1.goo
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30915: 'goo' cannot expose the underlying delegate type 'i1.gooEventHandler' of the event it is implementing outside the project through class 'c1'.
            Public Event goo() Implements i1.goo
                         ~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30916ERR_InheritanceCycleInImportedType1()
            Dim C1 = TestReferences.SymbolsTests.CyclicInheritance.Class1
            Dim C2 = TestReferences.SymbolsTests.CyclicInheritance.Class2
 
            Dim Comp = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="Compilation">
    <file name="a.vb"><![CDATA[
        Class C
            Class C
                Inherits C1
                implements I1
            End Class
        End Class
    ]]></file>
</compilation>,
{NetFramework.mscorlib, C1, C2})
 
            Dim expectedErrors = <errors><![CDATA[
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
                Inherits C1
                         ~~
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
                implements I1
                           ~~
BC30916: Type 'I1' is not supported because it either directly or indirectly inherits from itself.
                implements I1
                           ~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
 
        End Sub
 
        <Fact>
        Public Sub BC30916ERR_InheritanceCycleInImportedType1_2()
            Dim C1 = TestReferences.SymbolsTests.CyclicInheritance.Class1
            Dim C2 = TestReferences.SymbolsTests.CyclicInheritance.Class2
 
            Dim Comp = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="Compilation">
    <file name="a.vb"><![CDATA[
        Class C
            Inherits C2
            implements I1
        End Class
    ]]></file>
</compilation>,
{NetFramework.mscorlib, C1, C2})
 
            Dim expectedErrors = <errors><![CDATA[
BC30916: Type 'C2' is not supported because it either directly or indirectly inherits from itself.
            Inherits C2
                     ~~
BC30916: Type 'C2' is not supported because it either directly or indirectly inherits from itself.
            implements I1
                       ~~
BC30916: Type 'I1' is not supported because it either directly or indirectly inherits from itself.
            implements I1
                       ~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
 
        End Sub
 
        <Fact>
        Public Sub BC30916ERR_InheritanceCycleInImportedType1_3()
            Dim C1 = TestReferences.SymbolsTests.CyclicInheritance.Class1
            Dim C2 = TestReferences.SymbolsTests.CyclicInheritance.Class2
 
            Dim Comp = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="Compilation">
    <file name="a.vb"><![CDATA[
        Class C
            Inherits C1
            implements I1
        End Class
    ]]></file>
</compilation>,
{NetFramework.mscorlib, C1, C2})
 
            Dim expectedErrors = <errors><![CDATA[
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
            Inherits C1
                     ~~
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
            implements I1
                       ~~
BC30916: Type 'I1' is not supported because it either directly or indirectly inherits from itself.
            implements I1
                       ~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
 
        End Sub
 
        <Fact>
        Public Sub BC30921ERR_InheritsTypeArgAccessMismatch7()
            Dim Comp = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsTypeArgAccessMismatch7">
    <file name="a.vb"><![CDATA[
        Public Class containingClass
            Public Class baseClass(Of t)
            End Class
            Friend Class derivedClass
                Inherits baseClass(Of internalStructure)
            End Class
            Private Structure internalStructure
                Dim firstMember As Integer
            End Structure
        End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30921: 'derivedClass' cannot inherit from class 'containingClass.baseClass(Of containingClass.internalStructure)' because it expands the access of type 'containingClass.internalStructure' to namespace '<Default>'.
                Inherits baseClass(Of internalStructure)
                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30922ERR_InheritsTypeArgAccessMismatchOutside5()
            Dim Comp = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsTypeArgAccessMismatchOutside5">
    <file name="a.vb"><![CDATA[
        Public Class baseClass(Of t)
        End Class
        Public Class derivedClass
            Inherits baseClass(Of restrictedStructure)
        End Class
        Friend Structure restrictedStructure
            Dim firstMember As Integer
        End Structure
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30922: 'derivedClass' cannot inherit from class 'baseClass(Of restrictedStructure)' because it expands the access of type 'restrictedStructure' outside the assembly.
            Inherits baseClass(Of restrictedStructure)
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC30925ERR_PartialTypeAccessMismatch3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="PartialTypeAccessMismatch3">
        <file name="a.vb"><![CDATA[
        Class s1
            Partial Protected Class c1
            End Class
            Partial Private Class c1
            End Class
            Partial Friend Class c1
            End Class

            Partial Protected Interface I1
            End Interface
            Partial Private Interface I1
            End Interface
            Partial Friend Interface I1
            End Interface
        End Class

        Partial Public Module m1
        End Module
        Partial Friend Module m1
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30925: Specified access 'Private' for 'c1' does not match the access 'Protected' specified on one of its other partial types.
            Partial Private Class c1
                                  ~~
BC30925: Specified access 'Friend' for 'c1' does not match the access 'Protected' specified on one of its other partial types.
            Partial Friend Class c1
                                 ~~
BC30925: Specified access 'Private' for 'I1' does not match the access 'Protected' specified on one of its other partial types.
            Partial Private Interface I1
                                      ~~
BC30925: Specified access 'Friend' for 'I1' does not match the access 'Protected' specified on one of its other partial types.
            Partial Friend Interface I1
                                     ~~
BC30925: Specified access 'Friend' for 'm1' does not match the access 'Public' specified on one of its other partial types.
        Partial Friend Module m1
                              ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30926ERR_PartialTypeBadMustInherit1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PartialTypeBadMustInherit1">
        <file name="a.vb"><![CDATA[
        Partial Class C1
            Partial MustInherit Class C2
            End Class
        End Class
        Partial Class C1
            Partial NotInheritable Class C2
            End Class
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30926: 'MustInherit' cannot be specified for partial type 'C2' because it cannot be combined with 'NotInheritable' specified for one of its other partial types.
            Partial MustInherit Class C2
                                      ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' dup of 30607?
        <Fact>
        Public Sub BC30927ERR_MustOverOnNotInheritPartClsMem1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustOverOnNotInheritPartClsMem1">
        <file name="a.vb"><![CDATA[
        Public Class C1
            MustOverride Sub goo()
        End Class
        Partial Public NotInheritable Class C1
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30927: 'MustOverride' cannot be specified on this member because it is in a partial type that is declared 'NotInheritable' in another partial definition.
            MustOverride Sub goo()
            ~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30928ERR_BaseMismatchForPartialClass3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BaseMismatchForPartialClass3">
        <file name="a.vb"><![CDATA[
        Option Strict On

        Interface I1
        End Interface

        Interface I2
        End Interface

        Partial Interface I3
            Inherits I1
        End Interface

        Partial Interface I3
            Inherits I2
        End Interface

        Class TestModule
            Sub Test(x As I3)
                Dim y As I1 = x
                Dim z As I2 = x
            End Sub
        End Class

        Partial Class Cls2(Of T, U)
            Inherits Class1(Of U, T)
        End Class
        Partial Class Cls2(Of T, U)
            Inherits Class1(Of T, T)
        End Class
        Class Class1(Of X, Y)
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30928: Base class 'Class1(Of T, T)' specified for class 'Cls2' cannot be different from the base class 'Class1(Of U, T)' of one of its other partial types.
            Inherits Class1(Of T, T)
                     ~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30931ERR_PartialTypeTypeParamNameMismatch3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A(Of T)
    Partial Class B(Of U As A(Of T), V As A(Of V))
    End Class
    Partial Class B(Of X As A(Of T), Y As A(Of Y))
    End Class

    Partial Interface I(Of U As A(Of T), V As A(Of V))
    End Interface
    Partial Interface I(Of X As A(Of T), Y As A(Of Y))
    End Interface
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30931: Type parameter name 'X' does not match the name 'U' of the corresponding type parameter defined on one of the other partial types of 'B'.
    Partial Class B(Of X As A(Of T), Y As A(Of Y))
                       ~
BC30931: Type parameter name 'Y' does not match the name 'V' of the corresponding type parameter defined on one of the other partial types of 'B'.
    Partial Class B(Of X As A(Of T), Y As A(Of Y))
                                     ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B'.
    Partial Class B(Of X As A(Of T), Y As A(Of Y))
                                     ~
BC30002: Type 'Y' is not defined.
    Partial Class B(Of X As A(Of T), Y As A(Of Y))
                                               ~
BC30931: Type parameter name 'X' does not match the name 'U' of the corresponding type parameter defined on one of the other partial types of 'I'.
    Partial Interface I(Of X As A(Of T), Y As A(Of Y))
                           ~
BC30931: Type parameter name 'Y' does not match the name 'V' of the corresponding type parameter defined on one of the other partial types of 'I'.
    Partial Interface I(Of X As A(Of T), Y As A(Of Y))
                                         ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'I'.
    Partial Interface I(Of X As A(Of T), Y As A(Of Y))
                                         ~
BC30002: Type 'Y' is not defined.
    Partial Interface I(Of X As A(Of T), Y As A(Of Y))
                                                   ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30932ERR_PartialTypeConstraintMismatch1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface IA(Of T)
End Interface
Interface IB
End Interface
' Different constraints.
Partial Class A1(Of T As Structure)
End Class
Partial Class A1(Of T As Class)
End Class
Partial Class A2(Of T As Structure, U As IA(Of T))
End Class
Partial Class A2(Of T As Class, U As IB)
End Class
Partial Class A3(Of T As IA(Of T))
End Class
Partial Class A3(Of T As IA(Of IA(Of T)))
End Class
Partial Class A4(Of T As {Structure, IB})
End Class
Partial Class A4(Of T As {Class, IB})
End Class
Partial Structure A5(Of T As {IA(Of T), New})
End Structure
Partial Structure A5(Of T As {IA(Of T), New})
End Structure
Partial Structure A5(Of T As {IB, New})
End Structure
' Additional constraints.
Partial Class B1(Of T As New)
End Class
Partial Class B1(Of T As {Class, New})
End Class
Partial Class B2(Of T, U As {IA(Of T)})
End Class
Partial Class B2(Of T, U As {IB, IA(Of T)})
End Class
' Missing constraints.
Partial Class C1(Of T As {Class, New})
End Class
Partial Class C1(Of T As {New})
End Class
Partial Structure C2(Of T, U As {IB, IA(Of T)})
End Structure
Partial Structure C2(Of T, U As {IA(Of T)})
End Structure
' Same constraints, different order.
Partial Class D1(Of T As {Structure, IA(Of T), IB})
End Class
Partial Class D1(Of T As {IB, IA(Of T), Structure})
End Class
Partial Class D1(Of T As {Structure, IB, IA(Of T)})
End Class
Partial Class D2(Of T, U, V As {T, U})
End Class
Partial Class D2(Of T, U, V As {U, T})
End Class
' Different constraint clauses.
Partial Class E1(Of T, U As T)
End Class
Partial Class E1(Of T As Class, U)
End Class
Partial Class E1(Of T, U As T)
End Class
Partial Class E2(Of T, U As IB)
End Class
Partial Class E2(Of T As IA(Of U), U)
End Class
Partial Class E2(Of T As IB, U)
End Class
' Additional constraint clause.
Partial Class F1(Of T)
End Class
Partial Class F1(Of T)
End Class
Partial Class F1(Of T As Class)
End Class
Partial Class F2(Of T As Class, U)
End Class
Partial Class F2(Of T As Class, U As T)
End Class
' Missing constraint clause.
Partial Class G1(Of T As {Class})
End Class
Partial Class G1(Of T)
End Class
Partial Structure G2(Of T As {Class}, U As {T})
End Structure
Partial Structure G2(Of T As {Class}, U)
End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A1'.
Partial Class A1(Of T As Class)
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A2'.
Partial Class A2(Of T As Class, U As IB)
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A2'.
Partial Class A2(Of T As Class, U As IB)
                                ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A3'.
Partial Class A3(Of T As IA(Of IA(Of T)))
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A4'.
Partial Class A4(Of T As {Class, IB})
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A5'.
Partial Structure A5(Of T As {IB, New})
                        ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B1'.
Partial Class B1(Of T As {Class, New})
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B2'.
Partial Class B2(Of T, U As {IB, IA(Of T)})
                       ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'C1'.
Partial Class C1(Of T As {New})
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'C2'.
Partial Structure C2(Of T, U As {IA(Of T)})
                           ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E1'.
Partial Class E1(Of T As Class, U)
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E1'.
Partial Class E1(Of T As Class, U)
                                ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IA(Of U), U)
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IA(Of U), U)
                                   ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IB, U)
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IB, U)
                             ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'F1'.
Partial Class F1(Of T As Class)
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'F2'.
Partial Class F2(Of T As Class, U As T)
                                ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'G1'.
Partial Class G1(Of T)
                    ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'G2'.
Partial Structure G2(Of T As {Class}, U)
                                      ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Unrecognized constraint types should not result
        ' in constraint mismatch errors in partial types.
        <Fact()>
        Public Sub BC30932ERR_PartialTypeConstraintMismatch1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Partial Class C(Of T As {Class, Unknown})
End Class
Partial Class C(Of T As {Unknown, Class})
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'Unknown' is not defined.
Partial Class C(Of T As {Class, Unknown})
                                ~~~~~~~
BC30002: Type 'Unknown' is not defined.
Partial Class C(Of T As {Unknown, Class})
                         ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Duplicate constraints in partial types.
        <Fact()>
        Public Sub BC30932ERR_PartialTypeConstraintMismatch1_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Partial Class A(Of T As {New, New, I, I})
End Class
Partial Class A(Of T As {New, I})
End Class
Partial Class B(Of T, U As T)
End Class
Partial Class B(Of T, U As {T, T})
End Class
        ]]></file>
    </compilation>)
            ' Note: Dev10 simply reports the duplicate constraint in each case, even
            ' in subsequent partial declarations. Arguably the Dev10 behavior is better.
            Dim expectedErrors1 = <errors><![CDATA[
BC32081: 'New' constraint cannot be specified multiple times for the same type parameter.
Partial Class A(Of T As {New, New, I, I})
                              ~~~
BC32071: Constraint type 'I' already specified for this type parameter.
Partial Class A(Of T As {New, New, I, I})
                                      ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A'.
Partial Class A(Of T As {New, I})
                   ~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B'.
Partial Class B(Of T, U As {T, T})
                      ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30935ERR_AmbiguousOverrides3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AmbiguousOverrides3">
        <file name="a.vb"><![CDATA[
        Public Class baseClass(Of t)
            Public Overridable Sub goo(ByVal inputValue As String)
            End Sub
            Public Overridable Sub goo(ByVal inputValue As t)
            End Sub
        End Class
        Public Class derivedClass
            Inherits baseClass(Of String)
            Overrides Sub goo(ByVal inputValue As String)
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30935: Member 'Public Overridable Sub goo(inputValue As String)' that matches this signature cannot be overridden because the class 'baseClass' contains multiple members with this same name and signature: 
   'Public Overridable Sub goo(inputValue As String)'
   'Public Overridable Sub goo(inputValue As t)'
            Overrides Sub goo(ByVal inputValue As String)
                          ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC30937ERR_AmbiguousImplements3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AmbiguousImplements3">
        <file name="a.vb"><![CDATA[
        Public Interface baseInterface(Of t)
            Sub doSomething(ByVal inputValue As String)
            Sub doSomething(ByVal inputValue As t)
        End Interface
        Public Class implementingClass
            Implements baseInterface(Of String)
            Sub doSomething(ByVal inputValue As String) _
                Implements baseInterface(Of String).doSomething
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'implementingClass' must implement 'Sub doSomething(inputValue As String)' for interface 'baseInterface(Of String)'.
            Implements baseInterface(Of String)
                       ~~~~~~~~~~~~~~~~~~~~~~~~
BC30937: Member 'baseInterface(Of String).doSomething' that matches this signature cannot be implemented because the interface 'baseInterface(Of String)' contains multiple members with this same name and signature:
   'Sub doSomething(inputValue As String)'
   'Sub doSomething(inputValue As String)'
                Implements baseInterface(Of String).doSomething
                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC30972ERR_StructLayoutAttributeNotAllowed()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="StructLayoutAttributeNotAllowed">
        <file name="a.vb"><![CDATA[
        Option Strict On
        Imports System.Runtime.InteropServices
        <StructLayout(1)>
        Structure C1(Of T)
            Sub goo(ByVal a As T)
            End Sub
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30972: Attribute 'StructLayout' cannot be applied to a generic type.
        <StructLayout(1)>
         ~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31029ERR_EventHandlerSignatureIncompatible2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventHandlerSignatureIncompatible2">
        <file name="a.vb"><![CDATA[
        option strict on
        Class clsTest1
            Event ev1(ByVal ArgC As Char)
        End Class
        Class clsTest2
            Inherits clsTest1
            Shadows Event ev1(ByVal ArgI As Integer)
        End Class
        Class clsTest3
            Dim WithEvents clsTest As clsTest2
            Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31029: Method 'subTest' cannot handle event 'ev1' because they do not have a compatible signature.
            Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
                                                                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31029ERR_EventHandlerSignatureIncompatible2a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventHandlerSignatureIncompatible2a">
        <file name="a.vb"><![CDATA[
        option strict off
        Class clsTest1
            Event ev1(ByVal ArgC As Char)
        End Class
        Class clsTest2
            Inherits clsTest1
            Shadows Event ev1(ByVal ArgI As Integer)
        End Class
        Class clsTest3
            Dim WithEvents clsTest As clsTest2
            Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31029: Method 'subTest' cannot handle event 'ev1' because they do not have a compatible signature.
            Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
                                                                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(542143, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542143")>
        <Fact>
        Public Sub BC31033ERR_InterfaceImplementedTwice1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceImplementedTwice1">
        <file name="a.vb"><![CDATA[
        Class C1
            Implements I1(Of Integer), I1(Of Double), I1(Of Integer)        
        End Class
        Interface I1(Of T)
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31033: Interface 'I1(Of Integer)' can be implemented only once by this type.
            Implements I1(Of Integer), I1(Of Double), I1(Of Integer)        
                                                      ~~~~~~~~~~~~~~                                      
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31033ERR_InterfaceImplementedTwice1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceImplementedTwice1">
        <file name="a.vb"><![CDATA[
        Class c3_1
            Implements i3_1
        End Class
        Class c3_2
            Inherits c3_1
            Implements i3_1, i3_1, i3_1
        End Class
        Interface i3_1
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31033: Interface 'i3_1' can be implemented only once by this type.
            Implements i3_1, i3_1, i3_1
                             ~~~~
BC31033: Interface 'i3_1' can be implemented only once by this type.
            Implements i3_1, i3_1, i3_1
                                   ~~~~                                      
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31035ERR_InterfaceNotImplemented1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceNotImplemented1">
        <file name="a.vb"><![CDATA[
        Interface I
            Sub S()
        End Interface
        Class C1
            Implements I
            Public Sub S() Implements I.S
            End Sub
        End Class
        Class C2
            Inherits C1
            Public Sub F() Implements I.S
            End Sub
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31035: Interface 'I' is not implemented by this class.
            Public Sub F() Implements I.S
                                      ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31041ERR_BadInterfaceMember()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadInterfaceMember">
        <file name="a.vb"><![CDATA[
        Interface Interface1
            Module Module1
            End Module
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30603: Statement cannot appear within an interface body.
            Module Module1
            ~~~~~~~~~~~~~~
BC30603: Statement cannot appear within an interface body.
            End Module
            ~~~~~~~~~~
BC30622: 'End Module' must be preceded by a matching 'Module'.
            End Module
            ~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseParseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31043ERR_ArrayInitInStruct_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BC31043ERR_ArrayInitInStruct_1">
        <file name="a.vb"><![CDATA[
        Public Structure S1
            Public j(10) As Integer
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31043: Arrays declared as structure members cannot be declared with an initial size.
            Public j(10) As Integer
                   ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31043ERR_ArrayInitInStruct_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BC31043ERR_ArrayInitInStruct_2">
        <file name="a.vb"><![CDATA[
        Public Structure S1
            Public Shared j(10) As Integer
        End Structure
        ]]></file>
    </compilation>)
            CompilationUtils.AssertNoDeclarationDiagnostics(compilation1)
        End Sub
 
        <Fact>
        Public Sub BC31043ERR_ArrayInitInStruct_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BC31043ERR_ArrayInitInStruct_3">
        <file name="a.vb"><![CDATA[
        Public Structure S1
            Public k(10) As Integer = {1}
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31043: Arrays declared as structure members cannot be declared with an initial size.
            Public k(10) As Integer = {1}
                   ~~~~~
BC31049: Initializers on structure members are valid only for 'Shared' members and constants.
            Public k(10) As Integer = {1}
                   ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31043ERR_ArrayInitInStruct_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ArrayInitInStruct_4">
        <file name="a.vb"><![CDATA[
        Public Structure S1
            Public l(10), m(1), n As Integer
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31043: Arrays declared as structure members cannot be declared with an initial size.
            Public l(10), m(1), n As Integer
                   ~~~~~
BC31043: Arrays declared as structure members cannot be declared with an initial size.
            Public l(10), m(1), n As Integer
                          ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31044ERR_EventTypeNotDelegate()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventTypeNotDelegate">
        <file name="a.vb"><![CDATA[
        Public Class C1
            Public Event E As String
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31044: Events declared with an 'As' clause must have a delegate type.
            Public Event E As String
                              ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31047ERR_ProtectedTypeOutsideClass()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ProtectedTypeOutsideClass">
        <file name="a.vb"><![CDATA[
        Protected Enum Enum11
            Apple
        End Enum
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31047: Protected types can only be declared inside of a class.
Protected Enum Enum11
               ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Checks for ERRID_StructCantUseVarSpecifier1 
        ' Oldname"ModifierErrorsInsideStructures"
        <Fact>
        Public Sub BC31047ERR_ProtectedTypeOutsideClass_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[

            Structure s
                Protected Enum e3
                    a
                End Enum

                Private Enum e4
                    x
                End Enum

               protected delegate Sub d1(i as integer)

               Protected Structure s_s1
               end structure

            End Structure

           ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC31047: Protected types can only be declared inside of a class.
                Protected Enum e3
                               ~~
BC31047: Protected types can only be declared inside of a class.
               protected delegate Sub d1(i as integer)
                                      ~~
BC31047: Protected types can only be declared inside of a class.
               Protected Structure s_s1
                                   ~~~~                                     
                       ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC31048ERR_DefaultPropertyWithNoParams()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class A
            Default Property P()
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
        End Class
        Class B
            Default ReadOnly Property Q(ParamArray x As Object())
                Get
                    Return Nothing
                End Get
            End Property
        End Class
        Interface IA
            Default WriteOnly Property P()
        End Interface
        Interface IB
            Default Property Q(ParamArray x As Object())
        End Interface
        ]]></file>
    </compilation>)
            compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31048: Properties with no required parameters cannot be declared 'Default'.
            Default Property P()
                             ~
BC31048: Properties with no required parameters cannot be declared 'Default'.
            Default ReadOnly Property Q(ParamArray x As Object())
                                      ~
BC31048: Properties with no required parameters cannot be declared 'Default'.
            Default WriteOnly Property P()
                                       ~
BC31048: Properties with no required parameters cannot be declared 'Default'.
            Default Property Q(ParamArray x As Object())
                             ~
                 ]]></errors>)
        End Sub
 
        <Fact>
        Public Sub BC31048ERR_DefaultPropertyWithNoParams_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface IA
    Default Property P(Optional o As Object = Nothing)
    Property Q(Optional o As Object = Nothing)
End Interface
Interface IB
    Default Property P(x As Object, Optional y As Integer = 1)
    Default Property P(Optional x As Integer = 0, Optional y As Integer = 1)
    Property Q(Optional x As Integer = 0, Optional y As Integer = 1)
End Interface
        ]]></file>
    </compilation>)
            compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31048: Properties with no required parameters cannot be declared 'Default'.
    Default Property P(Optional o As Object = Nothing)
                     ~
BC31048: Properties with no required parameters cannot be declared 'Default'.
    Default Property P(Optional x As Integer = 0, Optional y As Integer = 1)
                     ~
                 ]]></errors>)
        End Sub
 
        <Fact>
        Public Sub BC31049ERR_InitializerInStruct()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InitializerInStruct">
        <file name="a.vb"><![CDATA[
        Structure S1
            ' does not work
            Dim i As Integer = 10

            ' works
            const j as Integer  = 10
            shared k as integer = 10
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31049: Initializers on structure members are valid only for 'Shared' members and constants.
            Dim i As Integer = 10
                ~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31051ERR_DuplicateImport1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateImport1">
        <file name="a.vb"><![CDATA[
        Imports ns1.genclass(Of String)
        Imports ns1.genclass(Of String)
        Namespace ns1
            Class genclass(Of T)
            End Class
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31051: Namespace or type 'genclass(Of String)' has already been imported.
        Imports ns1.genclass(Of String)
                ~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31051ERR_DuplicateImport1_GlobalImports()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateImport1_GlobalImports">
        <file name="a.vb"><![CDATA[
        Imports System.Collections
        Imports System.Collections
        Class C
        End Class
        ]]></file>
    </compilation>, options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary).WithGlobalImports(
                                GlobalImport.Parse(
                                    {"System.Collections", "System.Collections"}
                                )
                    ))
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31051: Namespace or type 'System.Collections' has already been imported.
        Imports System.Collections
                ~~~~~~~~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31051ERR_DuplicateImport1_GlobalImports_NoErrors()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BC31051ERR_DuplicateImport1_GlobalImports_NoErrors">
        <file name="a.vb"><![CDATA[
        Imports System.Collections
        Class C
        End Class
        ]]></file>
    </compilation>, options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary).WithGlobalImports(
                                GlobalImport.Parse(
                                    {"System.Collections", "System.Collections"}
                                )
                    ))
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, <errors><![CDATA[]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31052ERR_BadModuleFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BC31052ERR_BadModuleFlags1">
        <file name="a.vb"><![CDATA[
        NotInheritable Module M1
        End Module
        shared Module M2
        End Module
        readonly Module M3
        End Module
        overridable Module M5
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31052: Modules cannot be declared 'NotInheritable'.
NotInheritable Module M1
~~~~~~~~~~~~~~
BC31052: Modules cannot be declared 'shared'.
        shared Module M2
        ~~~~~~
BC31052: Modules cannot be declared 'readonly'.
        readonly Module M3
        ~~~~~~~~
BC31052: Modules cannot be declared 'overridable'.
        overridable Module M5
        ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31060ERR_SynthMemberClashesWithMember5_1()
            CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
        Imports System
        Module M1
            Class Cls1
                Event e()
            End Class
            Event obj1()
            Dim obj1event As [Delegate]
        End Module
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_SynthMemberClashesWithMember5, "obj1").WithArguments("event", "obj1", "obj1Event", "module", "M1"))
        End Sub
 
        <Fact>
        Public Sub BC31060ERR_SynthMemberClashesWithMember5_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Property P
            Shared Property Q
            Property r
            Shared Property s
            Property T
            Shared Property u
            Function get_p()
                Return Nothing
            End Function
            Shared Function set_p()
                Return Nothing
            End Function
            Shared Sub GET_Q()
            End Sub
            Sub SET_Q()
            End Sub
            Dim get_R
            Shared set_R
            Shared Property get_s
            Property set_s
            Class get_T
            End Class
            Structure set_T
            End Structure
            Enum get_U
                X
            End Enum
        End Class
        ]]></file>
    </compilation>)
            ' Since nested types are bound before members, we report 31061 for
            ' cases where nested types conflict with implicit property members.
            ' This differs from Dev10 which reports 31060 in all these cases.
            Dim expectedErrors1 = <errors><![CDATA[
BC31060: property 'P' implicitly defines 'get_P', which conflicts with a member of the same name in class 'C'.
            Property P
                     ~
BC31060: property 'P' implicitly defines 'set_P', which conflicts with a member of the same name in class 'C'.
            Property P
                     ~
BC31060: property 'Q' implicitly defines 'get_Q', which conflicts with a member of the same name in class 'C'.
            Shared Property Q
                            ~
BC31060: property 'Q' implicitly defines 'set_Q', which conflicts with a member of the same name in class 'C'.
            Shared Property Q
                            ~
BC31060: property 'r' implicitly defines 'get_r', which conflicts with a member of the same name in class 'C'.
            Property r
                     ~
BC31060: property 'r' implicitly defines 'set_r', which conflicts with a member of the same name in class 'C'.
            Property r
                     ~
BC31060: property 's' implicitly defines 'get_s', which conflicts with a member of the same name in class 'C'.
            Shared Property s
                            ~
BC31060: property 's' implicitly defines 'set_s', which conflicts with a member of the same name in class 'C'.
            Shared Property s
                            ~
BC31061: class 'get_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
            Class get_T
                  ~~~~~
BC31061: structure 'set_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
            Structure set_T
                      ~~~~~
BC31061: enum 'get_U' conflicts with a member implicitly declared for property 'u' in class 'C'.
            Enum get_U
                 ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31060ERR_SynthMemberClashesWithMember5_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Property P
                Get
                    Return Nothing
                End Get
                Set
                End Set
            End Property
            ReadOnly Property Q
                Get
                    Return Nothing
                End Get
            End Property
            WriteOnly Property R
                Set
                End Set
            End Property
            Private get_P
            Private set_P
            Private get_Q
            Private set_Q
            Private get_R
            Private set_R
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31060: property 'P' implicitly defines 'get_P', which conflicts with a member of the same name in class 'C'.
            Property P
                     ~
BC31060: property 'P' implicitly defines 'set_P', which conflicts with a member of the same name in class 'C'.
            Property P
                     ~
BC31060: property 'Q' implicitly defines 'get_Q', which conflicts with a member of the same name in class 'C'.
            ReadOnly Property Q
                              ~
BC31060: property 'R' implicitly defines 'set_R', which conflicts with a member of the same name in class 'C'.
            WriteOnly Property R
                               ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31060ERR_SynthMemberClashesWithMember5_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Property P
            Shared Property Q
            Property r
            Shared Property s
            Property T
            Shared Property U
            Property v
            Shared Property w
            Property X
            Function _p()
                Return Nothing
            End Function
            Shared Sub _Q()
            End Sub
            Dim _r
            Shared _S
            Shared Property _t
            Property _U
            Class _v
            End Class
            Structure _W
            End Structure
            Enum _x
                X
            End Enum
        End Class
        ]]></file>
    </compilation>)
            ' Since nested types are bound before members, we report 31061 for
            ' cases where nested types conflict with implicit property members.
            ' This differs from Dev10 which reports 31060 in all these cases.
            Dim expectedErrors1 = <errors><![CDATA[
BC31060: property 'P' implicitly defines '_P', which conflicts with a member of the same name in class 'C'.
            Property P
                     ~
BC31060: property 'Q' implicitly defines '_Q', which conflicts with a member of the same name in class 'C'.
            Shared Property Q
                            ~
BC31060: property 'r' implicitly defines '_r', which conflicts with a member of the same name in class 'C'.
            Property r
                     ~
BC31060: property 's' implicitly defines '_s', which conflicts with a member of the same name in class 'C'.
            Shared Property s
                            ~
BC31060: property 'T' implicitly defines '_T', which conflicts with a member of the same name in class 'C'.
            Property T
                     ~
BC31060: property 'U' implicitly defines '_U', which conflicts with a member of the same name in class 'C'.
            Shared Property U
                            ~
BC31061: class '_v' conflicts with a member implicitly declared for property 'v' in class 'C'.
            Class _v
                  ~~
BC31061: structure '_W' conflicts with a member implicitly declared for property 'w' in class 'C'.
            Structure _W
                      ~~
BC31061: enum '_x' conflicts with a member implicitly declared for property 'X' in class 'C'.
            Enum _x
                 ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31061ERR_MemberClashesWithSynth6_1()
            CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
        Module M1
            Class Cls1
                Event e()
            End Class
            Dim WithEvents ObjEvent As Cls1
            Event Obj()
        End Module
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_MemberClashesWithSynth6, "ObjEvent").WithArguments("WithEvents variable", "ObjEvent", "event", "Obj", "module", "M1"))
 
        End Sub
 
        <Fact>
        Public Sub BC31061ERR_MemberClashesWithSynth6_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Function get_p()
                Return Nothing
            End Function
            Shared Function set_p()
                Return Nothing
            End Function
            Shared Sub GET_Q()
            End Sub
            Sub SET_Q()
            End Sub
            Dim get_R
            Shared set_R
            Shared Property get_s
            Property set_s
            Class get_T
            End Class
            Structure set_T
            End Structure
            Enum get_U
                X
            End Enum
            Property P
            Shared Property Q
            Property r
            Shared Property s
            Property T
            Shared Property u
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31061: function 'get_p' conflicts with a member implicitly declared for property 'P' in class 'C'.
            Function get_p()
                     ~~~~~
BC31061: function 'set_p' conflicts with a member implicitly declared for property 'P' in class 'C'.
            Shared Function set_p()
                            ~~~~~
BC31061: sub 'GET_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
            Shared Sub GET_Q()
                       ~~~~~
BC31061: sub 'SET_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
            Sub SET_Q()
                ~~~~~
BC31061: variable 'get_R' conflicts with a member implicitly declared for property 'r' in class 'C'.
            Dim get_R
                ~~~~~
BC31061: variable 'set_R' conflicts with a member implicitly declared for property 'r' in class 'C'.
            Shared set_R
                   ~~~~~
BC31061: property 'get_s' conflicts with a member implicitly declared for property 's' in class 'C'.
            Shared Property get_s
                            ~~~~~
BC31061: property 'set_s' conflicts with a member implicitly declared for property 's' in class 'C'.
            Property set_s
                     ~~~~~
BC31061: class 'get_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
            Class get_T
                  ~~~~~
BC31061: structure 'set_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
            Structure set_T
                      ~~~~~
BC31061: enum 'get_U' conflicts with a member implicitly declared for property 'u' in class 'C'.
            Enum get_U
                 ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31061ERR_MemberClashesWithSynth6_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Private get_P
            Private set_P
            Private get_Q
            Private set_Q
            Private get_R
            Private set_R
            Property P
                Get
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            ReadOnly Property Q
                Get
                    Return Nothing
                End Get
            End Property
            WriteOnly Property R
                Set
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31061: variable 'get_P' conflicts with a member implicitly declared for property 'P' in class 'C'.
            Private get_P
                    ~~~~~
BC31061: variable 'set_P' conflicts with a member implicitly declared for property 'P' in class 'C'.
            Private set_P
                    ~~~~~
BC31061: variable 'get_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
            Private get_Q
                    ~~~~~
BC31061: variable 'set_R' conflicts with a member implicitly declared for property 'R' in class 'C'.
            Private set_R
                    ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31061ERR_MemberClashesWithSynth6_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Function _p()
                Return Nothing
            End Function
            Shared Sub _Q()
            End Sub
            Dim _r
            Shared _S
            Shared Property _t
            Property _U
            Class _v
            End Class
            Structure _W
            End Structure
            Enum _x
                X
            End Enum
            Property P
            Shared Property Q
            Property r
            Shared Property s
            Property T
            Shared Property U
            Property v
            Shared Property w
            Property X
        End Class
         ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31061: function '_p' conflicts with a member implicitly declared for property 'P' in class 'C'.
            Function _p()
                     ~~
BC31061: sub '_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
            Shared Sub _Q()
                       ~~
BC31061: variable '_r' conflicts with a member implicitly declared for property 'r' in class 'C'.
            Dim _r
                ~~
BC31061: variable '_S' conflicts with a member implicitly declared for property 's' in class 'C'.
            Shared _S
                   ~~
BC31061: property '_t' conflicts with a member implicitly declared for property 'T' in class 'C'.
            Shared Property _t
                            ~~
BC31061: property '_U' conflicts with a member implicitly declared for property 'U' in class 'C'.
            Property _U
                     ~~
BC31061: class '_v' conflicts with a member implicitly declared for property 'v' in class 'C'.
            Class _v
                  ~~
BC31061: structure '_W' conflicts with a member implicitly declared for property 'w' in class 'C'.
            Structure _W
                      ~~
BC31061: enum '_x' conflicts with a member implicitly declared for property 'X' in class 'C'.
            Enum _x
                 ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31063ERR_SetHasOnlyOneParam()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="SetHasOnlyOneParam">
        <file name="a.vb"><![CDATA[
        Module M
            WriteOnly Property P(ByVal i As Integer) As Integer
                Set(x As Integer, ByVal Value As Integer)
                End Set
            End Property
            WriteOnly Property Q()
                Set() ' No error
                    If value Is Nothing Then
                    End If
                End Set
            End Property
        End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31063: 'Set' method cannot have more than one parameter.
                Set(x As Integer, ByVal Value As Integer)
                ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31064ERR_SetValueNotPropertyType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SetValueNotPropertyType">
        <file name="a.vb"><![CDATA[
        ' Implicit property type and implicit set argument type (same)
        Structure A
            WriteOnly Property P%
                Set(ap%) ' no error
                End Set
            End Property
            WriteOnly Property Q&
                Set(aq&) ' no error
                End Set
            End Property
            WriteOnly Property R@
                Set(ar@) ' no error
                End Set
            End Property
            WriteOnly Property S!
                Set(as!) ' no error
                End Set
            End Property
            WriteOnly Property T#
                Set(at#) ' no error
                End Set
            End Property
            WriteOnly Property U$
                Set(au$) ' no error
                End Set
            End Property
        End Structure
        ' Implicit property type and explicit set argument type (same)
        Class B
            WriteOnly Property P%
                Set(bp As Integer) ' no error
                End Set
            End Property
            WriteOnly Property Q&
                Set(bq As Long) ' no error
                End Set
            End Property
            WriteOnly Property R@
                Set(br As Decimal) ' no error
                End Set
            End Property
            WriteOnly Property S!
                Set(ba As Single) ' no error
                End Set
            End Property
            WriteOnly Property T#
                Set(bt As Double) ' no error
                End Set
            End Property
            WriteOnly Property U$
                Set(bu As String) ' no error
                End Set
            End Property
        End Class
        ' Explicit property type and explicit set argument type (same)
        Structure C
            WriteOnly Property P As Integer
                Set(cp As Integer) ' no error
                End Set
            End Property
            WriteOnly Property Q As Long
                Set(cq As Long) ' no error
                End Set
            End Property
            WriteOnly Property R As Decimal
                Set(cr As Decimal) ' no error
                End Set
            End Property
            WriteOnly Property S As Single
                Set(cs As Single) ' no error
                End Set
            End Property
            WriteOnly Property T As Double
                Set(ct As Double) ' no error
                End Set
            End Property
            WriteOnly Property U As String
                Set(cu As String) ' no error
                End Set
            End Property
        End Structure
        ' Implicit property type and implicit set argument type (different)
        Class D
            WriteOnly Property P%
                Set(ap&) ' BC31064
                End Set
            End Property
            WriteOnly Property Q&
                Set(aq@) ' BC31064
                End Set
            End Property
            WriteOnly Property R@
                Set(ar!) ' BC31064
                End Set
            End Property
            WriteOnly Property S!
                Set(as#) ' BC31064
                End Set
            End Property
            WriteOnly Property T#
                Set(at$) ' BC31064
                End Set
            End Property
            WriteOnly Property U$
                Set(au%) ' BC31064
                End Set
            End Property
        End Class
        ' Implicit property type and explicit set argument type (different)
        Structure E
            WriteOnly Property P%
                Set(bp As Decimal) ' BC31064
                End Set
            End Property
            WriteOnly Property Q&
                Set(bq As Single) ' BC31064
                End Set
            End Property
            WriteOnly Property R@
                Set(br As Double) ' BC31064
                End Set
            End Property
            WriteOnly Property S!
                Set(ba As String) ' BC31064
                End Set
            End Property
            WriteOnly Property T#
                Set(bt As Integer) ' BC31064
                End Set
            End Property
            WriteOnly Property U$
                Set(bu As Long) ' BC31064
                End Set
            End Property
        End Structure
        ' Explicit property type and explicit set argument type (different)
        Class F
            WriteOnly Property P As Integer
                Set(cp As Single) ' BC31064
                End Set
            End Property
            WriteOnly Property Q As Long
                Set(cq As Double) ' BC31064
                End Set
            End Property
            WriteOnly Property R As Decimal
                Set(cr As String) ' BC31064
                End Set
            End Property
            WriteOnly Property S As Single
                Set(cs As Integer) ' BC31064
                End Set
            End Property
            WriteOnly Property T As Double
                Set(ct As Long) ' BC31064
                End Set
            End Property
            WriteOnly Property U As String
                Set(cu As Decimal) ' BC31064
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(ap&) ' BC31064
                    ~~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(aq@) ' BC31064
                    ~~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(ar!) ' BC31064
                    ~~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(as#) ' BC31064
                    ~~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(at$) ' BC31064
                    ~~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(au%) ' BC31064
                    ~~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(bp As Decimal) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(bq As Single) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(br As Double) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(ba As String) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(bt As Integer) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(bu As Long) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(cp As Single) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(cq As Double) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(cr As String) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(cs As Integer) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(ct As Long) ' BC31064
                    ~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(cu As Decimal) ' BC31064
                    ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31065ERR_SetHasToBeByVal1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SetHasToBeByVal1">
        <file name="a.vb"><![CDATA[
        Class C
            WriteOnly Property P
                Set(ByRef value)
                End Set
            End Property
            WriteOnly Property Q
                Set(ByVal ParamArray value())
                End Set
            End Property
            WriteOnly Property R As Integer()
                Set(ParamArray value As Integer())
                End Set
            End Property
            WriteOnly Property S
                Set(Optional value = Nothing)
                End Set
            End Property
            WriteOnly Property T
                Set(ByVal value)
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31065: 'Set' parameter cannot be declared 'ByRef'.
                Set(ByRef value)
                    ~~~~~
BC31065: 'Set' parameter cannot be declared 'ParamArray'.
                Set(ByVal ParamArray value())
                          ~~~~~~~~~~
BC31064: 'Set' parameter must have the same type as the containing property.
                Set(ByVal ParamArray value())
                                     ~~~~~
BC31065: 'Set' parameter cannot be declared 'ParamArray'.
                Set(ParamArray value As Integer())
                    ~~~~~~~~~~
BC31065: 'Set' parameter cannot be declared 'Optional'.
                Set(Optional value = Nothing)
                    ~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31067ERR_StructureCantUseProtected()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="StructureCantUseProtected">
        <file name="a.vb"><![CDATA[
        Structure S
            Protected Sub New(o)
            End Sub
            Protected Friend Sub New(x, y)
            End Sub
            Protected Sub M()
            End Sub
            Protected Friend Function F()
                Return Nothing
            End Function
        End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
            Protected Sub New(o)
            ~~~~~~~~~
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
            Protected Friend Sub New(x, y)
            ~~~~~~~~~~~~~~~~
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
            Protected Sub M()
            ~~~~~~~~~
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
            Protected Friend Function F()
            ~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31068ERR_BadInterfaceDelegateSpecifier1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadInterfaceDelegateSpecifier1">
        <file name="a.vb"><![CDATA[
        Interface i1
            private Delegate Sub goo
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31068: Delegate in an interface cannot be declared 'private'.
            private Delegate Sub goo
            ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31069ERR_BadInterfaceEnumSpecifier1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadInterfaceEnumSpecifier1">
        <file name="a.vb"><![CDATA[
        Interface I1
            Public Enum E
                ONE
            End Enum
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31069: Enum in an interface cannot be declared 'Public'.
            Public Enum E
            ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31070ERR_BadInterfaceClassSpecifier1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadInterfaceClassSpecifier1">
        <file name="a.vb"><![CDATA[
        Interface I1
            Interface I2
                Protected Class C1
                End Class
                Friend Class C2
                End Class
            End Interface
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31070: Class in an interface cannot be declared 'Protected'.
                Protected Class C1
                ~~~~~~~~~
BC31070: Class in an interface cannot be declared 'Friend'.
                Friend Class C2
                ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31071ERR_BadInterfaceStructSpecifier1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadInterfaceStructSpecifier1">
        <file name="a.vb"><![CDATA[
        Interface I1
            Public Structure S1
            End Structure
        End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31071: Structure in an interface cannot be declared 'Public'.
            Public Structure S1
            ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31075ERR_UseOfObsoleteSymbolNoMessage1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UseOfObsoleteSymbolNoMessage1">
        <file name="a.vb"><![CDATA[
            Imports System
            <Obsolete(Nothing, True)> Interface I1
            End Interface
            Class class1
                Implements I1
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31075: 'I1' is obsolete.
                Implements I1
                           ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31083ERR_ModuleMemberCantImplement()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ModuleMemberCantImplement">
        <file name="a.vb"><![CDATA[
            Module class1
                Interface I1
                    Sub goo()
                End Interface
                'COMPILEERROR: BC31083, "Implements"
                Public Sub goo() Implements I1.goo
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31083: Members in a Module cannot implement interface members.
                Public Sub goo() Implements I1.goo
                                 ~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31084ERR_EventDelegatesCantBeFunctions()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventDelegatesCantBeFunctions">
        <file name="a.vb"><![CDATA[
            Imports System
            Class A 
                Event X As Func(Of String)
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31084: Events cannot be declared with a delegate type that has a return type.
                Event X As Func(Of String)
                           ~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31086ERR_CantOverride4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantOverride4">
        <file name="a.vb"><![CDATA[
            Class C1
                Public Sub F1()
                End Sub
            End Class
            Class B
                Inherits C1
                Public Overrides Sub F1()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31086: 'Public Overrides Sub F1()' cannot override 'Public Sub F1()' because it is not declared 'Overridable'.
                Public Overrides Sub F1()
                                     ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        Private Shared ReadOnly s_typeWithMixedProperty As String = <![CDATA[
.class public auto ansi beforefieldinit Base_VirtGet_Set
       extends [mscorlib]System.Object
{
  .method public hidebysig specialname newslot virtual  
          instance int32  get_Prop() cil managed
  {
    // Code size       2 (0x2)
    .maxstack  8
    ldstr      "Base_VirtGet_Set.Get"
    call       void [mscorlib]System.Console::WriteLine(string)
    IL_0000:  ldc.i4.1
    IL_0001:  ret
  }

  .method public hidebysig specialname 
          instance void  set_Prop(int32 'value') cil managed
  {
    // Code size       1 (0x1)
    ldstr      "Base_VirtGet_Set.Set"
    call       void [mscorlib]System.Console::WriteLine(string)
    .maxstack  8
    IL_0000:  ret
  }
  .property instance int32 Prop()
  {
    .get instance int32 Base_VirtGet_Set::get_Prop()
    .set instance void Base_VirtGet_Set::set_Prop(int32)
  }

  .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.Object::.ctor()
    IL_0006:  ret
  }
}

.class public auto ansi beforefieldinit Base_Get_VirtSet
       extends [mscorlib]System.Object
{
  .method public hidebysig specialname 
          instance int32  get_Prop() cil managed
  {
    // Code size       2 (0x2)
    .maxstack  8
    ldstr      "Base_Get_VirtSet.Get"
    call       void [mscorlib]System.Console::WriteLine(string)
    IL_0000:  ldc.i4.1
    IL_0001:  ret
  }

  .method public hidebysig specialname newslot virtual  
          instance void  set_Prop(int32 'value') cil managed
  {
    // Code size       1 (0x1)
    .maxstack  8
    ldstr      "Base_Get_VirtSet.Set"
    call       void [mscorlib]System.Console::WriteLine(string)
    IL_0000:  ret
  }
  .property instance int32 Prop()
  {
    .get instance int32 Base_Get_VirtSet::get_Prop()
    .set instance void Base_Get_VirtSet::set_Prop(int32)
  }

  .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.Object::.ctor()
    IL_0006:  ret
  }
}
]]>.Value.Replace(vbLf, vbCrLf)
 
        <WorkItem(528982, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528982")>
        <Fact()>
        Public Sub BC31086ERR_CantOverride5a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
    <compilation name="CantOverride5a">
        <file name="a.vb"><![CDATA[
Class VBDerived
    Inherits Base_Get_VirtSet

    Public Overrides Property Prop As Integer
        Get
            System.Console.WriteLine("VBDerived.Get")
            Return MyBase.Prop
        End Get
        Set(value As Integer)
            System.Console.WriteLine("VBDerived.Set")
            MyBase.Prop = value
        End Set
    End Property

    Shared Sub Main()
        Dim o As Base_Get_VirtSet
        o = New Base_Get_VirtSet()
        o.Prop = o.Prop
        o = New VBDerived()
        o.Prop = o.Prop
    End Sub
End Class
        ]]></file>
    </compilation>, s_typeWithMixedProperty, options:=TestOptions.DebugExe)
 
            ' There are no Errors, but getter is actually not overridden!!!
 
            Dim validator = Sub(m As ModuleSymbol)
                                Dim p1 = m.GlobalNamespace.GetMember(Of PropertySymbol)("VBDerived.Prop")
 
                                Assert.True(p1.IsOverrides)
 
                                Dim baseP1 As PropertySymbol = p1.OverriddenProperty
                                Assert.True(baseP1.IsOverridable)
                                Assert.False(baseP1.GetMethod.IsOverridable)
                                Assert.True(baseP1.SetMethod.IsOverridable)
 
                                Dim p1Get = p1.GetMethod
                                Dim p1Set = p1.SetMethod
 
                                Assert.True(p1Get.IsOverrides)
                                Assert.Same(baseP1.GetMethod, p1Get.OverriddenMethod)
                                Assert.True(p1Set.IsOverrides)
                                Assert.Same(baseP1.SetMethod, p1Set.OverriddenMethod)
                            End Sub
 
            CompileAndVerify(compilation1, expectedOutput:=
"Base_Get_VirtSet.Get
Base_Get_VirtSet.Set
Base_Get_VirtSet.Get
VBDerived.Set
Base_Get_VirtSet.Set", sourceSymbolValidator:=validator, symbolValidator:=validator)
        End Sub
 
        <WorkItem(528982, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528982")>
        <Fact()>
        Public Sub BC31086ERR_CantOverride5b()
            Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
    <compilation name="CantOverride5b">
        <file name="a.vb"><![CDATA[
Class VBDerived
    Inherits Base_VirtGet_Set

    Public Overrides Property Prop As Integer
        Get
            System.Console.WriteLine("VBDerived.Get")
            Return MyBase.Prop
        End Get
        Set(value As Integer)
            System.Console.WriteLine("VBDerived.Set")
            MyBase.Prop = value
        End Set
    End Property

    Shared Sub Main()
        Dim o As Base_VirtGet_Set
        o = New Base_VirtGet_Set()
        o.Prop = o.Prop
        o = New VBDerived()
        o.Prop = o.Prop
    End Sub
End Class
        ]]></file>
    </compilation>, s_typeWithMixedProperty, options:=TestOptions.DebugExe)
 
            ' There are no Errors, but setter is actually not overridden!!!
 
            Dim validator = Sub(m As ModuleSymbol)
                                Dim p1 = m.GlobalNamespace.GetMember(Of PropertySymbol)("VBDerived.Prop")
 
                                Assert.True(p1.IsOverrides)
 
                                Dim baseP1 As PropertySymbol = p1.OverriddenProperty
                                Assert.True(baseP1.IsOverridable)
                                Assert.True(baseP1.GetMethod.IsOverridable)
                                Assert.False(baseP1.SetMethod.IsOverridable)
 
                                Dim p1Get = p1.GetMethod
                                Dim p1Set = p1.SetMethod
 
                                Assert.True(p1Get.IsOverrides)
                                Assert.Same(baseP1.GetMethod, p1Get.OverriddenMethod)
                                Assert.True(p1Set.IsOverrides)
                                Assert.Same(baseP1.SetMethod, p1Set.OverriddenMethod)
                            End Sub
 
            CompileAndVerify(compilation1, expectedOutput:=
"Base_VirtGet_Set.Get
Base_VirtGet_Set.Set
VBDerived.Get
Base_VirtGet_Set.Get
Base_VirtGet_Set.Set", sourceSymbolValidator:=validator, symbolValidator:=validator)
        End Sub
 
        <Fact()>
        Public Sub BC31087ERR_CantSpecifyArraysOnBoth()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="CantSpecifyArraysOnBoth">
        <file name="a.vb"><![CDATA[
            Module M
                Sub Goo(ByVal x() As String())
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31087: Array modifiers cannot be specified on both a variable and its type.
                Sub Goo(ByVal x() As String())
                                     ~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31087ERR_CantSpecifyArraysOnBoth_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantSpecifyArraysOnBoth">
        <file name="a.vb"><![CDATA[
            Class C
                Public Shared Sub Main()
                    Dim a()() As Integer = nothing
                    For Each x() As Integer() In a
                    Next
                End Sub
            End Class
        ]]></file>
    </compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation1,
<expected><![CDATA[
BC31087: Array modifiers cannot be specified on both a variable and its type.
                    For Each x() As Integer() In a
                                    ~~~~~~~~~
BC30332: Value of type 'Integer()' cannot be converted to 'Integer()()' because 'Integer' is not derived from 'Integer()'.
                    For Each x() As Integer() In a
                                                 ~
]]></expected>)
        End Sub
 
        <WorkItem(540876, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540876")>
        <Fact>
        Public Sub BC31088ERR_NotOverridableRequiresOverrides()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NotOverridableRequiresOverrides">
        <file name="a.vb"><![CDATA[
            Class C1
                NotOverridable Sub Goo()
                End Sub
                Public NotOverridable Property F As Integer
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
                NotOverridable Sub Goo()
                                   ~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
                Public NotOverridable Property F As Integer
                                               ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31089ERR_PrivateTypeOutsideType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="PrivateTypeOutsideType">
        <file name="a.vb"><![CDATA[
            Namespace ns1
                Private Module Mod1
                End Module
            End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31089: Types declared 'Private' must be inside another type.
                Private Module Mod1
                               ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31099ERR_BadPropertyAccessorFlags()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadPropertyAccessorFlags">
        <file name="a.vb"><![CDATA[
            Class C
                Property P
                    Static Get
                        Return Nothing
                    End Get
                    Shared Set
                    End Set
                End Property
                Property Q
                    Partial Get
                        Return Nothing
                    End Get
                    Default Set
                    End Set
                End Property
                Property R
                    MustInherit Get
                        Return Nothing
                    End Get
                    NotInheritable Set
                    End Set
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31099: Property accessors cannot be declared 'Static'.
                    Static Get
                    ~~~~~~
BC31099: Property accessors cannot be declared 'Shared'.
                    Shared Set
                    ~~~~~~
BC31099: Property accessors cannot be declared 'Partial'.
                    Partial Get
                    ~~~~~~~
BC31099: Property accessors cannot be declared 'Default'.
                    Default Set
                    ~~~~~~~
BC31099: Property accessors cannot be declared 'MustInherit'.
                    MustInherit Get
                    ~~~~~~~~~~~
BC31099: Property accessors cannot be declared 'NotInheritable'.
                    NotInheritable Set
                    ~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31100ERR_BadPropertyAccessorFlagsRestrict()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadPropertyAccessorFlagsRestrict">
        <file name="a.vb"><![CDATA[
        Class C
            Public Property P1
                Get
                    Return Nothing
                End Get
                Public Set(ByVal value) ' P1 BC31100
                End Set
            End Property
            Public Property P2
                Get
                    Return Nothing
                End Get
                Friend Set(ByVal value)
                End Set
            End Property
            Public Property P3
                Get
                    Return Nothing
                End Get
                Protected Set(ByVal value)
                End Set
            End Property
            Public Property P4
                Get
                    Return Nothing
                End Get
                Protected Friend Set(ByVal value)
                End Set
            End Property
            Public Property P5
                Get
                    Return Nothing
                End Get
                Private Set(ByVal value)
                End Set
            End Property
            Friend Property Q1
                Public Get ' Q1 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Friend Property Q2
                Friend Get ' Q2 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Friend Property Q3
                Protected Get ' Q3 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Friend Property Q4
                Protected Friend Get ' Q4 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Friend Property Q5
                Private Get
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Protected Property R1
                Get
                    Return Nothing
                End Get
                Public Set(ByVal value) ' R1 BC31100
                End Set
            End Property
            Protected Property R2
                Get
                    Return Nothing
                End Get
                Friend Set(ByVal value) ' R2 BC31100
                End Set
            End Property
            Protected Property R3
                Get
                    Return Nothing
                End Get
                Protected Set(ByVal value) ' R3 BC31100
                End Set
            End Property
            Protected Property R4
                Get
                    Return Nothing
                End Get
                Protected Friend Set(ByVal value) ' R4 BC31100
                End Set
            End Property
            Protected Property R5
                Get
                    Return Nothing
                End Get
                Private Set(ByVal value)
                End Set
            End Property
            Protected Friend Property S1
                Get
                    Return Nothing
                End Get
                Public Set(ByVal value) ' S1 BC31100
                End Set
            End Property
            Protected Friend Property S2
                Get
                    Return Nothing
                End Get
                Friend Set(ByVal value)
                End Set
            End Property
            Protected Friend Property S3
                Get
                    Return Nothing
                End Get
                Protected Set(ByVal value)
                End Set
            End Property
            Protected Friend Property S4
                Get
                    Return Nothing
                End Get
                Protected Friend Set(ByVal value) ' S4 BC31100
                End Set
            End Property
            Protected Friend Property S5
                Get
                    Return Nothing
                End Get
                Private Set(ByVal value)
                End Set
            End Property
            Private Property T1
                Public Get ' T1 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Private Property T2
                Friend Get ' T2 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Private Property T3
                Protected Get ' T3 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Private Property T4
                Protected Friend Get ' T4 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Private Property T5
                Private Get ' T5 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Property U1
                Public Get ' U1 BC31100
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Property U2
                Friend Get
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Property U3
                Protected Get
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Property U4
                Protected Friend Get
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
            Property U5
                Private Get
                    Return Nothing
                End Get
                Set(ByVal value)
                End Set
            End Property
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Public Set(ByVal value) ' P1 BC31100
                ~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Public Get ' Q1 BC31100
                ~~~~~~
BC31100: Access modifier 'Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Friend Get ' Q2 BC31100
                ~~~~~~
BC31100: Access modifier 'Protected' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Protected Get ' Q3 BC31100
                ~~~~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Protected Friend Get ' Q4 BC31100
                ~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Public Set(ByVal value) ' R1 BC31100
                ~~~~~~
BC31100: Access modifier 'Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Friend Set(ByVal value) ' R2 BC31100
                ~~~~~~
BC31100: Access modifier 'Protected' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Protected Set(ByVal value) ' R3 BC31100
                ~~~~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Protected Friend Set(ByVal value) ' R4 BC31100
                ~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Public Set(ByVal value) ' S1 BC31100
                ~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Protected Friend Set(ByVal value) ' S4 BC31100
                ~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Public Get ' T1 BC31100
                ~~~~~~
BC31100: Access modifier 'Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Friend Get ' T2 BC31100
                ~~~~~~
BC31100: Access modifier 'Protected' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Protected Get ' T3 BC31100
                ~~~~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Protected Friend Get ' T4 BC31100
                ~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Private' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Private Get ' T5 BC31100
                ~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
                Public Get ' U1 BC31100
                ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31101ERR_OnlyOneAccessorForGetSet()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyOneAccessorForGetSet">
        <file name="a.vb"><![CDATA[
            Class C
                Property P
                    Private Get
                        Return Nothing
                    End Get
                    Protected Set(value)
                    End Set
                End Property
                Property Q
                    Friend Set
                    End Set
                    Friend Get
                        Return Nothing
                    End Get
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31101: Access modifier can only be applied to either 'Get' or 'Set', but not both.
                    Protected Set(value)
                    ~~~~~~~~~~~~~~~~~~~~
BC31101: Access modifier can only be applied to either 'Get' or 'Set', but not both.
                    Friend Get
                    ~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31104ERR_WriteOnlyNoAccessorFlag()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Class C1
                WriteOnly Property Goo(ByVal x As Integer) As Integer
                    Private Set(ByVal value As Integer)
                    End Set
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31104: 'WriteOnly' properties cannot have an access modifier on 'Set'.
                    Private Set(ByVal value As Integer)
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31105ERR_ReadOnlyNoAccessorFlag()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Class C1
                ReadOnly Property Goo(ByVal x As Integer) As Integer
                    Protected Get
                        Return 1
                    End Get
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31105: 'ReadOnly' properties cannot have an access modifier on 'Get'.
                    Protected Get
                    ~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31106ERR_BadPropertyAccessorFlags1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadPropertyAccessorFlags1">
        <file name="a.vb"><![CDATA[
            Class A
                Overridable Property P
                Overridable Property Q
                    Get
                        Return Nothing
                    End Get
                    Protected Set
                    End Set
                End Property
            End Class
            Class B
                Inherits A
                NotOverridable Overrides Property P
                    Get
                        Return Nothing
                    End Get
                    Private Set
                    End Set
                End Property
                Public Overrides Property Q
                    Get
                        Return Nothing
                    End Get
                    Protected Set
                    End Set
                End Property
            End Class
            MustInherit Class C
                MustOverride Property P
            End Class
            Class D
                Inherits C
                NotOverridable Overrides Property P
                    Private Get
                        Return Nothing
                    End Get
                    Set
                    End Set
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31106: Property accessors cannot be declared 'Private' in a 'NotOverridable' property.
                    Private Set
                    ~~~~~~~
BC30266: 'Private NotOverridable Overrides Property Set P(Value As Object)' cannot override 'Public Overridable Property Set P(AutoPropertyValue As Object)' because they have different access levels.
                    Private Set
                            ~~~
BC31106: Property accessors cannot be declared 'Private' in a 'NotOverridable' property.
                    Private Get
                    ~~~~~~~
BC30266: 'Private NotOverridable Overrides Property Get P() As Object' cannot override 'Public MustOverride Property Get P() As Object' because they have different access levels.
                    Private Get
                            ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31107ERR_BadPropertyAccessorFlags2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadPropertyAccessorFlags2">
        <file name="a.vb"><![CDATA[
            Class C
                Default Property P(o)
                    Private Get
                        Return Nothing
                    End Get
                    Set
                    End Set
                End Property
            End Class
            Structure S
            Default Property P(x, y)
                    Get
                        Return Nothing
                    End Get
                    Private Set
                    End Set
                End Property
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31107: Property accessors cannot be declared 'Private' in a 'Default' property.
                    Private Get
                    ~~~~~~~
BC31107: Property accessors cannot be declared 'Private' in a 'Default' property.
                    Private Set
                    ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31108ERR_BadPropertyAccessorFlags3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadPropertyAccessorFlags3">
        <file name="a.vb"><![CDATA[
            Class C
                Overridable Property P
                    Private Get
                        Return Nothing
                    End Get
                    Set
                    End Set
                End Property
                Overridable Property Q
                    Get
                        Return Nothing
                    End Get
                    Private Set
                    End Set
                End Property
                Overridable Property R
                    Protected Get
                        Return Nothing
                    End Get
                    Set
                    End Set
                End Property
                Overridable Property S
                    Get
                        Return Nothing
                    End Get
                    Friend Set
                    End Set
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31108: Property cannot be declared 'Overridable' because it contains a 'Private' accessor.
                Overridable Property P
                ~~~~~~~~~~~
BC31108: Property cannot be declared 'Overridable' because it contains a 'Private' accessor.
                Overridable Property Q
                ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31127ERR_DuplicateAddHandlerDef()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateAddHandlerDef">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31127: 'AddHandler' is already declared.
                    AddHandler(ByVal value As EventHandler)
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31128ERR_DuplicateRemoveHandlerDef()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateRemoveHandlerDef">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31128: 'RemoveHandler' is already declared.
                    RemoveHandler(ByVal value As EventHandler)
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31129ERR_DuplicateRaiseEventDef()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateRaiseEventDef">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31129: 'RaiseEvent' is already declared.
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31130ERR_MissingAddHandlerDef1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MissingAddHandlerDef1">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31130: 'AddHandler' definition missing for event 'Public Event Click As EventHandler'.
                Public Custom Event Click As EventHandler
                                    ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31131ERR_MissingRemoveHandlerDef1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MissingRemoveHandlerDef1">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31131: 'RemoveHandler' definition missing for event 'Public Event Click As EventHandler'.
                Public Custom Event Click As EventHandler
                                    ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31132ERR_MissingRaiseEventDef1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MissingRaiseEventDef1">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31132: 'RaiseEvent' definition missing for event 'Public Event Click As EventHandler'.
                Public Custom Event Click As EventHandler
                                    ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31133ERR_EventAddRemoveHasOnlyOneParam()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventAddRemoveHasOnlyOneParam">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler()
                    End AddHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31133: 'AddHandler' and 'RemoveHandler' methods must have exactly one parameter.
                    AddHandler()
                    ~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31134ERR_EventAddRemoveByrefParamIllegal()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventAddRemoveByrefParamIllegal">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    RemoveHandler(ByRef value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31134: 'AddHandler' and 'RemoveHandler' method parameters cannot be declared 'ByRef'.
                    RemoveHandler(ByRef value As EventHandler)
                                  ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31136ERR_AddRemoveParamNotEventType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AddRemoveParamNotEventType">
        <file name="a.vb"><![CDATA[
            Option Strict Off
            Imports System
            Public Class M
                Custom Event x As Action
                    AddHandler(ByVal value As Action(Of Integer))
                    End AddHandler
                    RemoveHandler(ByVal value)  
                    End RemoveHandler
                    RaiseEvent()
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31136: 'AddHandler' and 'RemoveHandler' method parameters must have the same delegate type as the containing event.
                    AddHandler(ByVal value As Action(Of Integer))
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31136: 'AddHandler' and 'RemoveHandler' method parameters must have the same delegate type as the containing event.
                    RemoveHandler(ByVal value)  
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31137ERR_RaiseEventShapeMismatch1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="RaiseEventShapeMismatch1">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(ByVal value As EventHandler)
                    End AddHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByRef sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31137: 'RaiseEvent' method must have the same signature as the containing event's delegate type 'EventHandler'.
                    RaiseEvent(ByRef sender As Object, ByVal e As EventArgs)
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31138ERR_EventMethodOptionalParamIllegal1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventMethodOptionalParamIllegal1">
        <file name="a.vb"><![CDATA[
            Imports System
            Public NotInheritable Class ReliabilityOptimizedControl
                Public Custom Event Click As EventHandler
                    AddHandler(Optional ByVal value As EventHandler = Nothing)
                    End AddHandler
                    RemoveHandler(ByVal value As EventHandler)
                    End RemoveHandler
                    RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'.
                    AddHandler(Optional ByVal value As EventHandler = Nothing)
                               ~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31142ERR_ObsoleteInvalidOnEventMember()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ObsoleteInvalidOnEventMember">
        <file name="a.vb"><![CDATA[
            Imports System
            Public Class C1
                Custom Event x As Action
                    AddHandler(ByVal value As Action)
                    End AddHandler
                    RemoveHandler(ByVal value As Action)
                    End RemoveHandler
                    <Obsolete()>
                    RaiseEvent()
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31142: 'System.ObsoleteAttribute' cannot be applied to the 'AddHandler', 'RemoveHandler', or 'RaiseEvent' definitions. If required, apply the attribute directly to the event.
                    <Obsolete()>
                    ~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31400ERR_BadStaticLocalInStruct()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadStaticLocalInStruct">
        <file name="a.vb"><![CDATA[
            Structure S 
                Sub Goo()
                    Static x As Integer = 1
                End Sub
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31400: Local variables within methods of structures cannot be declared 'Static'.
                    Static x As Integer = 1
                    ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31400ERR_BadStaticLocalInStruct2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadStaticLocalInStruct2">
        <file name="a.vb"><![CDATA[
            Structure S 
                Sub Goo()
                    Static Static x As Integer
                End Sub
            End Structure
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31400: Local variables within methods of structures cannot be declared 'Static'.
                    Static Static x As Integer
                    ~~~~~~
BC30178: Specifier is duplicated.
                    Static Static x As Integer
                           ~~~~~~
BC42024: Unused local variable: 'x'.
                    Static Static x As Integer
                                  ~
                                  ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BadLocalspecifiers()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BC31400ERR_BadLocalspecifiers">
        <file name="a.vb"><![CDATA[
            Class S 
                Sub Goo()
                    Static Static a As Integer
                    Static Dim Dim b As Integer
                    Static Const Dim c As Integer
                    Private d As Integer
                    Private Private e As Integer
                    Private Const f As Integer
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30178: Specifier is duplicated.
                    Static Static a As Integer
                           ~~~~~~
BC42024: Unused local variable: 'a'.
                    Static Static a As Integer
                                  ~
BC30178: Specifier is duplicated.
                    Static Dim Dim b As Integer
                               ~~~
BC42024: Unused local variable: 'b'.
                    Static Dim Dim b As Integer
                                   ~
BC30246: 'Dim' is not valid on a local constant declaration.
                    Static Const Dim c As Integer
                                 ~~~
BC30438: Constants must have a value.
                    Static Const Dim c As Integer
                                     ~
BC30247: 'Private' is not valid on a local variable declaration.
                    Private d As Integer
                    ~~~~~~~
BC42024: Unused local variable: 'd'.
                    Private d As Integer
                            ~
BC30247: 'Private' is not valid on a local variable declaration.
                    Private Private e As Integer
                    ~~~~~~~
BC30247: 'Private' is not valid on a local variable declaration.
                    Private Private e As Integer
                            ~~~~~~~
BC42024: Unused local variable: 'e'.
                    Private Private e As Integer
                                    ~
BC30247: 'Private' is not valid on a local variable declaration.
                    Private Const f As Integer
                    ~~~~~~~
BC30438: Constants must have a value.
                    Private Const f As Integer
                                  ~
                                  ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31401ERR_DuplicateLocalStatic1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="DuplicateLocalStatic1">
        <file name="a.vb"><![CDATA[
            Module M
                Sub Main()
                    If True Then
                        Static x = 1
                    End If
                    If True Then
                        Static x = 1
                    End If
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31401: Static local variable 'x' is already declared.
                        Static x = 1
                               ~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31403ERR_ImportAliasConflictsWithType2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ImportAliasConflictsWithType2">
        <file name="a.vb"><![CDATA[
            Imports System = System 
            Module M
                Sub Main()
                    System.Console.WriteLine()
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31403: Imports alias 'System' conflicts with 'System' declared in the root namespace.
Imports System = System 
        ~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31404ERR_CantShadowAMustOverride1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantShadowAMustOverride1">
        <file name="a.vb"><![CDATA[
            MustInherit Class A
                MustOverride Sub Goo(ByVal x As Integer)
            End Class
            MustInherit Class B
                Inherits A
                Shadows Sub Goo()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31404: 'Public Sub Goo()' cannot shadow a method declared 'MustOverride'.
                Shadows Sub Goo()
                            ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31407ERR_MultipleEventImplMismatch3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MultipleEventImplMismatch3">
        <file name="a.vb"><![CDATA[
            Interface I1
                Event evtTest1()
                Event evtTest2()
            End Interface
            Class C1
                Implements I1
                Event evtTest3() Implements I1.evtTest1, I1.evtTest2
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31407: Event 'Public Event evtTest3 As I1.evtTest1EventHandler' cannot implement event 'I1.Event evtTest2()' because its delegate type does not match the delegate type of another event implemented by 'Public Event evtTest3 As I1.evtTest1EventHandler'.
                Event evtTest3() Implements I1.evtTest1, I1.evtTest2
                                                         ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
            CompilationUtils.AssertTheseEmitDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31408ERR_BadSpecifierCombo2_0()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
         Partial NotInheritable Class C1
         End Class
         Partial MustInherit Class C1
         End Class
         Partial MustInherit NotInheritable Class C1
         End Class
         Class C1
         End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30926: 'MustInherit' cannot be specified for partial type 'C1' because it cannot be combined with 'NotInheritable' specified for one of its other partial types.
         Partial MustInherit Class C1
                                   ~~
BC31408: 'MustInherit' and 'NotInheritable' cannot be combined.
         Partial MustInherit NotInheritable Class C1
                             ~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(538931, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538931")>
        <Fact>
        Public Sub BC31408ERR_BadSpecifierCombo2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
         MustInherit NotInheritable Class C1
         End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'MustInherit' and 'NotInheritable' cannot be combined.
MustInherit NotInheritable Class C1
            ~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(538931, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538931")>
        <Fact>
        Public Sub BC31408ERR_BadSpecifierCombo2_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
         Class A1
            Private Overridable Sub scen1()
            End Sub
         End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Private' and 'Overridable' cannot be combined.
            Private Overridable Sub scen1()
                    ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31408ERR_BadSpecifierCombo2_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="c.vb"><![CDATA[
        Class C
            ReadOnly WriteOnly Property P
                Get
                    Return Nothing
                End Get
                Set
                End Set
            End Property
        End Class
        Structure S
            WriteOnly ReadOnly Property Q
                Get
                    Return Nothing
                End Get
                Set
                End Set
            End Property
        End Structure
        Interface I
            ReadOnly WriteOnly Property R
        End Interface
        Class D
            Private Overridable Property S
            Overridable Private Property T
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30635: 'ReadOnly' and 'WriteOnly' cannot be combined.
            ReadOnly WriteOnly Property P
                     ~~~~~~~~~
BC30022: Properties declared 'ReadOnly' cannot have a 'Set'.
                Set
                ~~~
BC30635: 'ReadOnly' and 'WriteOnly' cannot be combined.
            WriteOnly ReadOnly Property Q
                      ~~~~~~~~
BC30023: Properties declared 'WriteOnly' cannot have a 'Get'.
                Get
                ~~~
BC30635: 'ReadOnly' and 'WriteOnly' cannot be combined.
            ReadOnly WriteOnly Property R
                     ~~~~~~~~~
BC31408: 'Private' and 'Overridable' cannot be combined.
            Private Overridable Property S
                    ~~~~~~~~~~~
BC31408: 'Private' and 'Overridable' cannot be combined.
            Overridable Private Property T
                        ~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(541025, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541025")>
        <Fact>
        Public Sub BC31408ERR_BadSpecifierCombo2_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
         MustInherit Class A1
            Private MustOverride Sub scen1()
         End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Private' and 'MustOverride' cannot be combined.
            Private MustOverride Sub scen1()
                    ~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(542159, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542159")>
        <Fact>
        Public Sub BC31408ERR_BadSpecifierCombo2_5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
Option Infer On
Module M1
    Sub Goo()
    End Sub
End Module
MustInherit Class C1
    MustOverride Sub goo()
    Dim s = (New C2)
End Class
Class C2
    Inherits C1
    Overrides Shadows Sub goo()
    End Sub
End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Overrides' and 'Shadows' cannot be combined.
    Overrides Shadows Sub goo()
              ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(837983, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/837983")>
        <Fact>
        Public Sub BC31408ERR_BadSpecifierCombo2_6()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System.Collections.Generic

Module Module1
    Sub main()
    End Sub
End Module

Public Class Cls
    Public ValueOfProperty1 As IEnumerable(Of String)
    'COMPILEERROR: BC31408, "Iterator"
    Public WriteOnly Iterator Property WriteOnlyPro1() As IEnumerable(Of String)
        Set(value As IEnumerable(Of String))
            ValueOfProperty1 = value
        End Set
    End Property
End Class

        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Iterator' and 'WriteOnly' cannot be combined.
    Public WriteOnly Iterator Property WriteOnlyPro1() As IEnumerable(Of String)
                     ~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(837993, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/837993")>
        <Fact>
        Public Sub BC36938ERR_BadIteratorReturn_Property()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
        Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks
' Bug51817: Incorrect Iterator Modifier in Source Code Causes VBC to exit incorrectly when Msbuild Project
Public Class Scenario2
    Implements IEnumerator(Of Integer)
    Public Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
        Return True
    End Function
    Public Sub Reset() Implements System.Collections.IEnumerator.Reset
    End Sub
    Public ReadOnly Iterator Property Current As Integer Implements IEnumerator(Of Integer).Current
        'COMPILEERROR: BC36938 ,"Get"
        Get
        End Get
    End Property
    Public ReadOnly Iterator Property Current1 As Object Implements IEnumerator.Current
        'COMPILEERROR: BC36938 ,"Get"
        Get
        End Get
    End Property
#Region "IDisposable Support"
    Private disposedValue As Boolean ' To detect redundant calls
    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
            End If
        End If
        Me.disposedValue = True
    End Sub
    ' This code added by Visual Basic to correctly implement the disposable pattern.
    Public Sub Dispose() Implements IDisposable.Dispose
        ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region
End Class


        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC36938: Iterator functions must return either IEnumerable(Of T), or IEnumerator(Of T), or the non-generic forms IEnumerable or IEnumerator.
    Public ReadOnly Iterator Property Current As Integer Implements IEnumerator(Of Integer).Current
                                                 ~~~~~~~
BC36938: Iterator functions must return either IEnumerable(Of T), or IEnumerator(Of T), or the non-generic forms IEnumerable or IEnumerator.
    Public ReadOnly Iterator Property Current1 As Object Implements IEnumerator.Current
                                                  ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31409ERR_MustBeOverloads2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustBeOverloads2">
        <file name="a.vb"><![CDATA[
            Class C1
                Overloads Sub goo(ByVal i As Integer)
                End Sub
                Sub goo(ByVal s As String)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31409: sub 'goo' must be declared 'Overloads' because another 'goo' is declared 'Overloads' or 'Overrides'.
                Sub goo(ByVal s As String)
                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31409ERR_MustBeOverloads2_Mixed_Properties_And_Methods()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustBeOverloads2">
        <file name="a.vb"><![CDATA[
            Class OverloadedPropertiesBase
                Overridable Overloads ReadOnly Property Prop(x As Integer) As String
                    Get
                        Return Nothing
                    End Get
                End Property
                Overridable ReadOnly Property Prop(x As String) As String
                    Get
                        Return Nothing
                    End Get
                End Property
                Overridable Overloads Function Prop(x As String) As String
                    Return Nothing
                End Function
                Shadows Function Prop(x As Integer) As Integer
                    Return Nothing
                End Function
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31409: property 'Prop' must be declared 'Overloads' because another 'Prop' is declared 'Overloads' or 'Overrides'.
                Overridable ReadOnly Property Prop(x As String) As String
                                              ~~~~
BC30260: 'Prop' is already declared as 'Public Overridable Overloads ReadOnly Property Prop(x As Integer) As String' in this class.
                Overridable Overloads Function Prop(x As String) As String
                                               ~~~~
BC30260: 'Prop' is already declared as 'Public Overridable Overloads ReadOnly Property Prop(x As Integer) As String' in this class.
                Shadows Function Prop(x As Integer) As Integer
                                 ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31409ERR_MustBeOverloads2_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
                <compilation name="MustBeOverloads2">
                    <file name="a.vb"><![CDATA[
                    Class Base
                        Sub Method(x As Integer)
                        End Sub
                        Overloads Sub Method(x As String)
                        End Sub
                    End Class
                    Partial Class Derived1
                        Inherits Base
                        Shadows Sub Method(x As String)
                        End Sub
                    End Class
                    ]]></file>
                </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31409: sub 'Method' must be declared 'Overloads' because another 'Method' is declared 'Overloads' or 'Overrides'.
                        Sub Method(x As Integer)
                            ~~~~~~
                         ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' spec changed in Roslyn
        <WorkItem(527642, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527642")>
        <Fact>
        Public Sub BC31410ERR_CantOverloadOnMultipleInheritance()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantOverloadOnMultipleInheritance">
        <file name="a.vb"><![CDATA[
            Interface IA
                Overloads Sub Goo(ByVal x As Integer)
            End Interface
            Interface IB
                Overloads Sub Goo(ByVal x As String)
            End Interface
            Interface IC
                Inherits IA, IB
                Overloads Sub Goo()
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31411ERR_MustOverridesInClass1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Public Class C1
                MustOverride Sub goo()
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31411: 'C1' must be declared 'MustInherit' because it contains methods declared 'MustOverride'.
Public Class C1
             ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31411ERR_MustOverridesInClass1_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Class C
                MustOverride Property P
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31411: 'C' must be declared 'MustInherit' because it contains methods declared 'MustOverride'.
Class C
      ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31413ERR_SynthMemberShadowsMustOverride5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SynthMemberShadowsMustOverride5">
        <file name="a.vb"><![CDATA[
            MustInherit Class clsTest1
                MustOverride Sub add_e(ByVal ArgX As clsTest2.eEventHandler)
            End Class
            MustInherit Class clsTest2
                Inherits clsTest1
                Shadows Event e()
            End Class
        ]]></file>
    </compilation>)
            ' CONSIDER: Dev11 prints "Sub add_E", rather than "AddHandler Event e", but roslyn's behavior seems friendlier
            ' and more consistent with the way property accessors are displayed (in both dev11 and roslyn).
            Dim expectedErrors1 = <errors><![CDATA[
BC31413: 'Public AddHandler Event e(obj As clsTest2.eEventHandler)', implicitly declared for event 'e', cannot shadow a 'MustOverride' method in the base class 'clsTest1'.
                Shadows Event e()
                              ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540613, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540613")>
        <Fact>
        Public Sub BC31417ERR_CannotOverrideInAccessibleMember()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CannotOverrideInAccessibleMember">
        <file name="a.vb"><![CDATA[
            Class Cls1
                Private Overridable Sub goo()
                End Sub
            End Class
            Class Cls2
                Inherits Cls1
                Private Overrides Sub goo()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Private' and 'Overridable' cannot be combined.
                Private Overridable Sub goo()
                        ~~~~~~~~~~~
BC31417: 'Private Overrides Sub goo()' cannot override 'Private Sub goo()' because it is not accessible in this context.
                Private Overrides Sub goo()
                                      ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31418ERR_HandlesSyntaxInModule()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="HandlesSyntaxInModule">
        <file name="a.vb"><![CDATA[
Option Strict Off
Module M
    Sub Bar() Handles Me.Goo
    End Sub
    Event Goo()
End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31418: 'Handles' in modules must specify a 'WithEvents' variable qualified with a single identifier.
    Sub Bar() Handles Me.Goo
                      ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31420ERR_ClashWithReservedEnumMember1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ClashWithReservedEnumMember1">
        <file name="a.vb"><![CDATA[
Structure S
    Public Enum InterfaceColors
        value__
    End Enum
End Structure
Class c1
    Public Shared Sub Main(args As String())
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31420: 'value__' conflicts with the reserved member by this name that is implicitly declared in all enums.
        value__
        ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(539947, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539947")>
        <Fact>
        Public Sub BC31420ERR_ClashWithReservedEnumMember2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ClashWithReservedEnumMember1">
        <file name="a.vb"><![CDATA[
Module M
    Public Enum InterfaceColors
        Value__
    End Enum
End Module
Class c1
    Public Shared Sub Main(args As String())
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31420: 'Value__' conflicts with the reserved member by this name that is implicitly declared in all enums.
        Value__
        ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31422ERR_BadUseOfVoid_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Imports System
        Class C1
            Function scen1() As Void
            End Function
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors = <errors><![CDATA[
BC31422: 'System.Void' can only be used in a GetType expression.
            Function scen1() As Void
                                ~~~~
    ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BC31422ERR_BadUseOfVoid_2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class C
            Property P As System.Void
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors = <errors><![CDATA[
BC31422: 'System.Void' can only be used in a GetType expression.
            Property P As System.Void
                          ~~~~~~~~~~~
    ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
            CompilationUtils.AssertTheseEmitDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC31423ERR_EventImplMismatch5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventImplMismatch5">
        <file name="a.vb"><![CDATA[
            Imports System
            Public Interface IA
                Event E()
            End Interface
            Public Class A
                Implements IA
                Public Event E As Action Implements IA.E
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31423: Event 'Public Event E As Action' cannot implement event 'Event E()' on interface 'IA' because their delegate types 'Action' and 'IA.EEventHandler' do not match.
                Public Event E As Action Implements IA.E
                                                    ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(539760, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539760")>
        <Fact>
        Public Sub BC31429ERR_MetadataMembersAmbiguous3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MetadataMembersAmbiguous3">
        <file name="a.vb"><![CDATA[
            Class Base
                Public Shared Sub Main
                    Dim a As Integer = 5
                    Dim b As Base = New Derived(a)
                End Sub
                Private Class Derived
                    Inherits Base
                    Private a As Integer
                    Public Sub New(a As Integer)
                        Me.a = a
                    End Sub

                    Public Sub New()
                    End Sub
                End Class
            End Class
            Class Base
                Public Shared Sub Main
                    Dim a As Integer = 5
                    Dim b As Base = New Derived(a)
                End Sub
                Private Class Derived
                    Inherits Base
                    Private a As Integer
                    Public Sub New(a As Integer)
                        Me.a = a
                    End Sub

                    Public Sub New()
                    End Sub
                End Class
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30521: Overload resolution failed because no accessible 'New' is most specific for these arguments:
    'Public Sub New(a As Integer)': Not most specific.
    'Public Sub New(a As Integer)': Not most specific.
                    Dim b As Base = New Derived(a)
                                        ~~~~~~~
BC31429: 'a' is ambiguous because multiple kinds of members with this name exist in class 'Base.Derived'.
                        Me.a = a
                        ~~~~
BC30179: class 'Base' and class 'Base' conflict in namespace '<Default>'.
            Class Base
                  ~~~~
BC30521: Overload resolution failed because no accessible 'New' is most specific for these arguments:
    'Public Sub New(a As Integer)': Not most specific.
    'Public Sub New(a As Integer)': Not most specific.
                    Dim b As Base = New Derived(a)
                                        ~~~~~~~
BC30179: class 'Derived' and class 'Derived' conflict in class 'Base'.
                Private Class Derived
                              ~~~~~~~
BC31429: 'a' is ambiguous because multiple kinds of members with this name exist in class 'Base.Derived'.
                        Me.a = a
                        ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31431ERR_OnlyPrivatePartialMethods1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyPrivatePartialMethods1">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Public Sub goo()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Public'.
                Partial Public Sub goo()
                        ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31431ERR_OnlyPrivatePartialMethods1a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyPrivatePartialMethods1a">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Protected Overridable Sub goo()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Protected'.
                Partial Protected Overridable Sub goo()
                        ~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Overridable'.
                Partial Protected Overridable Sub goo()
                                  ~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31431ERR_OnlyPrivatePartialMethods1b()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyPrivatePartialMethods1b">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Protected Friend Sub M1()
                End Sub
                Partial Friend Protected Overridable Sub M2()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Protected Friend'.
                Partial Protected Friend Sub M1()
                        ~~~~~~~~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Friend Protected'.
                Partial Friend Protected Overridable Sub M2()
                        ~~~~~~~~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Overridable'.
                Partial Friend Protected Overridable Sub M2()
                                         ~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31431ERR_OnlyPrivatePartialMethods1c()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyPrivatePartialMethods1c">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Protected Overridable Friend Sub M()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Protected'.
                Partial Protected Overridable Friend Sub M()
                        ~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Overridable'.
                Partial Protected Overridable Friend Sub M()
                                  ~~~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Friend'.
                Partial Protected Overridable Friend Sub M()
                                              ~~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31432ERR_PartialMethodsMustBePrivate()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PartialMethodsMustBePrivate">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Sub Goo()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31432: Partial methods must be declared 'Private'.
                Partial Sub Goo()
                ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyOnePartialMethodAllowed2">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Private Sub Goo()
                End Sub
                Partial Private Sub Goo()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31433: Method 'Goo' cannot be declared 'Partial' because only one method 'Goo' can be marked 'Partial'.
                Partial Private Sub Goo()
                                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyOnePartialMethodAllowed2a">
        <file name="b.vb"><![CDATA[
            Class C1
                Partial Private Sub Goo()
                End Sub
                Partial Private Sub GoO()
                End Sub
            End Class
        ]]></file>
        <file name="a.vb"><![CDATA[
            Partial Class C1
                Partial Private Sub goo()
                End Sub
                Partial Private Sub GOO()
                End Sub
            End Class
        ]]></file>
    </compilation>)
 
            ' note the exact methods errors are reported on
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31433: Method 'goo' cannot be declared 'Partial' because only one method 'goo' can be marked 'Partial'.
                Partial Private Sub goo()
                                    ~~~
BC31433: Method 'GOO' cannot be declared 'Partial' because only one method 'GOO' can be marked 'Partial'.
                Partial Private Sub GOO()
                                    ~~~
BC31433: Method 'GoO' cannot be declared 'Partial' because only one method 'GoO' can be marked 'Partial'.
                Partial Private Sub GoO()
                                    ~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2b()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyOnePartialMethodAllowed2b">
        <file name="a.vb"><![CDATA[
            Class CLS
                Partial Private Shared Sub PS(a As Integer)
                End Sub
                Partial Private Shared Sub Ps(a As Integer)
                End Sub
                Private Shared Sub pS(a As Integer)
                End Sub
                Private Shared Sub ps(a As Integer)
                End Sub
                Public Sub PS(a As Integer)
                End Sub
            End Class
        ]]></file>
    </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC30269: 'Private Shared Sub PS(a As Integer)' has multiple definitions with identical signatures.
                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)
                                           ~~
BC31434: Method 'ps' cannot implement partial method 'ps' because 'ps' already implements it. Only one method can implement a partial method.
                Private Shared Sub ps(a As Integer)
                                   ~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2c()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyOnePartialMethodAllowed2c">
        <file name="a.vb"><![CDATA[
            Class CLS
                Partial Private Shared Sub PS(a As Integer)
                End Sub
                Partial Private Overloads Shared Sub Ps(a As Integer)
                End Sub
                Private Overloads Shared Sub ps(a As Integer)
                End Sub
                Private Shared Sub pS(a As Integer)
                End Sub
            End Class
        ]]></file>
    </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31409: sub 'PS' must be declared 'Overloads' because another 'PS' is declared 'Overloads' or 'Overrides'.
                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 Overloads Shared Sub Ps(a As Integer)
                                                     ~~
BC31409: sub 'pS' must be declared 'Overloads' because another 'pS' is declared 'Overloads' or 'Overrides'.
                Private Shared Sub pS(a As Integer)
                                   ~~
BC31434: Method 'pS' cannot implement partial method 'pS' because 'pS' already implements it. Only one method can implement a partial method.
                Private Shared Sub pS(a As Integer)
                                   ~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31434ERR_OnlyOneImplementingMethodAllowed3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyOneImplementingMethodAllowed3">
        <file name="a.vb"><![CDATA[
            Public Class C1
                Partial Private Sub GoO2()
                End Sub
            End Class
            Partial Public Class C1
                Private Sub GOo2()
                End Sub
            End Class
            Partial Public Class C1
                Private Sub Goo2()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31434: Method 'Goo2' cannot implement partial method 'Goo2' because 'Goo2' already implements it. Only one method can implement a partial method.
                Private Sub Goo2()
                            ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31434ERR_OnlyOneImplementingMethodAllowed3a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OnlyOneImplementingMethodAllowed3a">
        <file name="b.vb"><![CDATA[
            Public Class C1
                Partial Private Sub GoO2()
                End Sub
            End Class
            Partial Public Class C1
                Private Sub GOo2()
                End Sub
            End Class
            Partial Public Class C1
                Private Sub Goo2()
                End Sub
            End Class
        ]]></file>
        <file name="a.vb"><![CDATA[
            Partial Public Class C1
                Private Sub GOO2()
                End Sub
            End Class
            Partial Public Class C1
                Private Sub GoO2()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31434: Method 'GOO2' cannot implement partial method 'GOO2' because 'GOO2' already implements it. Only one method can implement a partial method.
                Private Sub GOO2()
                            ~~~~
BC31434: Method 'GoO2' cannot implement partial method 'GoO2' because 'GoO2' already implements it. Only one method can implement a partial method.
                Private Sub GoO2()
                            ~~~~
BC31434: Method 'Goo2' cannot implement partial method 'Goo2' because 'Goo2' already implements it. Only one method can implement a partial method.
                Private Sub Goo2()
                            ~~~~
                                  ]]></errors>
 
            ' note the exact methods errors are reported on
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31437ERR_PartialMethodsMustBeSub1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PartialMethodsMustBeSub1">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Function Goo() As Boolean
                    Return True
                End Function
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 =
<errors><![CDATA[
BC31437: 'Goo' cannot be declared 'Partial' because partial methods must be Subs.
                Partial Function Goo() As Boolean
                                 ~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31437ERR_PartialMethodsMustBeSub2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PartialMethodsMustBeSub2">
        <file name="a.vb"><![CDATA[
            Class C1
                Partial Private Sub Goo()
                End Sub
                Partial Function Goo() As Boolean
                    Return True
                End Function
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 =
<errors><![CDATA[
BC30301: 'Private Sub Goo()' and 'Public Function Goo() As Boolean' cannot overload each other because they differ only by return types.
                Partial Private Sub Goo()
                                    ~~~
BC31437: 'Goo' cannot be declared 'Partial' because partial methods must be Subs.
                Partial Function Goo() As Boolean
                                 ~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31438ERR_PartialMethodGenericConstraints2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface IA(Of T)
End Interface
Interface IB
End Interface
Class C(Of X)
    ' Different constraints.
    Partial Private Sub A1(Of T As Structure)()
    End Sub
    Private Sub A1(Of T As Class)()
    End Sub
    Partial Private Sub A2(Of T As Structure, U As IA(Of T))()
    End Sub
    Private Sub A2(Of T As Structure, U As IB)()
    End Sub
    Partial Private Sub A3(Of T As IA(Of T))()
    End Sub
    Private Sub A3(Of T As IA(Of IA(Of T)))()
    End Sub
    Partial Private Sub A4(Of T As {Structure, IA(Of T)}, U)()
    End Sub
    Private Sub A4(Of T As {Structure, IA(Of U)}, U)()
    End Sub
    ' Additional constraints.
    Partial Private Sub B1(Of T)()
    End Sub
    Private Sub B1(Of T As New)()
    End Sub
    Partial Private Sub B2(Of T As {X, New})()
    End Sub
    Private Sub B2(Of T As {X, Class, New})()
    End Sub
    Partial Private Sub B3(Of T As IA(Of T), U)()
    End Sub
    Private Sub B3(Of T As {IB, IA(Of T)}, U)()
    End Sub
    ' Missing constraints.
    Partial Private Sub C1(Of T As Class)()
    End Sub
    Private Sub C1(Of T)()
    End Sub
    Partial Private Sub C2(Of T As {Class, New})()
    End Sub
    Private Sub C2(Of T As {Class})()
    End Sub
    Partial Private Sub C3(Of T, U As {IB, IA(Of T)})()
    End Sub
    Private Sub C3(Of T, U As IA(Of T))()
    End Sub
    ' Same constraints, different order.
    Private Sub D1(Of T As {IA(Of T), IB})()
    End Sub
    Partial Private Sub D1(Of T As {IB, IA(Of T)})()
    End Sub
    Private Sub D2(Of T, U, V As {T, U, X})()
    End Sub
    Partial Private Sub D2(Of T, U, V As {U, X, T})()
    End Sub
    ' Different constraint clauses.
    Private Sub E1(Of T, U As T)()
    End Sub
    Partial Private Sub E1(Of T As Class, U)()
    End Sub
    ' Additional constraint clause.
    Private Sub F1(Of T As Class, U)()
    End Sub
    Partial Private Sub F1(Of T As Class, U As T)()
    End Sub
    ' Missing constraint clause.
    Private Sub G1(Of T As Class, U As T)()
    End Sub
    Partial Private Sub G1(Of T As Class, U)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31438: Method 'A1' does not have the same generic constraints as the partial method 'A1'.
    Private Sub A1(Of T As Class)()
                ~~
BC31438: Method 'A2' does not have the same generic constraints as the partial method 'A2'.
    Private Sub A2(Of T As Structure, U As IB)()
                ~~
BC31438: Method 'A3' does not have the same generic constraints as the partial method 'A3'.
    Private Sub A3(Of T As IA(Of IA(Of T)))()
                ~~
BC31438: Method 'A4' does not have the same generic constraints as the partial method 'A4'.
    Private Sub A4(Of T As {Structure, IA(Of U)}, U)()
                ~~
BC31438: Method 'B1' does not have the same generic constraints as the partial method 'B1'.
    Private Sub B1(Of T As New)()
                ~~
BC31438: Method 'B2' does not have the same generic constraints as the partial method 'B2'.
    Private Sub B2(Of T As {X, Class, New})()
                ~~
BC31438: Method 'B3' does not have the same generic constraints as the partial method 'B3'.
    Private Sub B3(Of T As {IB, IA(Of T)}, U)()
                ~~
BC31438: Method 'C1' does not have the same generic constraints as the partial method 'C1'.
    Private Sub C1(Of T)()
                ~~
BC31438: Method 'C2' does not have the same generic constraints as the partial method 'C2'.
    Private Sub C2(Of T As {Class})()
                ~~
BC31438: Method 'C3' does not have the same generic constraints as the partial method 'C3'.
    Private Sub C3(Of T, U As IA(Of T))()
                ~~
BC31438: Method 'E1' does not have the same generic constraints as the partial method 'E1'.
    Private Sub E1(Of T, U As T)()
                ~~
BC31438: Method 'F1' does not have the same generic constraints as the partial method 'F1'.
    Private Sub F1(Of T As Class, U)()
                ~~
BC31438: Method 'G1' does not have the same generic constraints as the partial method 'G1'.
    Private Sub G1(Of T As Class, U As T)()
                ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31438ERR_PartialMethodGenericConstraints2a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Imports System.Collections
Class Base(Of T As Class)
    Class Derived
        Inherits Base(Of Base(Of String))

        Partial Private Sub Goo(Of S As {Base(Of String), IComparable})(i As Integer)
        End Sub

        Private Sub GOO(Of S As {IComparable, Base(Of IDisposable)})(i As Integer)
        End Sub

        Private Sub GoO(Of s As {IComparable, Base(Of IEnumerable)})(i As Integer)
        End Sub

        Private Sub gOo(Of s As {IComparable, Base(Of IComparable)})(i As Integer)
        End Sub
    End Class
End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31438: Method 'GOO' does not have the same generic constraints as the partial method 'Goo'.
        Private Sub GOO(Of S As {IComparable, Base(Of IDisposable)})(i As Integer)
                    ~~~
BC31434: Method 'GoO' cannot implement partial method 'GoO' because 'GoO' already implements it. Only one method can implement a partial method.
        Private Sub GoO(Of s As {IComparable, Base(Of IEnumerable)})(i As Integer)
                    ~~~
BC31434: Method 'gOo' cannot implement partial method 'gOo' because 'gOo' already implements it. Only one method can implement a partial method.
        Private Sub gOo(Of s As {IComparable, Base(Of IComparable)})(i As Integer)
                    ~~~
]]></errors>)
            ' NOTE: Dev10 reports three BC31438 in this case
        End Sub
 
        <Fact()>
        Public Sub BC31438ERR_PartialMethodGenericConstraints2b()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Imports System.Collections
Public Class Base(Of T As Class)
    Public Class Derived
        Inherits Base(Of Base(Of String))

        Partial Private Sub Goo(Of S As {Base(Of String), IComparable})(i As Integer)
        End Sub
        Private Sub gOo(Of s As {IComparable, C.I})(i As Integer)
        End Sub

        Partial Private Sub Bar(Of S As {C.I})(i As Integer)
        End Sub
        Private Sub bar(Of s As {C.I})(i As Integer)
        End Sub

        Public Class C
            Interface I
            End Interface
        End Class
    End Class
End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31438: Method 'gOo' does not have the same generic constraints as the partial method 'Goo'.
        Private Sub gOo(Of s As {IComparable, C.I})(i As Integer)
                    ~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31439ERR_PartialDeclarationImplements1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PartialDeclarationImplements1">
        <file name="a.vb"><![CDATA[
           Imports System
            Class A
                Implements IDisposable
                Partial Private Sub Dispose() Implements IDisposable.Dispose
                End Sub
                Private Sub Dispose()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'A' must implement 'Sub Dispose()' for interface 'IDisposable'.
                Implements IDisposable
                           ~~~~~~~~~~~
BC31439: Partial method 'Dispose' cannot use the 'Implements' keyword.
                Partial Private Sub Dispose() Implements IDisposable.Dispose
                                    ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31439ERR_PartialDeclarationImplements1a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PartialDeclarationImplements1a">
        <file name="a.vb"><![CDATA[
           Imports System
            Class A
                Implements IDisposable
                Partial Private Sub Dispose() Implements IDisposable.Dispose
                End Sub
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC30149: Class 'A' must implement 'Sub Dispose()' for interface 'IDisposable'.
                Implements IDisposable
                           ~~~~~~~~~~~
BC31439: Partial method 'Dispose' cannot use the 'Implements' keyword.
                Partial Private Sub Dispose() Implements IDisposable.Dispose
                                    ~~~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31441ERR_ImplementationMustBePrivate2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ImplementationMustBePrivate2">
        <file name="a.vb"><![CDATA[
            Partial Class C1
                Partial Private Sub GOO()
                End Sub
            End Class
            Partial Class C1
                Sub GOO()
                    'HELLO
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31441: Method 'GOO' must be declared 'Private' in order to implement partial method 'GOO'.
                Sub GOO()
                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31441ERR_ImplementationMustBePrivate2a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ImplementationMustBePrivate2a">
        <file name="a.vb"><![CDATA[
            Partial Class C1
                Partial Private Sub GOO()
                End Sub
            End Class
            Partial Class C1
                Sub Goo()
                End Sub
                Private Sub gOO()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31441: Method 'Goo' must be declared 'Private' in order to implement partial method 'GOO'.
                Sub Goo()
                    ~~~
BC31434: Method 'gOO' cannot implement partial method 'gOO' because 'gOO' already implements it. Only one method can implement a partial method.
                Private Sub gOO()
                            ~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31442ERR_PartialMethodParamNamesMustMatch3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="PartialMethodParamNamesMustMatch3">
        <file name="a.vb"><![CDATA[
            Module M 
                Partial Private Sub Goo(ByVal x As Integer)
                End Sub
                Private Sub Goo(ByVal y As Integer)
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31442: Parameter name 'y' does not match the name of the corresponding parameter, 'x', defined on the partial method declaration 'Goo'.
                Private Sub Goo(ByVal y As Integer)
                                      ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC31442ERR_PartialMethodParamNamesMustMatch3a()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="PartialMethodParamNamesMustMatch3a">
        <file name="a.vb"><![CDATA[
            Module M 
                Partial Private Sub Goo(ByVal x As Integer, a As Integer)
                End Sub
                Private Sub Goo(ByVal x As Integer, b As Integer)
                End Sub
                Private Sub Goo(ByVal y As Integer, b As Integer)
                End Sub
                Private Sub Goo(ByVal y As Integer, b As Integer)
                End Sub
            End Module
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31442: Parameter name 'b' does not match the name of the corresponding parameter, 'a', defined on the partial method declaration 'Goo'.
                Private Sub Goo(ByVal x As Integer, b As Integer)
                                                    ~
BC31434: Method 'Goo' cannot implement partial method 'Goo' because 'Goo' already implements it. Only one method can implement a partial method.
                Private Sub Goo(ByVal y As Integer, b As Integer)
                            ~~~
BC31434: Method 'Goo' cannot implement partial method 'Goo' because 'Goo' already implements it. Only one method can implement a partial method.
                Private Sub Goo(ByVal y As Integer, b As Integer)
                            ~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31443ERR_PartialMethodTypeParamNameMismatch3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="PartialMethodTypeParamNameMismatch3">
        <file name="a.vb"><![CDATA[
            Module M
                Partial Private Sub Goo(Of S)()
                End Sub
                Private Sub Goo(Of T)()
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31443: Name of type parameter 'T' does not match 'S', the corresponding type parameter defined on the partial method declaration 'Goo'.
                Private Sub Goo(Of T)()
                                   ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC31503ERR_AttributeMustBeClassNotStruct1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AttributeMustBeClassNotStruct1">
        <file name="a.vb"><![CDATA[
            Structure s1
            End Structure
            <s1()>
            Class C1
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31503: 's1' cannot be used as an attribute because it is not a class.
            <s1()>
             ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540625, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540625")>
        <Fact>
        Public Sub BC31504ERR_AttributeMustInheritSysAttr()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AttributeMustInheritSysAttr">
        <file name="at31504.vb"><![CDATA[
Imports System

<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
    'Inherits Attribute
End Class

<MyAttribute()>
Class Test

End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttributeMustInheritSysAttr, "MyAttribute").WithArguments("MyAttribute"))
        End Sub
 
        <WorkItem(540628, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540628")>
        <Fact>
        Public Sub BC31506ERR_AttributeCannotBeAbstract()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AttributeCannotBeAbstract">
        <file name="at31506.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public MustInherit Class MyAttribute
    Inherits Attribute
    Public Sub New()

    End Sub
End Class

<My()>
Class Goo
End Class
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttributeCannotBeAbstract, "My").WithArguments("MyAttribute"))
        End Sub
 
        <WorkItem(540628, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540628")>
        <Fact>
        Public Sub BC31507ERR_AttributeCannotHaveMustOverride()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AttributeCannotHaveMustOverride">
        <file name="at31500.vb"><![CDATA[
Imports System

<AttributeUsage(AttributeTargets.All)>
Public MustInherit Class MyAttribute
    Inherits Attribute
    Public Sub New()
    End Sub
    'MustOverride Property AbsProp As Byte
    Public MustOverride Sub AbsSub()
End Class

<My()>
Class Goo
End Class
    ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttributeCannotBeAbstract, "My").WithArguments("MyAttribute"))
 
        End Sub
 
        <Fact>
        Public Sub BC31512ERR_STAThreadAndMTAThread0()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="STAThreadAndMTAThread0">
    <file name="a.vb"><![CDATA[
Imports System
Class C1
    <MTAThread>
    <STAThread>
    Sub goo()
    End Sub
End Class
]]></file>
</compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC31512: 'System.STAThreadAttribute' and 'System.MTAThreadAttribute' cannot both be applied to the same method.
    Sub goo()
        ~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' BC31523ERR_DllImportNotLegalOnDeclare 
        ' BC31524ERR_DllImportNotLegalOnGetOrSet
        ' BC31526ERR_DllImportOnGenericSubOrFunction
        ' see AttributeTests
 
        <Fact()>
        Public Sub BC31527ERR_ComClassOnGeneric()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ComClassOnGeneric">
        <file name="a.vb"><![CDATA[
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic

            <ComClass()>
            Class C1(Of T)
                Sub GOO(ByVal s As T)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31527: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to a class that is generic or contained inside a generic type.
            Class C1(Of T)
                  ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' BC31529ERR_DllImportOnInstanceMethod
        ' BC31530ERR_DllImportOnInterfaceMethod
        ' BC31531ERR_DllImportNotLegalOnEventMethod
        ' see AttributeTests
 
        <Fact, WorkItem(1116455, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1116455")>
        Public Sub BC31534ERR_FriendAssemblyBadArguments()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
    <compilation name="FriendAssemblyBadArguments">
        <file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("Test, Version=*")>                    ' ok
<Assembly: InternalsVisibleTo("Test, PublicKeyToken=*")>             ' ok
<Assembly: InternalsVisibleTo("Test, Culture=*")>                    ' ok
<Assembly: InternalsVisibleTo("Test, Retargetable=*")>               ' ok
<Assembly: InternalsVisibleTo("Test, ContentType=*")>                ' ok
<Assembly: InternalsVisibleTo("Test, Version=.")>                    ' ok
<Assembly: InternalsVisibleTo("Test, Version=..")>                   ' ok
<Assembly: InternalsVisibleTo("Test, Version=...")>                  ' ok
                                                                     
<Assembly: InternalsVisibleTo("Test, Version=1")>                    ' error
<Assembly: InternalsVisibleTo("Test, Version=1.*")>                  ' error
<Assembly: InternalsVisibleTo("Test, Version=1.1.*")>                ' error
<Assembly: InternalsVisibleTo("Test, Version=1.1.1.*")>              ' error
<Assembly: InternalsVisibleTo("Test, ProcessorArchitecture=MSIL")>   ' error
<Assembly: InternalsVisibleTo("Test, CuLTure=EN")>                   ' error
<Assembly: InternalsVisibleTo("Test, PublicKeyToken=null")>          ' ok
        ]]></file>
    </compilation>, {SystemCoreRef})
 
            ' Tested against Dev12
            compilation.VerifyDiagnostics(
                Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1"")").WithArguments("Test, Version=1").WithLocation(11, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1.*"")").WithArguments("Test, Version=1.*").WithLocation(12, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1.1.*"")").WithArguments("Test, Version=1.1.*").WithLocation(13, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1.1.1.*"")").WithArguments("Test, Version=1.1.1.*").WithLocation(14, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, ProcessorArchitecture=MSIL"")").WithArguments("Test, ProcessorArchitecture=MSIL").WithLocation(15, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, CuLTure=EN"")").WithArguments("Test, CuLTure=EN").WithLocation(16, 2))
 
        End Sub
 
        <Fact>
        Public Sub BC31537ERR_FriendAssemblyNameInvalid()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="FriendAssemblyNameInvalid">
    <file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("'   '")>        ' ok
<Assembly: InternalsVisibleTo("\t\r\n;a")>     ' ok (whitespace escape)
<Assembly: InternalsVisibleTo("\u1234;a")>     ' ok (assembly name Unicode escape)
<Assembly: InternalsVisibleTo("' a '")>        ' ok
<Assembly: InternalsVisibleTo("\u1000000;a")>  ' invalid escape
<Assembly: InternalsVisibleTo("a'b'c")>        ' quotes in the middle
<Assembly: InternalsVisibleTo("Test, PublicKey=Null")>                      
<Assembly: InternalsVisibleTo("Test, Bar")>                                 
<Assembly: InternalsVisibleTo("Test, Version")>                           
]]></file>
</compilation>, {SystemCoreRef})
 
            ' Tested against Dev12
            compilation.VerifyDiagnostics(
                Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""\u1000000;a"")").WithArguments("\u1000000;a").WithLocation(6, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""a'b'c"")").WithArguments("a'b'c").WithLocation(7, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""Test, PublicKey=Null"")").WithArguments("Test, PublicKey=Null").WithLocation(8, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""Test, Bar"")").WithArguments("Test, Bar").WithLocation(9, 2),
                Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""Test, Version"")").WithArguments("Test, Version").WithLocation(10, 2))
        End Sub
 
        <Fact()>
        Public Sub BC31549ERR_PIAHasNoAssemblyGuid1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="A">
        <file name="a.vb"><![CDATA[
            Imports System.Runtime.InteropServices
<Assembly: ImportedFromTypeLib("_.dll")> 
]]></file>
    </compilation>)
            compilation1.AssertNoErrors()
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
                <compilation>
                    <file name="a.vb"/>
                </compilation>,
                references:={New VisualBasicCompilationReference(compilation1, embedInteropTypes:=True)})
            compilation2.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC31549: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing the 'System.Runtime.InteropServices.GuidAttribute' attribute.
                 ]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31553ERR_PIAHasNoTypeLibAttribute1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="A">
        <file name="a.vb"><![CDATA[
<Assembly: System.Runtime.InteropServices.Guid("f9c2d51d-4f44-45f0-9eda-c9d599b58257")> 
]]></file>
    </compilation>)
            compilation1.AssertNoErrors()
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
                <compilation>
                    <file name="a.vb"/>
                </compilation>,
                references:={New VisualBasicCompilationReference(compilation1, embedInteropTypes:=True)})
            compilation2.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC31553: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing either the 'System.Runtime.InteropServices.ImportedFromTypeLibAttribute' attribute or the 'System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute' attribute.
                 ]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC31553ERR_PIAHasNoTypeLibAttribute1_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="A">
        <file name="a.vb"/>
    </compilation>)
            compilation1.AssertNoErrors()
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
                <compilation>
                    <file name="a.vb"/>
                </compilation>,
                references:={New VisualBasicCompilationReference(compilation1, embedInteropTypes:=True)})
            compilation2.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC31549: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing the 'System.Runtime.InteropServices.GuidAttribute' attribute.
BC31553: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing either the 'System.Runtime.InteropServices.ImportedFromTypeLibAttribute' attribute or the 'System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute' attribute.
                 ]]></errors>)
        End Sub
 
        <Fact>
        Public Sub BC32040ERR_BadFlagsOnNewOverloads()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BadFlagsOnNewOverloads">
        <file name="a.vb"><![CDATA[
           class C1
            End class
            Friend Class C2
                Inherits C1
                Public Overloads Sub New(ByVal x As Integer)
                    MyBase.New(CType (x, Short))
                End Sub
                Public Sub New(ByVal x As Date)
                    MyBase.New(1)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32040: The 'Overloads' keyword is used to overload inherited members; do not use the 'Overloads' keyword when overloading 'Sub New'.
                Public Overloads Sub New(ByVal x As Integer)
                       ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32041ERR_TypeCharOnGenericParam()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="TypeCharOnGenericParam">
        <file name="a.vb"><![CDATA[
Structure S(Of T@)
    Sub M(Of U@)()
    End Sub
End Structure
Interface I(Of T#)
    Sub M(Of U#)()
End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32041: Type character cannot be used in a type parameter declaration.
Structure S(Of T@)
               ~~
BC32041: Type character cannot be used in a type parameter declaration.
    Sub M(Of U@)()
             ~~
BC32041: Type character cannot be used in a type parameter declaration.
Interface I(Of T#)
               ~~
BC32041: Type character cannot be used in a type parameter declaration.
    Sub M(Of U#)()
             ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32042ERR_TooFewGenericArguments1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="TooFewGenericArguments1">
        <file name="a.vb"><![CDATA[
           Structure S1(Of t)
            End Structure
            Class c1
                Dim x3 As S1
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32042: Too few type arguments to 'S1(Of t)'.
                Dim x3 As S1
                          ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32043ERR_TooManyGenericArguments1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="TooManyGenericArguments1">
        <file name="a.vb"><![CDATA[
           Structure S1(Of arg1)
            End Structure
            Class c1
                Dim scen2 As New S1(Of String, Integer, Double, Decimal)
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32043: Too many type arguments to 'S1(Of arg1)'.
                Dim scen2 As New S1(Of String, Integer, Double, Decimal)
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32044ERR_GenericConstraintNotSatisfied2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C(Of T1, T2)
    Sub M(Of U As {T1, T2})()
        M(Of T1)()
        M(Of T2)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32044: Type argument 'T1' does not inherit from or implement the constraint type 'T2'.
        M(Of T1)()
        ~~~~~~~~
BC32044: Type argument 'T2' does not inherit from or implement the constraint type 'T1'.
        M(Of T2)()
        ~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32044ERR_GenericConstraintNotSatisfied2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
            Option Strict On
            Public Module M
                Sub Main()
                    Goo(Function(x As String) x, Function(x As Object) x)
                End Sub
                Sub Goo(Of T, S As T)(ByVal x As T, ByVal y As S)
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32044: Type argument 'Function <generated method>(x As Object) As Object' does not inherit from or implement the constraint type 'Function <generated method>(x As String) As String'.
                    Goo(Function(x As String) x, Function(x As Object) x)
                    ~~~
]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32047ERR_MultipleClassConstraints1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MultipleClassConstraints1">
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
    Inherits A
End Class
Class C
    Inherits B
End Class
Interface IA(Of T, U As {A, T, B})
End Interface
Interface IB
    Sub M(Of T As {A, B, C, New})()
End Interface
MustInherit Class D(Of T, U)
    MustOverride Sub M(Of V As {T, U, C, New})()
End Class
MustInherit Class E
    Inherits D(Of A, B)
    Public Overrides Sub M(Of V As {A, B, C, New})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32047: Type parameter 'U' can only have one constraint that is a class.
Interface IA(Of T, U As {A, T, B})
                               ~
BC32047: Type parameter 'T' can only have one constraint that is a class.
    Sub M(Of T As {A, B, C, New})()
                      ~
BC32047: Type parameter 'T' can only have one constraint that is a class.
    Sub M(Of T As {A, B, C, New})()
                         ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32048ERR_ConstNotClassInterfaceOrTypeParam1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ConstNotClassInterfaceOrTypeParam1">
        <file name="a.vb"><![CDATA[
Class A
End Class
Delegate Sub D()
Structure S
End Structure
Enum E
    A
End Enum
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
End Class
MustInherit Class C2(Of T1, T2, T3, T4, T5)
    MustOverride Sub M(Of U1 As T1, U2 As T2, U3 As T3, U4 As T4, U5 As T5)()
End Class
MustInherit Class C3
    Inherits C2(Of A(), D, S, E, Unknown)
    MustOverride Overrides Sub M(Of U1 As A(), U2 As D, U3 As S, U4 As E, U5 As Unknown)()
End Class
Class C3(Of T As {S(), E()})
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32048: Type constraint 'A()' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
                  ~~~
BC32048: Type constraint 'D' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
                             ~
BC32048: Type constraint 'S' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
                                      ~
BC32048: Type constraint 'E' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
                                               ~
BC30002: Type 'Unknown' is not defined.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
                                                        ~~~~~~~
BC30002: Type 'Unknown' is not defined.
    Inherits C2(Of A(), D, S, E, Unknown)
                                 ~~~~~~~
BC30002: Type 'Unknown' is not defined.
    MustOverride Overrides Sub M(Of U1 As A(), U2 As D, U3 As S, U4 As E, U5 As Unknown)()
                                                                                ~~~~~~~
BC32048: Type constraint 'S()' must be either a class, interface or type parameter.
Class C3(Of T As {S(), E()})
                  ~~~
BC32048: Type constraint 'E()' must be either a class, interface or type parameter.
Class C3(Of T As {S(), E()})
                       ~~~
BC32119: Constraint 'E()' conflicts with the constraint 'S()' already specified for type parameter 'T'.
Class C3(Of T As {S(), E()})
                       ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Checks for duplicate type parameters
        <Fact>
        Public Sub BC32049ERR_DuplicateTypeParamName1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            class c(of tT, TT, Tt)

            end class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32049: Type parameter already declared with name 'TT'.
class c(of tT, TT, Tt)
               ~~
BC32049: Type parameter already declared with name 'Tt'.
class c(of tT, TT, Tt)
                   ~~                                      
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact>
        Public Sub BC32054ERR_ShadowingGenericParamWithMember1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ShadowingGenericParamWithMember1">
        <file name="a.vb"><![CDATA[
            Partial Structure S1(Of membername)
                Function membername() As String
                End Function
            End Structure
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32054: 'membername' has the same name as a type parameter.
                Function membername() As String
                         ~~~~~~~~~~                                      
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact>
        Public Sub BC32055ERR_GenericParamBase2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="GenericParamBase2">
        <file name="a.vb"><![CDATA[
            Class C1(Of T)
                Class cls3
                    Inherits T
                End Class
            End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32055: Class 'cls3' cannot inherit from a type parameter.
                    Inherits T
                             ~                                      
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact>
        Public Sub BC32055ERR_GenericParamBase2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="GenericParamBase2">
        <file name="a.vb"><![CDATA[
            Interface I1(Of T)
                Class c1
                    Inherits T
                End Class
            End Interface
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32055: Class 'c1' cannot inherit from a type parameter.
                    Inherits T
                             ~                                      
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact>
        Public Sub BC32056ERR_ImplementsGenericParam()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="TypeParamQualifierDisallowed">
        <file name="a.vb"><![CDATA[
            Interface I1(Of T)
                Class c1
                    Implements T
                End Class
            End Interface
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32056: Type parameter not allowed in 'Implements' clause.
                    Implements T
                               ~                                      
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact()>
        Public Sub BC32060ERR_ClassConstraintNotInheritable1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
NotInheritable Class A
End Class
Class B
End Class
Interface IA(Of T As {A, B})
End Interface
Interface IB(Of T)
    Sub M(Of U As T)()
End Interface
Class C
    Implements IB(Of A)
    Private Sub M(Of U As A)() Implements IB(Of A).M
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32060: Type constraint cannot be a 'NotInheritable' class.
Interface IA(Of T As {A, B})
                      ~
BC32047: Type parameter 'T' can only have one constraint that is a class.
Interface IA(Of T As {A, B})
                         ~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32061ERR_ConstraintIsRestrictedType1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Interface I(Of T As Object, U As System.ValueType)
End Interface
Structure S(Of T As System.Enum, U As System.Array)
End Structure
Delegate Sub D(Of T As System.Delegate, U As System.MulticastDelegate)()
Class C(Of T As {Object, A}, U As {A, Object})
End Class
Class A(Of T1, T2, T3, T4, T5, T6)
End Class
Class B
    Inherits A(Of Object, System.ValueType, System.Enum, System.Array, System.Delegate, System.MulticastDelegate)
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32061: 'Object' cannot be used as a type constraint.
Interface I(Of T As Object, U As System.ValueType)
                    ~~~~~~
BC32061: 'ValueType' cannot be used as a type constraint.
Interface I(Of T As Object, U As System.ValueType)
                                 ~~~~~~~~~~~~~~~~
BC32061: '[Enum]' cannot be used as a type constraint.
Structure S(Of T As System.Enum, U As System.Array)
                    ~~~~~~~~~~~
BC32061: 'Array' cannot be used as a type constraint.
Structure S(Of T As System.Enum, U As System.Array)
                                      ~~~~~~~~~~~~
BC32061: '[Delegate]' cannot be used as a type constraint.
Delegate Sub D(Of T As System.Delegate, U As System.MulticastDelegate)()
                       ~~~~~~~~~~~~~~~
BC32061: 'MulticastDelegate' cannot be used as a type constraint.
Delegate Sub D(Of T As System.Delegate, U As System.MulticastDelegate)()
                                             ~~~~~~~~~~~~~~~~~~~~~~~~
BC32061: 'Object' cannot be used as a type constraint.
Class C(Of T As {Object, A}, U As {A, Object})
                 ~~~~~~
BC32047: Type parameter 'T' can only have one constraint that is a class.
Class C(Of T As {Object, A}, U As {A, Object})
                         ~
BC32047: Type parameter 'U' can only have one constraint that is a class.
Class C(Of T As {Object, A}, U As {A, Object})
                                      ~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540653, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540653")>
        <Fact>
        Public Sub BC32067ERR_AttrCannotBeGenerics()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AttrCannotBeGenerics">
        <file name="a.vb"><![CDATA[
Imports System

Class Test(Of attributeusageattribute)
    'COMPILEERROR: BC32067,"attributeusageattribute"
    <attributeusageattribute(AttributeTargets.All)> Class c1

    End Class

    Class myattr
        'COMPILEERROR: BC32074,"Attribute"
        Inherits Attribute
    End Class

    'COMPILEERROR: BC32067,"myattr"
    <myattr()> Class test3

    End Class
End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttrCannotBeGenerics, "attributeusageattribute").WithArguments("attributeusageattribute"),
                                      Diagnostic(ERRID.ERR_AttrCannotBeGenerics, "myattr").WithArguments("Test(Of attributeusageattribute).myattr"),
                                      Diagnostic(ERRID.ERR_GenericClassCannotInheritAttr, "myattr"))
 
        End Sub
 
        <Fact()>
        Public Sub BC32068ERR_BadStaticLocalInGenericMethod()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadStaticLocalInGenericMethod">
        <file name="a.vb"><![CDATA[
            Module M
                Sub Goo(Of T)()
                    Static x = 1
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32068: Local variables within generic methods cannot be declared 'Static'.
                    Static x = 1
                    ~~~~~~                                
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32070ERR_SyntMemberShadowsGenericParam3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="SyntMemberShadowsGenericParam3">
        <file name="a.vb"><![CDATA[
            Class C(Of _P, get_P, set_P, _q, get_R, set_R, _R)
                Property P
                Property Q
                Property R
                    Get
                        Return Nothing
                    End Get
                    Set(value)
                    End Set
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32070: property 'P' implicitly defines a member '_P' which has the same name as a type parameter.
                Property P
                         ~
BC32070: property 'Q' implicitly defines a member '_Q' which has the same name as a type parameter.
                Property Q
                         ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32071ERR_ConstraintAlreadyExists1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
MustInherit Class B(Of T, U)
    MustOverride Sub M1(Of V As {T, U, I})()
End Class
MustInherit Class C
    Inherits B(Of I, A)
    MustOverride Overrides Sub M1(Of V As {I, A, I})()
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32071: Constraint type 'I' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
                                           ~
BC32071: Constraint type 'T' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
                                                 ~
BC32047: Type parameter 'U' can only have one constraint that is a class.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
                                                    ~
BC32071: Constraint type 'A' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
                                                    ~
BC32071: Constraint type 'I' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
                                                       ~
BC32071: Constraint type 'I' already specified for this type parameter.
    MustOverride Overrides Sub M1(Of V As {I, A, I})()
                                                 ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Duplicate undefined constraint types.
        <Fact()>
        Public Sub BC32071ERR_ConstraintAlreadyExists1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C(Of T As {A, B, A})
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'A' is not defined.
Class C(Of T As {A, B, A})
                 ~
BC30002: Type 'B' is not defined.
Class C(Of T As {A, B, A})
                    ~
BC30002: Type 'A' is not defined.
Class C(Of T As {A, B, A})
                       ~
BC32071: Constraint type 'A' already specified for this type parameter.
Class C(Of T As {A, B, A})
                       ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        Public Sub BC32072ERR_InterfacePossiblyImplTwice2_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfacePossiblyImplTwice2">
        <file name="a.vb"><![CDATA[
            Class C1(Of T As IAsyncResult, u As IComparable)
                Implements intf1(Of T)
                Implements intf1(Of u)
            End Class
            Interface intf1(Of T)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32072: Cannot implement interface 'intf1(Of u)' because its implementation could conflict with the implementation of another implemented interface 'intf1(Of T)' for some type arguments.
                Implements intf1(Of u)
                           ~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540652, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540652")>
        <Fact()>
        Public Sub BC32074ERR_GenericClassCannotInheritAttr()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
        <compilation>
            <file name="a.vb"><![CDATA[
Imports System
Imports System.Reflection

Friend Module RegressVSW108431mod

    <AttributeUsage(AttributeTargets.All)>
    Class Attr1(Of A)
        'COMPILEERROR: BC32074, "Attribute"
        Inherits Attribute
    End Class

    Class G(Of T)
        Class Attr2
            'COMPILEERROR: BC32074,"Attribute"
            Inherits Attribute
        End Class
    End Class
End Module
        ]]></file>
        </compilation>)
            compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
    Class Attr1(Of A)
          ~~~~~
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
        Class Attr2
              ~~~~~                                              
                                          ]]></errors>)
        End Sub
 
        <WorkItem(543672, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543672")>
        <Fact()>
        Public Sub BC32074ERR_GenericClassCannotInheritAttr_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
        <compilation>
            <file name="a.vb"><![CDATA[
Class A
    Inherits System.Attribute
End Class
Class B(Of T)
    Inherits A
End Class
Class C(Of T)
    Class B
        Inherits A
    End Class
End Class
        ]]></file>
        </compilation>)
            compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
Class B(Of T)
      ~
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
    Class B
          ~
     ]]></errors>)
        End Sub
 
        <Fact>
        Public Sub BC32075ERR_DeclaresCantBeInGeneric()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="GenericClassCannotInheritAttr">
        <file name="a.vb"><![CDATA[
            Public Class C1(Of t)
                Declare Sub goo Lib "a.dll" ()
            End Class
        ]]></file>
    </compilation>)
            compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_DeclaresCantBeInGeneric, "goo"))
        End Sub
 
        <Fact()>
        Public Sub BC32077ERR_OverrideWithConstraintMismatch2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface IA(Of T)
End Interface
Interface IB
End Interface
MustInherit Class A
    ' Different constraints.
    Friend MustOverride Sub A1(Of T As Structure)()
    Friend MustOverride Sub A2(Of T As Structure, U As IA(Of T))()
    Friend MustOverride Sub A3(Of T As IA(Of T))()
    Friend MustOverride Sub A4(Of T As {Structure, IA(Of T)}, U)()
    ' Additional constraints.
    Friend MustOverride Sub B1(Of T)()
    Friend MustOverride Sub B2(Of T As New)()
    Friend MustOverride Sub B3(Of T As IA(Of T), U)()
    ' Missing constraints.
    Friend MustOverride Sub C1(Of T As Class)()
    Friend MustOverride Sub C2(Of T As {Class, New})()
    Friend MustOverride Sub C3(Of T, U As {IB, IA(Of T)})()
    ' Same constraints, different order.
    Friend MustOverride Sub D1(Of T As {IA(Of T), IB})()
    Friend MustOverride Sub D2(Of T, U, V As {T, U})()
    ' Different constraint clauses.
    Friend MustOverride Sub E1(Of T, U As T)()
    ' Different type parameter names.
    Friend MustOverride Sub F1(Of T As Class, U As T)()
    Friend MustOverride Sub F2(Of T As Class, U As T)()
End Class
MustInherit Class B
    Inherits A
    ' Different constraints.
    Friend MustOverride Overrides Sub A1(Of T As Class)()
    Friend MustOverride Overrides Sub A2(Of T As Structure, U As IB)()
    Friend MustOverride Overrides Sub A3(Of T As IA(Of IA(Of T)))()
    Friend MustOverride Overrides Sub A4(Of T As {Structure, IA(Of U)}, U)()
    ' Additional constraints.
    Friend MustOverride Overrides Sub B1(Of T As New)()
    Friend MustOverride Overrides Sub B2(Of T As {Class, New})()
    Friend MustOverride Overrides Sub B3(Of T As {IB, IA(Of T)}, U)()
    ' Missing constraints.
    Friend MustOverride Overrides Sub C1(Of T)()
    Friend MustOverride Overrides Sub C2(Of T As Class)()
    Friend MustOverride Overrides Sub C3(Of T, U As IA(Of T))()
    ' Same constraints, different order.
    Friend MustOverride Overrides Sub D1(Of T As {IB, IA(Of T)})()
    Friend MustOverride Overrides Sub D2(Of T, U, V As {U, T})()
    ' Different constraint clauses.
    Friend MustOverride Overrides Sub E1(Of T As Class, U)()
    ' Different type parameter names.
    Friend MustOverride Overrides Sub F1(Of U As Class, T As U)()
    Friend MustOverride Overrides Sub F2(Of T1 As Class, T2 As T1)()
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32077: 'Friend MustOverride Overrides Sub A1(Of T As Class)()' cannot override 'Friend MustOverride Sub A1(Of T As Structure)()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub A1(Of T As Class)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub A2(Of T As Structure, U As IB)()' cannot override 'Friend MustOverride Sub A2(Of T As Structure, U As IA(Of T))()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub A2(Of T As Structure, U As IB)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub A3(Of T As IA(Of IA(Of T)))()' cannot override 'Friend MustOverride Sub A3(Of T As IA(Of T))()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub A3(Of T As IA(Of IA(Of T)))()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub A4(Of T As {Structure, IA(Of U)}, U)()' cannot override 'Friend MustOverride Sub A4(Of T As {Structure, IA(Of T)}, U)()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub A4(Of T As {Structure, IA(Of U)}, U)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub B1(Of T As New)()' cannot override 'Friend MustOverride Sub B1(Of T)()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub B1(Of T As New)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub B2(Of T As {Class, New})()' cannot override 'Friend MustOverride Sub B2(Of T As New)()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub B2(Of T As {Class, New})()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub B3(Of T As {IB, IA(Of T)}, U)()' cannot override 'Friend MustOverride Sub B3(Of T As IA(Of T), U)()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub B3(Of T As {IB, IA(Of T)}, U)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub C1(Of T)()' cannot override 'Friend MustOverride Sub C1(Of T As Class)()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub C1(Of T)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub C2(Of T As Class)()' cannot override 'Friend MustOverride Sub C2(Of T As {Class, New})()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub C2(Of T As Class)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub C3(Of T, U As IA(Of T))()' cannot override 'Friend MustOverride Sub C3(Of T, U As {IB, IA(Of T)})()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub C3(Of T, U As IA(Of T))()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub E1(Of T As Class, U)()' cannot override 'Friend MustOverride Sub E1(Of T, U As T)()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub E1(Of T As Class, U)()
                                      ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32077ERR_OverrideWithConstraintMismatch2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Interface I
End Interface
Class A
    Implements I
End Class
Structure S
End Structure
MustInherit Class A0(Of T)
    Friend MustOverride Sub AM(Of U As {T, Structure})()
End Class
MustInherit Class A1
    Inherits A0(Of S)
    Friend MustOverride Overrides Sub AM(Of U As {Structure, S})()
End Class
MustInherit Class A2
    Inherits A0(Of S)
    Friend MustOverride Overrides Sub AM(Of U As S)()
End Class
MustInherit Class B0(Of T)
    Friend MustOverride Sub BX(Of U As {T, Class})()
End Class
MustInherit Class B1
    Inherits B0(Of A)
    Friend MustOverride Overrides Sub BX(Of U As {Class, A})()
End Class
MustInherit Class B2
    Inherits B0(Of A)
    Friend MustOverride Overrides Sub BX(Of U As A)()
End Class
MustInherit Class C0(Of T, U)
    Friend MustOverride Sub CM(Of V As {T, U})()
End Class
MustInherit Class C1(Of T)
    Inherits C0(Of T, T)
    Friend MustOverride Overrides Sub CM(Of V As T)()
End Class
MustInherit Class C2(Of T)
    Inherits C0(Of T, T)
    Friend MustOverride Overrides Sub CM(Of V As {T, T})()
End Class
MustInherit Class D0(Of T, U)
    Friend MustOverride Sub DM(Of V As {T, U, A, I})()
End Class
MustInherit Class D1
    Inherits D0(Of I, A)
    Friend MustOverride Overrides Sub DM(Of V As A)()
End Class
MustInherit Class D2
    Inherits D0(Of I, A)
    Friend MustOverride Overrides Sub DM(Of V As {A, I})()
End Class
MustInherit Class D3
    Inherits D0(Of A, I)
    Friend MustOverride Overrides Sub DM(Of V As {A, I, A, I})()
End Class
MustInherit Class E0(Of T, U)
    Friend MustOverride Sub EM(Of V As {T, U, Structure})()
End Class
MustInherit Class E1
    Inherits E0(Of Object, ValueType)
    Friend MustOverride Overrides Sub EM(Of U As Structure)()
End Class
MustInherit Class E2
    Inherits E0(Of Object, ValueType)
    Friend MustOverride Overrides Sub EM(Of U As {Structure, Object, ValueType})()
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32077: 'Friend MustOverride Overrides Sub AM(Of U As S)()' cannot override 'Friend MustOverride Sub AM(Of U As {Structure, S})()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub AM(Of U As S)()
                                      ~~
BC32077: 'Friend MustOverride Overrides Sub BX(Of U As A)()' cannot override 'Friend MustOverride Sub BX(Of U As {Class, A})()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub BX(Of U As A)()
                                      ~~
BC32071: Constraint type 'T' already specified for this type parameter.
    Friend MustOverride Overrides Sub CM(Of V As {T, T})()
                                                     ~
BC32077: 'Friend MustOverride Overrides Sub DM(Of V As A)()' cannot override 'Friend MustOverride Sub DM(Of V As {I, A})()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub DM(Of V As A)()
                                      ~~
BC32071: Constraint type 'A' already specified for this type parameter.
    Friend MustOverride Overrides Sub DM(Of V As {A, I, A, I})()
                                                        ~
BC32071: Constraint type 'I' already specified for this type parameter.
    Friend MustOverride Overrides Sub DM(Of V As {A, I, A, I})()
                                                           ~
BC32077: 'Friend MustOverride Overrides Sub EM(Of U As Structure)()' cannot override 'Friend MustOverride Sub EM(Of V As {Structure, Object, ValueType})()' because they differ by type parameter constraints.
    Friend MustOverride Overrides Sub EM(Of U As Structure)()
                                      ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32078ERR_ImplementsWithConstraintMismatch3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Interface I
End Interface
Class A
    Implements I
End Class
Structure S
End Structure
Interface IA(Of T)
    Sub AM(Of U As {T, Structure})()
End Interface
Class A1
    Implements IA(Of S)
    Private Sub AM(Of U As {Structure, S})() Implements IA(Of S).AM
    End Sub
End Class
Class A2
    Implements IA(Of S)
    Private Sub AM(Of U As S)() Implements IA(Of S).AM
    End Sub
End Class
Interface IB(Of T)
    Sub BX(Of U As {T, Class})()
End Interface
Class B1
    Implements IB(Of A)
    Private Sub BX(Of U As {Class, A})() Implements IB(Of A).BX
    End Sub
End Class
Class B2
    Implements IB(Of A)
    Private Sub BX(Of U As A)() Implements IB(Of A).BX
    End Sub
End Class
Interface IC(Of T, U)
    Sub CM(Of V As {T, U})()
End Interface
Class C1(Of T)
    Implements IC(Of T, T)
    Private Sub CM(Of V As T)() Implements IC(Of T, T).CM
    End Sub
End Class
Class C2(Of T)
    Implements IC(Of T, T)
    Private Sub CM(Of V As {T, T})() Implements IC(Of T, T).CM
    End Sub
End Class
Interface ID(Of T, U)
    Sub DM(Of V As {T, U, A, I})()
End Interface
Class D1
    Implements ID(Of I, A)
    Private Sub DM(Of V As A)() Implements ID(Of I, A).DM
    End Sub
End Class
Class D2
    Implements ID(Of I, A)
    Private Sub DM(Of V As {A, I})() Implements ID(Of I, A).DM
    End Sub
End Class
Class D3
    Implements ID(Of A, I)
    Private Sub DM(Of V As {A, I, A, I})() Implements ID(Of A, I).DM
    End Sub
End Class
Interface IE(Of T, U)
    Sub EM(Of V As {T, U, Structure})()
End Interface
Class E1
    Implements IE(Of Object, ValueType)
    Private Sub EM(Of U As Structure)() Implements IE(Of Object, ValueType).EM
    End Sub
End Class
Class E2
    Implements IE(Of Object, ValueType)
    Private Sub EM(Of U As {Structure, Object, ValueType})() Implements IE(Of Object, ValueType).EM
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32078: 'Private Sub AM(Of U As S)()' cannot implement 'IA(Of S).Sub AM(Of U As {Structure, S})()' because they differ by type parameter constraints.
    Private Sub AM(Of U As S)() Implements IA(Of S).AM
                                           ~~~~~~~~~~~
BC32078: 'Private Sub BX(Of U As A)()' cannot implement 'IB(Of A).Sub BX(Of U As {Class, A})()' because they differ by type parameter constraints.
    Private Sub BX(Of U As A)() Implements IB(Of A).BX
                                           ~~~~~~~~~~~
BC32071: Constraint type 'T' already specified for this type parameter.
    Private Sub CM(Of V As {T, T})() Implements IC(Of T, T).CM
                               ~
BC32078: 'Private Sub DM(Of V As A)()' cannot implement 'ID(Of I, A).Sub DM(Of V As {I, A})()' because they differ by type parameter constraints.
    Private Sub DM(Of V As A)() Implements ID(Of I, A).DM
                                           ~~~~~~~~~~~~~~
BC32071: Constraint type 'A' already specified for this type parameter.
    Private Sub DM(Of V As {A, I, A, I})() Implements ID(Of A, I).DM
                                  ~
BC32071: Constraint type 'I' already specified for this type parameter.
    Private Sub DM(Of V As {A, I, A, I})() Implements ID(Of A, I).DM
                                     ~
BC32078: 'Private Sub EM(Of U As Structure)()' cannot implement 'IE(Of Object, ValueType).Sub EM(Of V As {Structure, Object, ValueType})()' because they differ by type parameter constraints.
    Private Sub EM(Of U As Structure)() Implements IE(Of Object, ValueType).EM
                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Single method implementing multiple interface methods.
        <Fact()>
        Public Sub BC32078ERR_ImplementsWithConstraintMismatch3_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface IA(Of T)
    Sub AM(Of U As {T, Structure})()
End Interface
Interface IB(Of T)
    Sub BX(Of U As {T, Class})()
End Interface
Class C(Of T)
    Implements IA(Of T), IB(Of T)
    Public Sub M(Of U As T)() Implements IA(Of T).AM, IB(Of T).BX
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32078: 'Public Sub M(Of U As T)()' cannot implement 'IA(Of T).Sub AM(Of U As {Structure, T})()' because they differ by type parameter constraints.
    Public Sub M(Of U As T)() Implements IA(Of T).AM, IB(Of T).BX
                                         ~~~~~~~~~~~
BC32078: 'Public Sub M(Of U As T)()' cannot implement 'IB(Of T).Sub BX(Of U As {Class, T})()' because they differ by type parameter constraints.
    Public Sub M(Of U As T)() Implements IA(Of T).AM, IB(Of T).BX
                                                      ~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32078ERR_ImplementsWithConstraintMismatch3_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface

Interface II
    Sub m(Of T As I)()
End Interface

Class CLS
    Implements II

    Partial Private Sub X()
    End Sub

    Private Sub X(Of T)() Implements II.m
    End Sub
End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC32078: 'Private Sub X(Of T)()' cannot implement 'II.Sub m(Of T As I)()' because they differ by type parameter constraints.
    Private Sub X(Of T)() Implements II.m
                                     ~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC32078ERR_ImplementsWithConstraintMismatch3_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface

Interface II
    Sub m(Of T As I)()
End Interface

Class CLS
    Implements II

    Partial Private Sub X(Of T)()
    End Sub

    Private Sub X(Of T)() Implements II.m
    End Sub
End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC32078: 'Private Sub X(Of T)()' cannot implement 'II.Sub m(Of T As I)()' because they differ by type parameter constraints.
    Private Sub X(Of T)() Implements II.m
                                     ~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC32080ERR_HandlesInvalidOnGenericMethod()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="HandlesInvalidOnGenericMethod">
        <file name="a.vb"><![CDATA[
            Class A 
                Event X()
                Sub Goo(Of T)() Handles Me.X
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32080: Generic methods cannot use 'Handles' clause.
                Sub Goo(Of T)() Handles Me.X
                    ~~~
BC31029: Method 'Goo' cannot handle event 'X' because they do not have a compatible signature.
                Sub Goo(Of T)() Handles Me.X
                                           ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32081ERR_MultipleNewConstraints()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MultipleNewConstraints">
        <file name="a.vb"><![CDATA[
            Imports System
            Class C(Of T As {New, New})
                Sub M(Of U As {New, Class, New})()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32081: 'New' constraint cannot be specified multiple times for the same type parameter.
            Class C(Of T As {New, New})
                                  ~~~
BC32081: 'New' constraint cannot be specified multiple times for the same type parameter.
                Sub M(Of U As {New, Class, New})()
                                           ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32082ERR_MustInheritForNewConstraint2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustInheritForNewConstraint2">
        <file name="a.vb"><![CDATA[
            Class C1(Of T)
                Dim x As New C2(Of Base).C2Inner(Of Derived)
                Sub New()
                End Sub
            End Class
            Class Base
            End Class
            MustInherit Class Derived
                Inherits Base
                Public Sub New()
                End Sub
            End Class
            Class C2(Of T As New)
                Class C2Inner(Of S As {T, Derived, New})
                End Class
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32082: Type argument 'Derived' is declared 'MustInherit' and does not satisfy the 'New' constraint for type parameter 'S'.
                Dim x As New C2(Of Base).C2Inner(Of Derived)
                                                    ~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32083ERR_NoSuitableNewForNewConstraint2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NoSuitableNewForNewConstraint2">
        <file name="a.vb"><![CDATA[
Class [Public]
    Public Sub New()
    End Sub
End Class
Class [Friend]
    Friend Sub New()
    End Sub
End Class
Class ProtectedFriend
    Protected Friend Sub New()
    End Sub
End Class
Class [Protected]
    Protected Sub New()
    End Sub
End Class
Class [Private]
    Private Sub New()
    End Sub
End Class
Interface [Interface]
End Interface
Structure [Structure]
End Structure
Class C
    Function F(Of T As New)() As T
        Return New T
    End Function
    Sub M()
        Dim o
        o = F(Of [Public])()
        o = F(Of [Friend])()
        o = F(Of [ProtectedFriend])()
        o = F(Of [Protected])()
        o = F(Of [Private])()
        o = F(Of [Interface])()
        o = F(Of [Structure])()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32083: Type argument '[Friend]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
        o = F(Of [Friend])()
            ~~~~~~~~~~~~~~
BC32083: Type argument 'ProtectedFriend' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
        o = F(Of [ProtectedFriend])()
            ~~~~~~~~~~~~~~~~~~~~~~~
BC32083: Type argument '[Protected]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
        o = F(Of [Protected])()
            ~~~~~~~~~~~~~~~~~
BC32083: Type argument '[Private]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
        o = F(Of [Private])()
            ~~~~~~~~~~~~~~~
BC32083: Type argument '[Interface]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
        o = F(Of [Interface])()
            ~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Constructors with optional and params args
        ' should not be considered parameterless.
        <Fact()>
        Public Sub BC32083ERR_NoSuitableNewForNewConstraint2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NoSuitableNewForNewConstraint2">
        <file name="a.vb"><![CDATA[
Class A
    Public Sub New(Optional o As Object = Nothing)
    End Sub
End Class
Class B
    Public Sub New(ParamArray o As Object())
    End Sub
End Class
Class C(Of T As New)
    Shared Sub M(Of U As New)()
        Dim o
        o = New A()
        o = New C(Of A)()
        M(Of A)()
        o = New B()
        o = New C(Of B)()
        M(Of B)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32083: Type argument 'A' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
        o = New C(Of A)()
                     ~
BC32083: Type argument 'A' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'U'.
        M(Of A)()
        ~~~~~~~
BC32083: Type argument 'B' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
        o = New C(Of B)()
                     ~
BC32083: Type argument 'B' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'U'.
        M(Of B)()
        ~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32084ERR_BadGenericParamForNewConstraint2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Structure S
End Structure
Class A
    Shared Sub M(Of T As New)()
    End Sub
End Class
Class B(Of T)
    Overridable Sub M(Of U As T)()
    End Sub
    Shared Sub M(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)()
        A.M(Of T1)()
        A.M(Of T2)()
        A.M(Of T3)()
        A.M(Of T4)()
        A.M(Of T5)()
        A.M(Of T6)()
        A.M(Of T7)()
    End Sub
End Class
Class CI
    Inherits B(Of I)
    Public Overrides Sub M(Of UI As I)()
        A.M(Of UI)()
    End Sub
End Class
Class CS
    Inherits B(Of S)
    Public Overrides Sub M(Of US As S)()
        A.M(Of US)()
    End Sub
End Class
Class CA
    Inherits B(Of A)
    Public Overrides Sub M(Of UA As A)()
        A.M(Of UA)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32084: Type parameter 'T1' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
        A.M(Of T1)()
          ~~~~~~~~
BC32084: Type parameter 'T2' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
        A.M(Of T2)()
          ~~~~~~~~
BC32084: Type parameter 'T5' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
        A.M(Of T5)()
          ~~~~~~~~
BC32084: Type parameter 'T6' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
        A.M(Of T6)()
          ~~~~~~~~
BC32084: Type parameter 'T7' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
        A.M(Of T7)()
          ~~~~~~~~
BC32084: Type parameter 'UI' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
        A.M(Of UI)()
          ~~~~~~~~
BC32084: Type parameter 'UA' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
        A.M(Of UA)()
          ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32086ERR_DuplicateRawGenericTypeImport1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="DuplicateRawGenericTypeImport1">
        <file name="a.vb"><![CDATA[
            Imports ns1.c1(Of String)
            Imports ns1.c1(Of Integer)
            Namespace ns1
                Public Class c1(Of t)
                End Class
            End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32086: Generic type 'c1(Of t)' cannot be imported more than once.
            Imports ns1.c1(Of Integer)
                    ~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32089ERR_NameSameAsMethodTypeParam1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NameSameAsMethodTypeParam1">
        <file name="a.vb"><![CDATA[
            Class c1
                Function fun(Of T1, T2) (ByVal t1 As T1, ByVal t2 As T2) As Integer
                    Return 5
                End Function
            End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32089: 't1' is already declared as a type parameter of this method.
                Function fun(Of T1, T2) (ByVal t1 As T1, ByVal t2 As T2) As Integer
                                               ~~
BC32089: 't2' is already declared as a type parameter of this method.
                Function fun(Of T1, T2) (ByVal t1 As T1, ByVal t2 As T2) As Integer
                                                               ~~                                      
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32089ERR_NameSameAsMethodTypeParam1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NameSameAsMethodTypeParam1">
        <file name="a.vb"><![CDATA[
            Class c1
                Sub sub1(Of T1, T2 As T1) (ByVal p1 As T1, ByVal t2 As T2)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32089: 't2' is already declared as a type parameter of this method.
                Sub sub1(Of T1, T2 As T1) (ByVal p1 As T1, ByVal t2 As T2)
                                                                 ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact, WorkItem(543642, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543642")>
        Public Sub BC32090ERR_TypeParamNameFunctionNameCollision()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="TypeParamNameFunctionNameCollision">
        <file name="a.vb"><![CDATA[
            Module M
                Function Goo(Of Goo)()
                    Return Nothing
                End Function

                ' Allowed for Sub -- should not generate error below.
                Sub Bar(Of Bar)() 
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32090: Type parameter cannot have the same name as its defining function.
                Function Goo(Of Goo)()
                                ~~~                                 
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32101ERR_MultipleReferenceConstraints()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C(Of T As {Class, Class})
    Sub M(Of U As {Class, New, Class})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32101: 'Class' constraint cannot be specified multiple times for the same type parameter.
Class C(Of T As {Class, Class})
                        ~~~~~
BC32101: 'Class' constraint cannot be specified multiple times for the same type parameter.
    Sub M(Of U As {Class, New, Class})()
                               ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32102ERR_MultipleValueConstraints()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Class C(Of T As {Structure, Structure})
    Sub M(Of U As {Structure, I, Structure})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32102: 'Structure' constraint cannot be specified multiple times for the same type parameter.
Class C(Of T As {Structure, Structure})
                            ~~~~~~~~~
BC32102: 'Structure' constraint cannot be specified multiple times for the same type parameter.
    Sub M(Of U As {Structure, I, Structure})()
                                 ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32103ERR_NewAndValueConstraintsCombined()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C(Of T As {Structure, New})
    Sub M(Of U As {New, Structure})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32103: 'New' constraint and 'Structure' constraint cannot be combined.
Class C(Of T As {Structure, New})
                            ~~~
BC32103: 'New' constraint and 'Structure' constraint cannot be combined.
    Sub M(Of U As {New, Structure})()
                        ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32104ERR_RefAndValueConstraintsCombined()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C(Of T As {Structure, Class})
    Sub M(Of U As {Class, Structure})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32104: 'Class' constraint and 'Structure' constraint cannot be combined.
Class C(Of T As {Structure, Class})
                            ~~~~~
BC32104: 'Class' constraint and 'Structure' constraint cannot be combined.
    Sub M(Of U As {Class, Structure})()
                          ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32105ERR_BadTypeArgForStructConstraint2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Class B(Of T As Structure)
End Class
Class C
    Shared Sub F(Of U As Structure)()
    End Sub
    Shared Sub M1(Of T1)()
        Dim o = New B(Of T1)()
        F(Of T1)()
    End Sub
    Shared Sub M2(Of T2 As Class)()
        Dim o = New B(Of T2)()
        F(Of T2)()
    End Sub
    Shared Sub M3(Of T3 As Structure)()
        Dim o = New B(Of T3)()
        F(Of T3)()
    End Sub
    Shared Sub M4(Of T4 As New)()
        Dim o = New B(Of T4)()
        F(Of T4)()
    End Sub
    Shared Sub M5(Of T5 As I)()
        Dim o = New B(Of T5)()
        F(Of T5)()
    End Sub
    Shared Sub M6(Of T6 As A)()
        Dim o = New B(Of T6)()
        F(Of T6)()
    End Sub
    Shared Sub M7(Of T7 As U, U)()
        Dim o = New B(Of T7)()
        F(Of T7)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'T1' does not satisfy the 'Structure' constraint for type parameter 'T'.
        Dim o = New B(Of T1)()
                         ~~
BC32105: Type argument 'T1' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(Of T1)()
        ~~~~~~~~
BC32105: Type argument 'T2' does not satisfy the 'Structure' constraint for type parameter 'T'.
        Dim o = New B(Of T2)()
                         ~~
BC32105: Type argument 'T2' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(Of T2)()
        ~~~~~~~~
BC32105: Type argument 'T4' does not satisfy the 'Structure' constraint for type parameter 'T'.
        Dim o = New B(Of T4)()
                         ~~
BC32105: Type argument 'T4' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(Of T4)()
        ~~~~~~~~
BC32105: Type argument 'T5' does not satisfy the 'Structure' constraint for type parameter 'T'.
        Dim o = New B(Of T5)()
                         ~~
BC32105: Type argument 'T5' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(Of T5)()
        ~~~~~~~~
BC32105: Type argument 'T6' does not satisfy the 'Structure' constraint for type parameter 'T'.
        Dim o = New B(Of T6)()
                         ~~
BC32105: Type argument 'T6' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(Of T6)()
        ~~~~~~~~
BC32105: Type argument 'T7' does not satisfy the 'Structure' constraint for type parameter 'T'.
        Dim o = New B(Of T7)()
                         ~~
BC32105: Type argument 'T7' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(Of T7)()
        ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32105ERR_BadTypeArgForStructConstraint2_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C
    Shared Sub F(Of T As Structure, U As Structure)(a As T, b As U)
    End Sub
    Shared Sub M(a As Integer, b As Object)
        F(b, a)
        F(a, b)
        F(Of Integer, Object)(a, b)
    End Sub
End Class
        ]]></file>
    </compilation>)
            ' TODO: Dev10 highlights the first type parameter or argument that
            ' violates a generic method constraint, not the entire expression.
            Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
        F(b, a)
        ~
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(a, b)
        ~
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'U'.
        F(Of Integer, Object)(a, b)
        ~~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32105ERR_BadTypeArgForStructConstraint2_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports N.A(Of Object).B(Of String)
Imports C = N.A(Of Object).B(Of String)
Namespace N
    Class A(Of T As Structure)
        Friend Class B(Of U As Structure)
        End Class
    End Class
End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
Imports N.A(Of Object).B(Of String)
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32105: Type argument 'String' does not satisfy the 'Structure' constraint for type parameter 'U'.
Imports N.A(Of Object).B(Of String)
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
Imports C = N.A(Of Object).B(Of String)
        ~
BC32105: Type argument 'String' does not satisfy the 'Structure' constraint for type parameter 'U'.
Imports C = N.A(Of Object).B(Of String)
        ~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32105ERR_BadTypeArgForStructConstraint2_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I(Of T As Structure)
    Sub M(Of U As I(Of U))()
End Interface
Class A(Of T As Structure)
    Friend Interface I
    End Interface
End Class
Class B(Of T As I(Of T), U As A(Of U).I)
    Sub M(Of V As A(Of V).I)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            ' TODO: Dev10 reports errors on the type argument violating the
            ' constraint rather than the type with type argument (reporting
            ' error in U in I(Of U) rather than entire I(Of U) for instance).
            Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'U' does not satisfy the 'Structure' constraint for type parameter 'T'.
    Sub M(Of U As I(Of U))()
                  ~~~~~~~
BC32105: Type argument 'T' does not satisfy the 'Structure' constraint for type parameter 'T'.
Class B(Of T As I(Of T), U As A(Of U).I)
                ~~~~~~~
BC32105: Type argument 'U' does not satisfy the 'Structure' constraint for type parameter 'T'.
Class B(Of T As I(Of T), U As A(Of U).I)
                              ~~~~~~~~~
BC32105: Type argument 'V' does not satisfy the 'Structure' constraint for type parameter 'T'.
    Sub M(Of V As A(Of V).I)()
                  ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32105ERR_BadTypeArgForStructConstraint2_4()
            Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"N.A(Of Object).B(Of String)", "C=N.A(Of N.B).B(Of Object)"}))
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
    <file name="a.vb"><![CDATA[
Namespace N
    Class A(Of T As Structure)
        Friend Class B(Of U As Structure)
        End Class
    End Class
    Class B
    End Class
End Namespace
    ]]></file>
</compilation>, options)
            Dim expectedErrors = <errors><![CDATA[
BC32105: Error in project-level import 'C=N.A(Of N.B).B(Of Object)' at 'C=N.A(Of N.B).B(Of Object)' : Type argument 'B' does not satisfy the 'Structure' constraint for type parameter 'T'.
BC32105: Error in project-level import 'C=N.A(Of N.B).B(Of Object)' at 'C=N.A(Of N.B).B(Of Object)' : Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'U'.
BC32105: Error in project-level import 'N.A(Of Object).B(Of String)' at 'N.A(Of Object).B(Of String)' : Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
BC32105: Error in project-level import 'N.A(Of Object).B(Of String)' at 'N.A(Of Object).B(Of String)' : Type argument 'String' does not satisfy the 'Structure' constraint for type parameter 'U'.
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC32106ERR_BadTypeArgForRefConstraint2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Class B(Of T As Class)
End Class
Class C
    Shared Sub F(Of T As Class)()
    End Sub
    Shared Sub M1(Of T1)()
        Dim o = New B(Of T1)()
        F(Of T1)()
    End Sub
    Shared Sub M2(Of T2 As Class)()
        Dim o = New B(Of T2)()
        F(Of T2)()
    End Sub
    Shared Sub M3(Of T3 As Structure)()
        Dim o = New B(Of T3)()
        F(Of T3)()
    End Sub
    Shared Sub M4(Of T4 As New)()
        Dim o = New B(Of T4)()
        F(Of T4)()
    End Sub
    Shared Sub M5(Of T5 As I)()
        Dim o = New B(Of T5)()
        F(Of T5)()
    End Sub
    Shared Sub M6(Of T6 As A)()
        Dim o = New B(Of T6)()
        F(Of T6)()
    End Sub
    Shared Sub M7(Of T7 As U, U)()
        Dim o = New B(Of T7)()
        F(Of T7)()
    End Sub
    Shared Sub M8()
        Dim o = New B(Of Integer?)()
        F(Of Integer?)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32106: Type argument 'T1' does not satisfy the 'Class' constraint for type parameter 'T'.
        Dim o = New B(Of T1)()
                         ~~
BC32106: Type argument 'T1' does not satisfy the 'Class' constraint for type parameter 'T'.
        F(Of T1)()
        ~~~~~~~~
BC32106: Type argument 'T3' does not satisfy the 'Class' constraint for type parameter 'T'.
        Dim o = New B(Of T3)()
                         ~~
BC32106: Type argument 'T3' does not satisfy the 'Class' constraint for type parameter 'T'.
        F(Of T3)()
        ~~~~~~~~
BC32106: Type argument 'T4' does not satisfy the 'Class' constraint for type parameter 'T'.
        Dim o = New B(Of T4)()
                         ~~
BC32106: Type argument 'T4' does not satisfy the 'Class' constraint for type parameter 'T'.
        F(Of T4)()
        ~~~~~~~~
BC32106: Type argument 'T5' does not satisfy the 'Class' constraint for type parameter 'T'.
        Dim o = New B(Of T5)()
                         ~~
BC32106: Type argument 'T5' does not satisfy the 'Class' constraint for type parameter 'T'.
        F(Of T5)()
        ~~~~~~~~
BC32106: Type argument 'T7' does not satisfy the 'Class' constraint for type parameter 'T'.
        Dim o = New B(Of T7)()
                         ~~
BC32106: Type argument 'T7' does not satisfy the 'Class' constraint for type parameter 'T'.
        F(Of T7)()
        ~~~~~~~~
BC32106: Type argument 'Integer?' does not satisfy the 'Class' constraint for type parameter 'T'.
        Dim o = New B(Of Integer?)()
                         ~~~~~~~~
BC32106: Type argument 'Integer?' does not satisfy the 'Class' constraint for type parameter 'T'.
        F(Of Integer?)()
        ~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32107ERR_RefAndClassTypeConstrCombined()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
    Inherits A
End Class
Interface IA(Of T, U As {A, T, Class})
End Interface
Interface IB
    Sub M(Of T, U As {T, Class, A})()
End Interface
MustInherit Class C(Of T, U)
    MustOverride Sub M(Of V As {T, Class, U})()
End Class
MustInherit Class D
    Inherits C(Of A, B)
    Public Overrides Sub M(Of V As {A, Class, B})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32107: 'Class' constraint and a specific class type constraint cannot be combined.
Interface IA(Of T, U As {A, T, Class})
                               ~~~~~
BC32107: 'Class' constraint and a specific class type constraint cannot be combined.
    Sub M(Of T, U As {T, Class, A})()
                                ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32108ERR_ValueAndClassTypeConstrCombined()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
    Inherits A
End Class
Interface IA(Of T, U As {A, T, Structure})
End Interface
Interface IB
    Sub M(Of T, U As {T, Structure, A})()
End Interface
MustInherit Class C(Of T, U)
    MustOverride Sub M(Of V As {T, Structure, U})()
End Class
MustInherit Class D
    Inherits C(Of A, B)
    Public Overrides Sub M(Of V As {A, Structure, B})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32108: 'Structure' constraint and a specific class type constraint cannot be combined.
Interface IA(Of T, U As {A, T, Structure})
                               ~~~~~~~~~
BC32108: 'Structure' constraint and a specific class type constraint cannot be combined.
    Sub M(Of T, U As {T, Structure, A})()
                                    ~
BC32119: Constraint 'Structure' conflicts with the constraint 'Class A' already specified for type parameter 'V'.
    Public Overrides Sub M(Of V As {A, Structure, B})()
                                       ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32109ERR_ConstraintClashIndirectIndirect4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Interface IA(Of T As A, U As B, V As U, W As {T, U, V})
End Interface
Interface IB(Of T1 As A, T2 As B)
    Sub M1(Of T3 As {T1, T2})()
    Sub M2(Of T3 As {T2, T1})()
End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32109: Indirect constraint 'Class B' obtained from the type parameter constraint 'U' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T'.
Interface IA(Of T As A, U As B, V As U, W As {T, U, V})
                                                 ~
BC32109: Indirect constraint 'Class B' obtained from the type parameter constraint 'V' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T'.
Interface IA(Of T As A, U As B, V As U, W As {T, U, V})
                                                    ~
BC32109: Indirect constraint 'Class B' obtained from the type parameter constraint 'T2' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
    Sub M1(Of T3 As {T1, T2})()
                         ~~
BC32109: Indirect constraint 'Class A' obtained from the type parameter constraint 'T1' conflicts with the indirect constraint 'Class B' obtained from the type parameter constraint 'T2'.
    Sub M2(Of T3 As {T2, T1})()
                         ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32110ERR_ConstraintClashDirectIndirect3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Interface IA(Of T1 As A, T2 As B, T3 As {Structure, T1, T2})
End Interface
Interface IB(Of T1 As A)
    Sub M(Of T2, T3 As {T2, B, T1})()
End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32110: Constraint 'Structure' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
Interface IA(Of T1 As A, T2 As B, T3 As {Structure, T1, T2})
                                         ~~~~~~~~~
BC32110: Constraint 'Structure' conflicts with the indirect constraint 'Class B' obtained from the type parameter constraint 'T2'.
Interface IA(Of T1 As A, T2 As B, T3 As {Structure, T1, T2})
                                         ~~~~~~~~~
BC32110: Constraint 'Class B' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
    Sub M(Of T2, T3 As {T2, B, T1})()
                            ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32110ERR_ConstraintClashDirectIndirect3_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Class C
End Class
Class D(Of T1 As A, T2 As B)
    Sub M(Of U1 As T1, U2 As T2, V As {C, T1, T2})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32110: Constraint 'Class C' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
    Sub M(Of U1 As T1, U2 As T2, V As {C, T1, T2})()
                                       ~
BC32110: Constraint 'Class C' conflicts with the indirect constraint 'Class B' obtained from the type parameter constraint 'T2'.
    Sub M(Of U1 As T1, U2 As T2, V As {C, T1, T2})()
                                       ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32110ERR_ConstraintClashDirectIndirect3_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Enum E
    A
End Enum
MustInherit Class A(Of T1, T2)
    MustOverride Sub M(Of U1 As T1, U2 As {T2, U1})()
End Class
Class B0
    Inherits A(Of Integer, Integer)
    Public Overrides Sub M(Of U1 As Integer, U2 As {Integer, U1})()
    End Sub
End Class
Class B1
    Inherits A(Of Integer, Object)
    Public Overrides Sub M(Of U1 As Integer, U2 As {Object, U1})()
    End Sub
End Class
Class B2
    Inherits A(Of Integer, Short)
    Public Overrides Sub M(Of U1 As Integer, U2 As {Short, U1})()
    End Sub
End Class
Class B3
    Inherits A(Of Integer, Long)
    Public Overrides Sub M(Of U1 As Integer, U2 As {Long, U1})()
    End Sub
End Class
Class B4
    Inherits A(Of Integer, UInteger)
    Public Overrides Sub M(Of U1 As Integer, U2 As {UInteger, U1})()
    End Sub
End Class
Class B5
    Inherits A(Of Integer, E)
    Public Overrides Sub M(Of U1 As Integer, U2 As {E, U1})()
    End Sub
End Class
Class C0
    Inherits A(Of Object(), Object())
    Public Overrides Sub M(Of U1 As Object(), U2 As {Object(), U1})()
    End Sub
End Class
Class C1
    Inherits A(Of Object(), String())
    Public Overrides Sub M(Of U1 As Object(), U2 As {String(), U1})()
    End Sub
End Class
Class C2
    Inherits A(Of Integer(), Integer())
    Public Overrides Sub M(Of U1 As Integer(), U2 As {Integer(), U1})()
    End Sub
End Class
Class C3
    Inherits A(Of Integer(), E())
    Public Overrides Sub M(Of U1 As Integer(), U2 As {E(), U1})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32110: Constraint 'Short' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
    Public Overrides Sub M(Of U1 As Integer, U2 As {Short, U1})()
                                                    ~~~~~
BC32110: Constraint 'Long' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
    Public Overrides Sub M(Of U1 As Integer, U2 As {Long, U1})()
                                                    ~~~~
BC32110: Constraint 'UInteger' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
    Public Overrides Sub M(Of U1 As Integer, U2 As {UInteger, U1})()
                                                    ~~~~~~~~
BC32110: Constraint 'Enum E' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
    Public Overrides Sub M(Of U1 As Integer, U2 As {E, U1})()
                                                    ~
BC32110: Constraint 'E()' conflicts with the indirect constraint 'Integer()' obtained from the type parameter constraint 'U1'.
    Public Overrides Sub M(Of U1 As Integer(), U2 As {E(), U1})()
                                                      ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32111ERR_ConstraintClashIndirectDirect3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Class C
End Class
Interface IA(Of T As A, U As {T, Structure})
End Interface
Interface IB(Of T1 As A)
    Sub M(Of T2, T3 As {T2, T1, B})()
End Interface
MustInherit Class D(Of T1, T2)
    MustOverride Sub M(Of U As C, V As {U, T1, T2})()
End Class
Class E
    Inherits D(Of A, B)
    Public Overrides Sub M(Of U As C, V As {U, A, B})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            ' Note: Dev10 never seems to generate BC32111. Instead, Dev10 generates
            ' BC32110 in the following cases, which is essentially the same error
            ' with arguments reordered, but with the other constraint highlighted.
            Dim expectedErrors1 = <errors><![CDATA[
BC32111: Indirect constraint 'Class A' obtained from the type parameter constraint 'T' conflicts with the constraint 'Structure'.
Interface IA(Of T As A, U As {T, Structure})
                              ~
BC32111: Indirect constraint 'Class A' obtained from the type parameter constraint 'T1' conflicts with the constraint 'Class B'.
    Sub M(Of T2, T3 As {T2, T1, B})()
                            ~~
BC32111: Indirect constraint 'Class C' obtained from the type parameter constraint 'U' conflicts with the constraint 'Class A'.
    Public Overrides Sub M(Of U As C, V As {U, A, B})()
                                            ~
BC32111: Indirect constraint 'Class C' obtained from the type parameter constraint 'U' conflicts with the constraint 'Class B'.
    Public Overrides Sub M(Of U As C, V As {U, A, B})()
                                            ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32113ERR_ConstraintCycle2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ConstraintCycle2">
        <file name="a.vb"><![CDATA[
Class A(Of T1 As T2, T2 As T3, T3 As T4, T4 As T1)
End Class
Class B
    Sub M(Of T As T)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32113: Type parameter 'T1' cannot be constrained to itself: 
    'T1' is constrained to 'T2'.
    'T2' is constrained to 'T3'.
    'T3' is constrained to 'T4'.
    'T4' is constrained to 'T1'.
Class A(Of T1 As T2, T2 As T3, T3 As T4, T4 As T1)
                                               ~~
BC32113: Type parameter 'T' cannot be constrained to itself: 
    'T' is constrained to 'T'.
    Sub M(Of T As T)()
                  ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32114ERR_TypeParamWithStructConstAsConst()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="TypeParamWithStructConstAsConst">
        <file name="a.vb"><![CDATA[
Interface I
End Interface
Interface IA(Of T As Structure, U As V, V As {T, New})
End Interface
Interface IB
    Sub M(Of T As U, U As {I, V}, V As {I, Structure})()
End Interface
Interface IC(Of T1 As {I, Structure})
    Sub M(Of T2 As T3, T3 As T1)()
End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32114: Type parameter with a 'Structure' constraint cannot be used as a constraint.
Interface IA(Of T As Structure, U As V, V As {T, New})
                                              ~
BC32114: Type parameter with a 'Structure' constraint cannot be used as a constraint.
    Sub M(Of T As U, U As {I, V}, V As {I, Structure})()
                              ~
BC32114: Type parameter with a 'Structure' constraint cannot be used as a constraint.
    Sub M(Of T2 As T3, T3 As T1)()
                             ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32115ERR_NullableDisallowedForStructConstr1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Imports System
            Class C
                Shared Sub M()
                    Dim n1? As Nullable(Of Integer) = New Nullable(Of Nullable(Of Integer))
                    Dim n2 As Nullable(Of Integer)? = New Nullable(Of Integer)?
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
                    Dim n1? As Nullable(Of Integer) = New Nullable(Of Nullable(Of Integer))
                               ~~~~~~~~~~~~~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
                    Dim n1? As Nullable(Of Integer) = New Nullable(Of Nullable(Of Integer))
                                                                      ~~~~~~~~~~~~~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
                    Dim n2 As Nullable(Of Integer)? = New Nullable(Of Integer)?
                              ~~~~~~~~~~~~~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
                    Dim n2 As Nullable(Of Integer)? = New Nullable(Of Integer)?
                                                          ~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32115ERR_NullableDisallowedForStructConstr1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C(Of T As Structure)
    Shared Sub F(Of U As Structure)()
    End Sub
    Shared Sub M()
        Dim o = New C(Of Integer?)()
        F(Of T?)()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
        Dim o = New C(Of Integer?)()
                         ~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'U'. Only non-nullable 'Structure' types are allowed.
        F(Of T?)()
        ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32115ERR_NullableDisallowedForStructConstr1_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class C(Of T As Structure)
    Shared Sub F(Of U As Structure)()
    End Sub
    Shared Function M() As System.Action
        Return AddressOf F(Of T?)
    End Function
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'U'. Only non-nullable 'Structure' types are allowed.
        Return AddressOf F(Of T?)
                         ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32115ERR_NullableDisallowedForStructConstr1_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Structure S
End Structure
MustInherit Class A(Of T)
    Friend MustOverride Sub M(Of U As T)()
End Class
Class B
    Inherits A(Of S?)
    Friend Overrides Sub M(Of U As S?)()
        Dim o1? As U
        Dim o2 As Nullable(Of U) = New Nullable(Of U)
        Dim o3 As U? = New U?
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC42024: Unused local variable: 'o1'.
        Dim o1? As U
            ~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
        Dim o1? As U
                   ~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
        Dim o2 As Nullable(Of U) = New Nullable(Of U)
                              ~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
        Dim o2 As Nullable(Of U) = New Nullable(Of U)
                                                   ~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
        Dim o3 As U? = New U?
                  ~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
        Dim o3 As U? = New U?
                           ~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32117ERR_NoAccessibleNonGeneric1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="NoAccessibleNonGeneric1">
        <file name="a.vb"><![CDATA[
            Module M1
                Dim x As New C1.C2
            End Module

            Public Class C1
                Public Class C2(Of T)
                End Class
                Public Class C2(Of U, V)
                End Class
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32042: Too few type arguments to 'C1.C2(Of T)'.
                Dim x As New C1.C2
                             ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32118ERR_NoAccessibleGeneric1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="NoAccessibleGeneric1">
        <file name="a.vb"><![CDATA[
            Module M1
                Dim x As New C1(Of Object).C2(Of SByte, Byte)
            End Module
            Public Class C1
                Public Class C2(Of T)
                End Class
                Public Class C2(Of U, V)
                End Class
            End Class
            Public Class C1(Of T)
                Public Class C2
                End Class
                Public Class C2(Of X)
                End Class
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32045: 'C1(Of Object).C2' has no type parameters and so cannot have type arguments.
                Dim x As New C1(Of Object).C2(Of SByte, Byte)
                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32119ERR_ConflictingDirectConstraints3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
MustInherit Class A(Of T1, T2, T3)
    MustOverride Sub M(Of U As {T1, T2, T3, Structure})()
End Class
Class B
    Inherits A(Of C1, C2, C3)
    Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
    End Sub
End Class
Class C1
End Class
Class C2
End Class
Class C3
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32119: Constraint 'Class C2' conflicts with the constraint 'Class C1' already specified for type parameter 'U'.
    Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
                                        ~~
BC32119: Constraint 'Class C3' conflicts with the constraint 'Class C1' already specified for type parameter 'U'.
    Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
                                            ~~
BC32119: Constraint 'Structure' conflicts with the constraint 'Class C1' already specified for type parameter 'U'.
    Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
                                                ~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32119ERR_ConflictingDirectConstraints3_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
MustInherit Class C(Of T1, T2)
    MustOverride Sub M(Of U As {T1, T2})()
End Class
Class D
    Inherits C(Of A, B)
    Public Overrides Sub M(Of U As {A, B})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32119: Constraint 'Class B' conflicts with the constraint 'Class A' already specified for type parameter 'U'.
    Public Overrides Sub M(Of U As {A, B})()
                                       ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32119ERR_ConflictingDirectConstraints3_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Enum E
    A
End Enum
MustInherit Class A(Of T, U)
    MustOverride Sub M(Of V As {T, U})()
End Class
Class B0
    Inherits A(Of Integer, Integer)
    Public Overrides Sub M(Of V As {Integer})()
    End Sub
End Class
Class B1
    Inherits A(Of Integer, Object)
    Public Overrides Sub M(Of V As {Integer, Object})()
    End Sub
End Class
Class B2
    Inherits A(Of Integer, Short)
    Public Overrides Sub M(Of V As {Integer, Short})()
    End Sub
End Class
Class B3
    Inherits A(Of Integer, Long)
    Public Overrides Sub M(Of V As {Integer, Long})()
    End Sub
End Class
Class B4
    Inherits A(Of Integer, UInteger)
    Public Overrides Sub M(Of V As {Integer, UInteger})()
    End Sub
End Class
Class B5
    Inherits A(Of Integer, E)
    Public Overrides Sub M(Of V As {Integer, E})()
    End Sub
End Class
Class C0
    Inherits A(Of Object(), Object())
    Public Overrides Sub M(Of V As {Object()})()
    End Sub
End Class
Class C1
    Inherits A(Of Object(), String())
    Public Overrides Sub M(Of V As {Object(), String()})()
    End Sub
End Class
Class C2
    Inherits A(Of Integer(), Integer())
    Public Overrides Sub M(Of V As {Integer()})()
    End Sub
End Class
Class C3
    Inherits A(Of Integer(), E())
    Public Overrides Sub M(Of V As {Integer(), E()})()
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32119: Constraint 'Short' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
    Public Overrides Sub M(Of V As {Integer, Short})()
                                             ~~~~~
BC32119: Constraint 'Long' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
    Public Overrides Sub M(Of V As {Integer, Long})()
                                             ~~~~
BC32119: Constraint 'UInteger' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
    Public Overrides Sub M(Of V As {Integer, UInteger})()
                                             ~~~~~~~~
BC32119: Constraint 'Enum E' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
    Public Overrides Sub M(Of V As {Integer, E})()
                                             ~
BC32119: Constraint 'E()' conflicts with the constraint 'Integer()' already specified for type parameter 'V'.
    Public Overrides Sub M(Of V As {Integer(), E()})()
                                               ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543643, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543643")>
        Public Sub BC32120ERR_InterfaceUnifiesWithInterface2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceUnifiesWithInterface2">
        <file name="a.vb"><![CDATA[
            Public Interface interfaceA(Of u)
            End Interface
            Public Interface derivedInterface(Of t1, t2)
                Inherits interfaceA(Of t1), interfaceA(Of t2)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32120: Cannot inherit interface 'interfaceA(Of t2)' because it could be identical to interface 'interfaceA(Of t1)' for some type arguments.
                Inherits interfaceA(Of t1), interfaceA(Of t2)
                                            ~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(1042692, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1042692")>
        <Fact()>
        Public Sub BC32120ERR_InterfaceUnifiesWithInterface2_SubstituteWithOtherTypeParameter()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface IA(Of T, U)
End Interface
Interface IB(Of T, U)
    Inherits IA(Of U, Object), IA(Of T, U)
End Interface
        ]]></file>
    </compilation>)
            compilation1.AssertTheseDeclarationDiagnostics(
                <errors><![CDATA[
BC32120: Cannot inherit interface 'IA(Of T, U)' because it could be identical to interface 'IA(Of U, Object)' for some type arguments.
    Inherits IA(Of U, Object), IA(Of T, U)
                               ~~~~~~~~~~~
     ]]></errors>)
        End Sub
 
        <Fact(), WorkItem(543726, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543726")>
        Public Sub BC32121ERR_BaseUnifiesWithInterfaces3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BaseUnifiesWithInterfaces3">
        <file name="a.vb"><![CDATA[
            Interface I1(Of T)
                Sub goo(Of G As T)(ByVal x As G)
            End Interface
            Interface I2(Of T)
                Inherits I1(Of T)
            End Interface
            Interface I02(Of T, G)
                Inherits I1(Of T), I2(Of G)    
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32121: Cannot inherit interface 'I2(Of G)' because the interface 'I1(Of G)' from which it inherits could be identical to interface 'I1(Of T)' for some type arguments.
                Inherits I1(Of T), I2(Of G)    
                                   ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543727, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543727")>
        Public Sub BC32122ERR_InterfaceBaseUnifiesWithBase4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceBaseUnifiesWithBase4">
        <file name="a.vb"><![CDATA[
            Public Interface interfaceA(Of u)
            End Interface
            Public Interface interfaceX(Of v)
                Inherits interfaceA(Of v)
            End Interface
            Public Interface interfaceY(Of w)
                Inherits interfaceA(Of w)
            End Interface
            Public Interface derivedInterface(Of t1, t2)
                Inherits interfaceX(Of t1), interfaceY(Of t2)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32122: Cannot inherit interface 'interfaceY(Of t2)' because the interface 'interfaceA(Of t2)' from which it inherits could be identical to interface 'interfaceA(Of t1)' from which the interface 'interfaceX(Of t1)' inherits for some type arguments.
                Inherits interfaceX(Of t1), interfaceY(Of t2)
                                            ~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543729, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543729")>
        Public Sub BC32123ERR_InterfaceUnifiesWithBase3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceUnifiesWithBase3">
        <file name="a.vb"><![CDATA[
            Public Interface interfaceA(Of u)
                Inherits interfaceX(Of u)
            End Interface
            Public Interface interfaceX(Of v)
            End Interface
            Public Interface derivedInterface(Of t1, t2)
                Inherits interfaceA(Of t1), interfaceX(Of t2)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32123: Cannot inherit interface 'interfaceX(Of t2)' because it could be identical to interface 'interfaceX(Of t1)' from which the interface 'interfaceA(Of t1)' inherits for some type arguments.
                Inherits interfaceA(Of t1), interfaceX(Of t2)
                                            ~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543643, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543643")>
        Public Sub BC32072ERR_InterfacePossiblyImplTwice2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfacePossiblyImplTwice2">
        <file name="a.vb"><![CDATA[
            Public Interface interfaceA(Of u)
            End Interface
            Public Class derivedClass(Of t1, t2)
                Implements interfaceA(Of t1), interfaceA(Of t2)
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32072: Cannot implement interface 'interfaceA(Of t2)' because its implementation could conflict with the implementation of another implemented interface 'interfaceA(Of t1)' for some type arguments.
                Implements interfaceA(Of t1), interfaceA(Of t2)
                                              ~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543726, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543726")>
        Public Sub BC32131ERR_ClassInheritsBaseUnifiesWithInterfaces3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ClassInheritsBaseUnifiesWithInterfaces3">
        <file name="a.vb"><![CDATA[
            Interface I1(Of T)
            End Interface
            Interface I2(Of T)
                Inherits I1(Of T)
            End Interface
            Class I02(Of T, G)
                Implements I1(Of T), I2(Of G)    
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32131: Cannot implement interface 'I2(Of G)' because the interface 'I1(Of G)' from which it inherits could be identical to implemented interface 'I1(Of T)' for some type arguments.
                Implements I1(Of T), I2(Of G)    
                                     ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543727, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543727")>
        Public Sub BC32132ERR_ClassInheritsInterfaceBaseUnifiesWithBase4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ClassInheritsInterfaceBaseUnifiesWithBase4">
        <file name="a.vb"><![CDATA[
            Public Interface interfaceA(Of u)
            End Interface
            Public Interface interfaceX(Of v)
                Inherits interfaceA(Of v)
            End Interface
            Public Interface interfaceY(Of w)
                Inherits interfaceA(Of w)
            End Interface
            Public Class derivedClass(Of t1, t2)
                Implements interfaceX(Of t1), interfaceY(Of t2)
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32132: Cannot implement interface 'interfaceY(Of t2)' because the interface 'interfaceA(Of t2)' from which it inherits could be identical to interface 'interfaceA(Of t1)' from which the implemented interface 'interfaceX(Of t1)' inherits for some type arguments.
                Implements interfaceX(Of t1), interfaceY(Of t2)
                                              ~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543729, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543729")>
        Public Sub BC32133ERR_ClassInheritsInterfaceUnifiesWithBase3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ClassInheritsInterfaceUnifiesWithBase3">
        <file name="a.vb"><![CDATA[
            Public Interface interfaceA(Of u)
                Inherits interfaceX(Of u)
            End Interface
            Public Interface interfaceX(Of v)
            End Interface
            Public Class derivedClass(Of t1, t2)
                Implements interfaceA(Of t1), interfaceX(Of t2)
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32133: Cannot implement interface 'interfaceX(Of t2)' because it could be identical to interface 'interfaceX(Of t1)' from which the implemented interface 'interfaceA(Of t1)' inherits for some type arguments.
                Implements interfaceA(Of t1), interfaceX(Of t2)
                                              ~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32125ERR_InterfaceMethodImplsUnify3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InterfaceMethodImplsUnify3">
        <file name="a.vb"><![CDATA[
            Public Interface iFace1(Of t)
                Sub testSub()
            End Interface
            Public Interface iFace2(Of u)
                Inherits iFace1(Of u)
            End Interface
            Public Class testClass(Of y, z)
                Implements iFace1(Of y), iFace2(Of z)
                Public Sub testSuby() Implements iFace1(Of y).testSub
                End Sub
                Public Sub testSubz() Implements iFace1(Of z).testSub
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32131: Cannot implement interface 'iFace2(Of z)' because the interface 'iFace1(Of z)' from which it inherits could be identical to implemented interface 'iFace1(Of y)' for some type arguments.
                Implements iFace1(Of y), iFace2(Of z)
                                         ~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32200ERR_ShadowingTypeOutsideClass1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ShadowingTypeOutsideClass1">
        <file name="a.vb"><![CDATA[
            Public Shadows Class C1
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32200: 'C1' cannot be declared 'Shadows' outside of a class, structure, or interface.
Public Shadows Class C1
                     ~~                                      
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32201ERR_PropertySetParamCollisionWithValue()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PropertySetParamCollisionWithValue">
        <file name="a.vb"><![CDATA[
            Interface IA
                ReadOnly Property Goo(ByVal value As String) As String
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32201: Property parameters cannot have the name 'Value'.
                ReadOnly Property Goo(ByVal value As String) As String
                                            ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32201ERR_PropertySetParamCollisionWithValue_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="PropertySetParamCollisionWithValue">
        <file name="a.vb"><![CDATA[
            Structure S
                Property P(Index, Value)
                    Get
                        Return Nothing
                    End Get
                    Set(value)
                    End Set
                End Property
            End Structure
            Class C
                WriteOnly Property P(value)
                    Set(val)
                    End Set
                End Property
                ReadOnly Property Value(Value)
                    Get
                        Return Nothing
                    End Get
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32201: Property parameters cannot have the name 'Value'.
                Property P(Index, Value)
                                  ~~~~~
BC32201: Property parameters cannot have the name 'Value'.
                WriteOnly Property P(value)
                                     ~~~~~
BC32201: Property parameters cannot have the name 'Value'.
                ReadOnly Property Value(Value)
                                        ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC32205ERR_WithEventsNameTooLong()
            Dim witheventname = New String("A"c, 1020)
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb">
        Option Strict On
        Imports System
 
        Module Program
            ' Declare a WithEvents variable.
            Dim WithEvents <%= witheventname %> As New EventClass
 
            ' Call the method that raises the object's events.
            Sub TestEvents()
                 <%= witheventname %>.RaiseEvents()
            End Sub
 
            ' Declare an event handler that handles multiple events.
            Sub EClass_EventHandler() Handles <%= witheventname %>.XEvent, <%= witheventname %>.YEvent
                Console.WriteLine("Received Event.")
            End Sub
 
            Class EventClass
                Public Event XEvent()
                Public Event YEvent()
                ' RaiseEvents raises both events.
                Sub RaiseEvents()
                    RaiseEvent XEvent()
                    RaiseEvent YEvent()
                End Sub
            End Class
        End Module
        </file>
    </compilation>)
            Dim squiggle As New String("~"c, witheventname.Length())
            Dim expectedErrors1 = <errors>
BC37220: Name 'get_<%= witheventname %>' exceeds the maximum length allowed in metadata.
            Dim WithEvents <%= witheventname %> As New EventClass
                           <%= squiggle %>
BC37220: Name 'set_<%= witheventname %>' exceeds the maximum length allowed in metadata.
            Dim WithEvents <%= witheventname %> As New EventClass
                           <%= squiggle %>
                                  </errors>
            CompilationUtils.AssertNoDeclarationDiagnostics(compilation1)
            CompilationUtils.AssertTheseEmitDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' BC32206ERR_SxSIndirectRefHigherThanDirectRef1: See ReferenceManagerTests.ReferenceBinding_SymbolUsed
        ' BC32208ERR_DuplicateReference2: See ReferenceManagerTests.BC32208ERR_DuplicateReference2
        ' BC32208ERR_DuplicateReference2_2: See ReferenceManagerTests.BC32208ERR_DuplicateReference2_2
 
        <Fact()>
        Public Sub BC32501ERR_ComClassAndReservedAttribute1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ComClassAndReservedAttribute1">
        <file name="a.vb"><![CDATA[
            Imports Microsoft.VisualBasic
            <ComClass("287E43DD-5282-452C-91AF-8F1B34290CA3"), System.Runtime.InteropServices.ComSourceInterfaces(GetType(a), GetType(a))> _
            Public Class c
                Public Sub GOO()
                End Sub
            End Class
            Public Interface a
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32501: 'Microsoft.VisualBasic.ComClassAttribute' and 'ComSourceInterfacesAttribute' cannot both be applied to the same class.
            Public Class c
                         ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32504ERR_ComClassRequiresPublicClass2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ComClassRequiresPublicClass2">
        <file name="a.vb"><![CDATA[
            Imports Microsoft.VisualBasic
            Class C
                Protected Class C1
                    <ComClass()>
                    Class C2
                    End Class
                End Class
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32504: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to 'C2' because its container 'C1' is not declared 'Public'.
                    Class C2
                          ~~
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C2' but 'C2' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
                    Class C2
                          ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32507ERR_ComClassDuplicateGuids1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ComClassDuplicateGuids1">
        <file name="a.vb"><![CDATA[
            Imports Microsoft.VisualBasic
            <ComClass("22904D63-46C2-47b6-97A7-8970D8EC789A", "22904D63-46C2-47b6-97A7-8970D8EC789A", "22904D63-46C2-47b6-97A7-8970D8EC789A")>
            Public Class Class11
                Sub test()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32507: 'InterfaceId' and 'EventsId' parameters for 'Microsoft.VisualBasic.ComClassAttribute' on 'Class11' cannot have the same value.
            Public Class Class11
                         ~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32508ERR_ComClassCantBeAbstract0()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ComClassCantBeAbstract0">
        <file name="a.vb"><![CDATA[
            Imports Microsoft.VisualBasic
            <ComClass()>
            Public MustInherit Class C
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32508: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to a class that is declared 'MustInherit'.
            Public MustInherit Class C
                                     ~
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C' but 'C' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
            Public MustInherit Class C
                                     ~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC32509ERR_ComClassRequiresPublicClass1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ComClassRequiresPublicClass1">
        <file name="a.vb"><![CDATA[
            Imports Microsoft.VisualBasic
            Class C
                <ComClass()>
                Protected Class C1
                End Class
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC32509: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to 'C1' because it is not declared 'Public'.
                Protected Class C1
                                ~~
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C1' but 'C1' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
                Protected Class C1
                                ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC33009ERR_ParamArrayIllegal1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ParamArrayIllegal1">
        <file name="a.vb"><![CDATA[
            Class C1
                Delegate Sub Goo(ByVal ParamArray args() As String)
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC33009: 'Delegate' parameters cannot be declared 'ParamArray'.
                Delegate Sub Goo(ByVal ParamArray args() As String)
                                       ~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC33010ERR_OptionalIllegal1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OptionalIllegal1">
        <file name="a.vb"><![CDATA[
            Class C1
                Event E(Optional ByVal z As String = "")
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC33010: 'Event' parameters cannot be declared 'Optional'.
                Event E(Optional ByVal z As String = "")
                        ~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC33011ERR_OperatorMustBePublic()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OperatorMustBePublic">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Private Shared Operator IsFalse(ByVal z As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
                Public Shared Operator IsTrue(ByVal z As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorMustBePublic, "Private").WithArguments("Private"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33012ERR_OperatorMustBeShared()
 
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OperatorMustBeShared">
        <file name="a.vb"><![CDATA[
            Public Structure S1
               Public Operator IsFalse(ByVal z As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
                Public Shared Operator IsTrue(ByVal z As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorMustBeShared, "IsFalse"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33013ERR_BadOperatorFlags1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BadOperatorFlags1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Overridable Shared Operator IsFalse(ByVal z As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
                Public Shared Operator IsTrue(ByVal z As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadOperatorFlags1, "Overridable").WithArguments("Overridable"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33014ERR_OneParameterRequired1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OneParameterRequired1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Operator IsFalse(ByVal z As S1, ByVal x As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
                Public Shared Operator IsTrue(ByVal z As S1, ByVal x As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
            End Structure

        ]]></file>
    </compilation>).VerifyDiagnostics(
            Diagnostic(ERRID.ERR_OneParameterRequired1, "IsFalse").WithArguments("IsFalse"),
            Diagnostic(ERRID.ERR_OneParameterRequired1, "IsTrue").WithArguments("IsTrue"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33015ERR_TwoParametersRequired1()
 
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="TwoParametersRequired1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
               Public Shared Operator And(ByVal x As S1) As S1
                    Dim r As New S1
                    Return r
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_TwoParametersRequired1, "And").WithArguments("And"))
        End Sub
 
        ' Roslyn extra errors
        <Fact()>
        Public Sub BC33016ERR_OneOrTwoParametersRequired1()
 
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OneOrTwoParametersRequired1">
        <file name="a.vb"><![CDATA[
            Public Class C1
                    Public Shared Operator +
            (ByVal p1 As C1, ByVal p2 As Integer) As Integer
                End Operator
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(
        Diagnostic(ERRID.ERR_ExpectedLparen, ""),
        Diagnostic(ERRID.ERR_ExpectedRparen, ""),
        Diagnostic(ERRID.ERR_Syntax, "("),
        Diagnostic(ERRID.ERR_OneOrTwoParametersRequired1, "+").WithArguments("+"),
        Diagnostic(ERRID.WRN_DefAsgNoRetValOpRef1, "End Operator").WithArguments("+"))
            '            Dim expectedErrors1 = <errors><![CDATA[
            'BC30199: '(' expected.
            '                    Public Shared Operator +
            '                                           ~
            'BC33016: Operator '+' must have either one or two parameters.
            '                    Public Shared Operator +
            '                                           ~
            'BC30035: Syntax error.
            '            (ByVal p1 As C1, ByVal p2 As Integer) As Integer
            '            ~
            '     ]]></errors>
            '            CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC33017ERR_ConvMustBeWideningOrNarrowing()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConvMustBeWideningOrNarrowing">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Operator CType(ByVal x As S1) As Integer
                    Return 1
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConvMustBeWideningOrNarrowing, "CType"))
        End Sub
 
        <Fact()>
        Public Sub BC33019ERR_InvalidSpecifierOnNonConversion1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="InvalidSpecifierOnNonConversion1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Widening Operator And(ByVal x As S1, ByVal y As S1) As Integer
                    Return 1
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidSpecifierOnNonConversion1, "Widening").WithArguments("Widening"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33020ERR_UnaryParamMustBeContainingType1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="UnaryParamMustBeContainingType1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Operator IsTrue(ByVal x As Integer) As Boolean
                    Return 1
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_UnaryParamMustBeContainingType1, "IsTrue").WithArguments("S1"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33021ERR_BinaryParamMustBeContainingType1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BinaryParamMustBeContainingType1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Operator And(ByVal x As Integer, ByVal y As Integer) As Boolean
                    Return 1
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BinaryParamMustBeContainingType1, "And").WithArguments("S1"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33022ERR_ConvParamMustBeContainingType1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConvParamMustBeContainingType1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Widening Operator CType(ByVal x As Integer) As Boolean
                    Return 1
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConvParamMustBeContainingType1, "CType").WithArguments("S1"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33023ERR_OperatorRequiresBoolReturnType1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OperatorRequiresBoolReturnType1">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Operator IsTrue(ByVal x As S1) As Integer
                    Return 1
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorRequiresBoolReturnType1, "IsTrue").WithArguments("IsTrue"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33024ERR_ConversionToSameType()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionToSameType">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Widening Operator CType(ByVal x As S1) As S1
                    Return Nothing
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToSameType, "CType"))
        End Sub
 
        <Fact()>
        Public Sub BC33025ERR_ConversionToInterfaceType()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionToInterfaceType">
        <file name="a.vb"><![CDATA[
            Interface I1
            End Interface
            Public Structure S1
                Public Shared Widening Operator CType(ByVal x As S1) As I1
                    Return Nothing
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(
        Diagnostic(ERRID.ERR_AccessMismatchOutsideAssembly4, "I1").WithArguments("op_Implicit", "I1", "structure", "S1"),
        Diagnostic(ERRID.ERR_ConversionToInterfaceType, "CType"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33026ERR_ConversionToBaseType()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionToBaseType">
        <file name="a.vb"><![CDATA[
            Class C1
            End Class
            Class S1
                Inherits C1
                Public Shared Widening Operator CType(ByVal x As S1) As C1
                    Return Nothing
                End Operator
            End Class	
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToBaseType, "CType"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33027ERR_ConversionToDerivedType()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionToDerivedType">
        <file name="a.vb"><![CDATA[
            Class C1
                Inherits S1
            End Class
            Class S1
                Public Shared Widening Operator CType(ByVal x As S1) As C1
                    Return Nothing
                End Operator
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToDerivedType, "CType"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33028ERR_ConversionToObject()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionToObject">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Public Shared Widening Operator CType(ByVal x As S1) As Object
                    Return Nothing
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToObject, "CType"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33029ERR_ConversionFromInterfaceType()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionFromInterfaceType">
        <file name="a.vb"><![CDATA[
            Interface I1
            End Interface
            Class S1
                Public Shared Widening Operator CType(ByVal x As I1) As S1
                    Return Nothing
                End Operator
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromInterfaceType, "CType"))
        End Sub
 
        <Fact()>
        Public Sub BC33030ERR_ConversionFromBaseType()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionFromBaseType">
        <file name="a.vb"><![CDATA[
            Class C1
            End Class
            Class S1
                Inherits C1
                Public Shared Widening Operator CType(ByVal x As C1) As S1
                    Return Nothing
                End Operator
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromBaseType, "CType"))
        End Sub
 
        <Fact()>
        Public Sub BC33031ERR_ConversionFromDerivedType()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionFromDerivedType">
        <file name="a.vb"><![CDATA[
            Class C1
                Inherits S1
            End Class
            Class S1
                Public Shared Widening Operator CType(ByVal x As C1) As S1
                    Return Nothing
                End Operator
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromDerivedType, "CType"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33032ERR_ConversionFromObject()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ConversionFromObject">
        <file name="a.vb"><![CDATA[
            Class S1
                Public Shared Widening Operator CType(ByVal x As Object) As S1
                    Return Nothing
                End Operator
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromObject, "CType"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33033ERR_MatchingOperatorExpected2()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MatchingOperatorExpected2">
        <file name="a.vb"><![CDATA[
            Public Structure S1
                Dim d As Date
                Public Shared Operator IsFalse(ByVal z As S1) As Boolean
                    Dim b As Boolean
                    Return b
                End Operator
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_MatchingOperatorExpected2, "IsFalse").WithArguments("IsTrue", "Public Shared Operator IsFalse(z As S1) As Boolean"))
        End Sub
 
        <Fact()>
        Public Sub BC33041ERR_OperatorRequiresIntegerParameter1()
            CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OperatorRequiresIntegerParameter1">
        <file name="a.vb"><![CDATA[
            Class S1
                Public Shared Operator >>(ByVal x As S1, ByVal y As String) As S1
                    Return Nothing
                End Operator
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorRequiresIntegerParameter1, ">>").WithArguments(">>"))
 
        End Sub
 
        <Fact()>
        Public Sub BC33101ERR_BadTypeArgForStructConstraintNull()
            Dim compilation1 = CreateCompilationWithMscorlib40(
    <compilation name="BadTypeArgForStructConstraintNull">
        <file name="a.vb"><![CDATA[
Imports System
Interface I
End Interface
Structure S
End Structure
Class A
End Class
Class B(Of T)
    Shared Sub M1(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As T)()
        Dim o? As Object
        Dim s? As S
        Dim _1? As T1
        Dim _2? As T2
        Dim _3? As T3
        Dim _4? As T4
        Dim _5? As T5
        Dim _6? As T6
        Dim _7? As T7
    End Sub
    Shared Sub M2(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As T)()
        Dim o As Nullable(Of Object) = New Nullable(Of Object)
        Dim s As Nullable(Of S) = New Nullable(Of S)
        Dim _1 As Nullable(Of T1) = New Nullable(Of T1)
        Dim _2 As Nullable(Of T2) = New Nullable(Of T2)
        Dim _3 As Nullable(Of T3) = New Nullable(Of T3)
        Dim _4 As Nullable(Of T4) = New Nullable(Of T4)
        Dim _5 As Nullable(Of T5) = New Nullable(Of T5)
        Dim _6 As Nullable(Of T6) = New Nullable(Of T6)
        Dim _7 As Nullable(Of T7) = New Nullable(Of T7)
    End Sub
    Shared Sub M3(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As T)()
        Dim o As Object? = New Object?
        Dim s As S? = New S?
        Dim _1 As T1? = New T1?
        Dim _2 As T2? = New T2?
        Dim _3 As T3? = New T3?
        Dim _4 As T4? = New T4?
        Dim _5 As T5? = New T5?
        Dim _6 As T6? = New T6?
        Dim _7 As T7? = New T7?
    End Sub
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC42024: Unused local variable: 'o'.
        Dim o? As Object
            ~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim o? As Object
            ~~
BC42024: Unused local variable: 's'.
        Dim s? As S
            ~
BC42024: Unused local variable: '_1'.
        Dim _1? As T1
            ~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _1? As T1
            ~~~
BC42024: Unused local variable: '_2'.
        Dim _2? As T2
            ~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _2? As T2
            ~~~
BC42024: Unused local variable: '_3'.
        Dim _3? As T3
            ~~
BC42024: Unused local variable: '_4'.
        Dim _4? As T4
            ~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _4? As T4
            ~~~
BC42024: Unused local variable: '_5'.
        Dim _5? As T5
            ~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _5? As T5
            ~~~
BC42024: Unused local variable: '_6'.
        Dim _6? As T6
            ~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _6? As T6
            ~~~
BC42024: Unused local variable: '_7'.
        Dim _7? As T7
            ~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _7? As T7
            ~~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim o As Nullable(Of Object) = New Nullable(Of Object)
                             ~~~~~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim o As Nullable(Of Object) = New Nullable(Of Object)
                                                       ~~~~~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _1 As Nullable(Of T1) = New Nullable(Of T1)
                              ~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _1 As Nullable(Of T1) = New Nullable(Of T1)
                                                    ~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _2 As Nullable(Of T2) = New Nullable(Of T2)
                              ~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _2 As Nullable(Of T2) = New Nullable(Of T2)
                                                    ~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _4 As Nullable(Of T4) = New Nullable(Of T4)
                              ~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _4 As Nullable(Of T4) = New Nullable(Of T4)
                                                    ~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _5 As Nullable(Of T5) = New Nullable(Of T5)
                              ~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _5 As Nullable(Of T5) = New Nullable(Of T5)
                                                    ~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _6 As Nullable(Of T6) = New Nullable(Of T6)
                              ~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _6 As Nullable(Of T6) = New Nullable(Of T6)
                                                    ~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _7 As Nullable(Of T7) = New Nullable(Of T7)
                              ~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _7 As Nullable(Of T7) = New Nullable(Of T7)
                                                    ~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim o As Object? = New Object?
                 ~~~~~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim o As Object? = New Object?
                               ~~~~~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _1 As T1? = New T1?
                  ~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _1 As T1? = New T1?
                            ~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _2 As T2? = New T2?
                  ~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _2 As T2? = New T2?
                            ~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _4 As T4? = New T4?
                  ~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _4 As T4? = New T4?
                            ~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _5 As T5? = New T5?
                  ~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _5 As T5? = New T5?
                            ~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _6 As T6? = New T6?
                  ~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _6 As T6? = New T6?
                            ~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _7 As T7? = New T7?
                  ~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
        Dim _7 As T7? = New T7?
                            ~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC33102ERR_CantSpecifyArrayAndNullableOnBoth()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantSpecifyArrayAndNullableOnBoth">
        <file name="a.vb"><![CDATA[
            Class S1
                Sub goo()
                    Dim numbers? As Integer()
                    Dim values() As Integer?
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC42024: Unused local variable: 'numbers'.
                    Dim numbers? As Integer()
                        ~~~~~~~
BC33101: Type 'Integer()' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
                    Dim numbers? As Integer()
                        ~~~~~~~~
BC42024: Unused local variable: 'values'.
                    Dim values() As Integer?
                        ~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC33109ERR_CantSpecifyAsNewAndNullable()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CantSpecifyAsNewAndNullable">
        <file name="a.vb"><![CDATA[
            Imports System
            Class C
                Shared Sub M()
                    Dim x? As New Guid()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC33109: Nullable modifier cannot be specified in variable declarations with 'As New'.
                    Dim x? As New Guid()
                           ~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC33112ERR_NullableImplicit()
            Dim expectedErrors As New Dictionary(Of String, XElement) From {
            {"On",
<expected><![CDATA[
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Public field1?()
                           ~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Public field2?(,)
                           ~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Public field3?()()
                           ~~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Public field4?
                           ~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Dim local1?()
                        ~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Dim local2?(,)
                        ~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Dim local3?()()
                        ~~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
                    Dim local4?
                        ~~~~~~~
]]></expected>},
            {"Off",
<expected><![CDATA[
BC36629: Nullable type inference is not supported in this context.
                    Dim local5? = 23 ' this is ok for Option Infer On
                        ~~~~~~~
]]></expected>}}
 
            For Each infer In {"On", "Off"}
                Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
        <compilation name="NullableImplicit">
            <file name="a.vb">
            Option Infer <%= infer %>
            Class C1
                    Public field1?()
                    Public field2?(,)
                    Public field3?()()
                    Public field4?
                    'Public field5? = 23 ' this is _NOT_ ok for Option Infer On, but it gives another diagnostic.
                    Public field6?(1)   ' this is ok for Option Infer On
                    Public field7?(1)() ' this is ok for Option Infer On
 
                Sub goo()
                    Dim local1?()
                    Dim local2?(,)
                    Dim local3?()()
                    Dim local4?
                    Dim local5? = 23 ' this is ok for Option Infer On
                    Dim local6?(1)   ' this is ok for Option Infer On
                    Dim local7?(1)() ' this is ok for Option Infer On
 
                    local1 = nothing
                    local2 = nothing
                    local3 = nothing
                    local4 = nothing
                End Sub
            End Class
        </file>
        </compilation>)
 
                CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors(infer))
            Next
        End Sub
 
        <Fact(), WorkItem(651624, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/651624")>
        Public Sub NestedNullableWithAttemptedConversion()
            Dim comp = CompilationUtils.CreateCompilationWithMscorlib40(
                <compilation>
                    <file name="c.vb">
                    Imports System
                    Class C
                        Public Sub Main()
                            Dim x As Nullable(Of Nullable(Of Integer)) = Nothing
                            Dim y As Nullable(Of Integer) = Nothing
                            Console.WriteLine(x Is Nothing)
                            Console.WriteLine(y Is Nothing)
                            Console.WriteLine(x = y)
                        End Sub
                    End Class
                </file>
                </compilation>)
            CompilationUtils.AssertTheseDiagnostics(comp,
<errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
                            Dim x As Nullable(Of Nullable(Of Integer)) = Nothing
                                                 ~~~~~~~~~~~~~~~~~~~~
BC30452: Operator '=' is not defined for types 'Integer??' and 'Integer?'.
                            Console.WriteLine(x = y)
                                              ~~~~~
]]></errors>)
        End Sub
 
        <Fact()>
        Public Sub BC36015ERR_PropertyNameConflictInMyCollection()
            Dim compilation1 = CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="PropertyNameConflictInMyCollection">
        <file name="a.vb"><![CDATA[
            Module module1
                Public f As New GRBB
            End Module
            <Global.Microsoft.VisualBasic.MyGroupCollection("base", "create", "DisposeI", "Module1.f")> _
            Public NotInheritable Class GRBB
                Private Shared Function Create(Of T As {New, base})(ByVal Instance As T) As T
                    Return Nothing
                End Function
                Private Sub DisposeI(Of T As base)(ByRef Instance As T)
                End Sub
                Public m_derived As Short
            End Class
            Public Class base
                Public i As Integer
            End Class
            Public Class disposei
                Inherits base
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36015: 'Private Sub DisposeI(Of T As base)(ByRef Instance As T)' has the same name as a member used for type 'disposei' exposed in a 'My' group. Rename the type or its enclosing namespace.
            <Global.Microsoft.VisualBasic.MyGroupCollection("base", "create", "DisposeI", "Module1.f")> _
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC36551ERR_ExtensionMethodNotInModule()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
    <compilation name="ExtensionMethodNotInModule">
        <file name="a.vb"><![CDATA[
            Imports System.Runtime.CompilerServices
            Imports System
            Class C1
                <Extension()> _
                Public Sub Print(ByVal str As String)
                End Sub
            End Class
        ]]></file>
    </compilation>, {Net40.References.SystemCore})
 
            Dim expectedErrors1 = <errors><![CDATA[
BC36551: Extension methods can be defined only in modules.
                <Extension()> _
                 ~~~~~~~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC36552ERR_ExtensionMethodNoParams()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
    <compilation name="ExtensionMethodNoParams">
        <file name="a.vb"><![CDATA[
            Imports System.Runtime.CompilerServices
            Module C1
                <Extension()> _
                Public Sub Print()
                End Sub
            End Module
        ]]></file>
    </compilation>, {Net40.References.SystemCore})
            Dim expectedErrors1 = <errors><![CDATA[
BC36552: Extension methods must declare at least one parameter. The first parameter specifies which type to extend.
                Public Sub Print()
                           ~~~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36553ERR_ExtensionMethodOptionalFirstArg()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
   <compilation name="ExtensionMethodOptionalFirstArg">
       <file name="a.vb"><![CDATA[
            Imports System.Runtime.CompilerServices
            Module C1
                <Extension()> _
                Public Sub Print(Optional ByVal str As String = "hello")
                End Sub
            End Module
        ]]></file>
   </compilation>, {Net40.References.SystemCore})
            Dim expectedErrors1 = <errors><![CDATA[
BC36553: 'Optional' cannot be applied to the first parameter of an extension method. The first parameter specifies which type to extend.
                Public Sub Print(Optional ByVal str As String = "hello")
                                                ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC36554ERR_ExtensionMethodParamArrayFirstArg()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
    <compilation name="ExtensionMethodParamArrayFirstArg">
        <file name="a.vb"><![CDATA[
            Imports System.Runtime.CompilerServices
            Module C1
                <Extension()> _
                Public Sub Print(ByVal ParamArray str() As String)
                End Sub
            End Module
        ]]></file>
    </compilation>, {Net40.References.SystemCore})
            Dim expectedErrors1 = <errors><![CDATA[
BC36554: 'ParamArray' cannot be applied to the first parameter of an extension method. The first parameter specifies which type to extend.
                Public Sub Print(ByVal ParamArray str() As String)
                                                  ~~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36561ERR_ExtensionMethodUncallable1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
    <file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Interface I(Of T)
End Interface
Module M
    <Extension()>
    Sub M1(Of T, U As T)(o As T)
    End Sub
    <Extension()>
    Sub M2(Of T As I(Of U), U)(o As T)
    End Sub
    <Extension()>
    Sub M3(Of T, U As T)(o As U)
    End Sub
    <Extension()>
    Sub M4(Of T As I(Of U), U)(o As U)
    End Sub
End Module
]]></file>
</compilation>, {Net40.References.SystemCore})
            Dim expectedErrors1 = <errors><![CDATA[
BC36561: Extension method 'M2' has type constraints that can never be satisfied.
    Sub M2(Of T As I(Of U), U)(o As T)
        ~~
BC36561: Extension method 'M3' has type constraints that can never be satisfied.
    Sub M3(Of T, U As T)(o As U)
        ~~
     ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC36632ERR_NullableParameterMustSpecifyType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="NullableParameterMustSpecifyType">
        <file name="a.vb"><![CDATA[
            Imports System

            Public Module M
                Delegate Sub Del(x?)

                Sub Main()
                    Dim x As Action(Of Integer?) = Sub(y?) Console.WriteLine()
                End Sub

                Sub goo(x?)
                End Sub

                Sub goo2(Of T)(x?)
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36632: Nullable parameters must specify a type.
                Delegate Sub Del(x?)
                                 ~~
BC36632: Nullable parameters must specify a type.
                    Dim x As Action(Of Integer?) = Sub(y?) Console.WriteLine()
                                                       ~~
BC36632: Nullable parameters must specify a type.
                Sub goo(x?)
                        ~~
BC36632: Nullable parameters must specify a type.
                Sub goo2(Of T)(x?)
                               ~~
     ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36634ERR_LambdasCannotHaveAttributes()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="LambdasCannotHaveAttributes">
        <file name="a.vb"><![CDATA[
            Public Module M
                Sub LambdaAttribute()
                    Dim add1 = _
                    Function(<System.Runtime.InteropServices.InAttribute()> m As Integer) _
                                   m + 1
                End Sub
            End Module
        ]]></file>
    </compilation>)
 
            compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_LambdasCannotHaveAttributes, "<System.Runtime.InteropServices.InAttribute()>"))
 
        End Sub
 
        <WorkItem(528712, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528712")>
        <Fact()>
        Public Sub BC36643ERR_CantSpecifyParamsOnLambdaParamNoType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="CantSpecifyParamsOnLambdaParamNoType">
        <file name="a.vb"><![CDATA[
            Imports System
            Public Module M 
                Sub Main()
                    Dim x As Action(Of String()) = Sub(y()) Console.WriteLine()
                End Sub
            End Module
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_CantSpecifyParamsOnLambdaParamNoType, "y()"))
        End Sub
 
        <Fact()>
        Public Sub BC36713ERR_AutoPropertyInitializedInStructure()
            CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AutoPropertyInitializedInStructure">
        <file name="a.vb"><![CDATA[
            Imports System.Collections.Generic 
            Structure S1(Of T As IEnumerable(Of T))
                Property AP() As New T
            End Structure
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AutoPropertyInitializedInStructure, "AP"),
    Diagnostic(ERRID.ERR_NewIfNullOnGenericParam, "T"))
        End Sub
 
        <WorkItem(542471, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542471")>
        <Fact>
        Public Sub BC36713ERR_AutoPropertyInitializedInStructure_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="AutoPropertyInitializedInStructure">
        <file name="a.vb"><![CDATA[
            Structure S1
                Public Property age1() As Integer = 10
                Public Shared Property age2() As Integer = 10
            End Structure

            Module M1
                Public Property age3() As Integer = 10
            End Module

            Class C1
                Public Property age4() As Integer = 10
                Public Shared Property age5() As Integer = 10
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36713: Auto-implemented Properties contained in Structures cannot have initializers unless they are marked 'Shared'.
                Public Property age1() As Integer = 10
                                ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540702, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540702")>
        <Fact>
        Public Sub BC36759ERR_AutoPropertyCantHaveParams()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AutoPropertyInitializedInStructure">
        <file name="a.vb"><![CDATA[
Imports System
Class A
    Public Property Item(index As Integer) As String
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36759: Auto-implemented properties cannot have parameters.
    Public Property Item(index As Integer) As String
                        ~~~~~~~~~~~~~~~~~~
                                  ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540702, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540702")>
        <Fact>
        Public Sub BC36759ERR_AutoPropertyCantHaveParams_MustOverride()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AutoPropertyInitializedInStructure">
        <file name="a.vb"><![CDATA[
Imports System
Class A
    Public MustOverride Property P(index As Integer) As T
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC31411: 'A' must be declared 'MustInherit' because it contains methods declared 'MustOverride'.
Class A
      ~
BC30002: Type 'T' is not defined.
    Public MustOverride Property P(index As Integer) As T
                                                        ~
                                  ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(540702, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540702")>
        <Fact>
        Public Sub BC36759ERR_AutoPropertyCantHaveParams_Default()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="AutoPropertyInitializedInStructure">
        <file name="a.vb"><![CDATA[
Class C
    Default Public Property P(a As Integer) As T
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC30025: Property missing 'End Property'.
    Default Public Property P(a As Integer) As T
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
    Default Public Property P(a As Integer) As T
                            ~
BC30002: Type 'T' is not defined.
    Default Public Property P(a As Integer) As T
                                               ~
                                  ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC36722ERR_VarianceDisallowedHere()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceDisallowedHere">
        <file name="a.vb"><![CDATA[
            Class C1
                Structure Z(Of T, In U, Out V)
                End Structure
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
                Structure Z(Of T, In U, Out V)
                                  ~~
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
                Structure Z(Of T, In U, Out V)
                                        ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36723ERR_VarianceInterfaceNesting()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInterfaceNesting">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Class C : End Class
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36723: Enumerations, classes, and structures cannot be declared in an interface that has an 'In' or 'Out' type parameter.
                Class C : End Class
                      ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36724ERR_VarianceOutParamDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutParamDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub GOO(ByVal x As R(Of Tout))
            End Interface
            Interface R(Of Out T) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36724: Type 'Tout' cannot be used in this context because 'Tout' is an 'Out' type parameter.
                Sub GOO(ByVal x As R(Of Tout))
                                   ~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36725ERR_VarianceInParamDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInParamDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As W(Of Tin))
            End Interface
            Interface W(Of In T) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36725: Type 'Tin' cannot be used in this context because 'Tin' is an 'In' type parameter.
                Sub goo(ByVal x As W(Of Tin))
                                   ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36726ERR_VarianceOutParamDisallowedForGeneric3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutParamDisallowedForGeneric3">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As RW(Of Tout, Tout))
            End Interface
            Interface RW(Of Out T1, In T2) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36726: Type 'Tout' cannot be used for the 'T1' in 'RW(Of T1, T2)' in this context because 'Tout' is an 'Out' type parameter.
                Sub goo(ByVal x As RW(Of Tout, Tout))
                                   ~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36727ERR_VarianceInParamDisallowedForGeneric3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInParamDisallowedForGeneric3">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As RW(Of Tin, Tin))
            End Interface
            Interface RW(Of Out T1, In T2) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36727: Type 'Tin' cannot be used for the 'T2' in 'RW(Of T1, T2)' in this context because 'Tin' is an 'In' type parameter.
                Sub goo(ByVal x As RW(Of Tin, Tin))
                                   ~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36728ERR_VarianceOutParamDisallowedHere2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutParamDisallowedHere2">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As R(Of R(Of Tout)))
            End Interface
            Interface R(Of Out T) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36728: Type 'Tout' cannot be used in 'R(Of Tout)' in this context because 'Tout' is an 'Out' type parameter.
                Sub goo(ByVal x As R(Of R(Of Tout)))
                                   ~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36729ERR_VarianceInParamDisallowedHere2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInParamDisallowedHere2">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As W(Of R(Of Tin)))
            End Interface
            Interface R(Of Out T) : End Interface
            Interface W(Of In T) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36729: Type 'Tin' cannot be used in 'R(Of Tin)' in this context because 'Tin' is an 'In' type parameter.
                Sub goo(ByVal x As W(Of R(Of Tin)))
                                   ~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36730ERR_VarianceOutParamDisallowedHereForGeneric4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutParamDisallowedHereForGeneric4">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As RW(Of RW(Of Tout, Tout), RW(Of Tout, Tin)))
            End Interface
            Interface RW(Of Out T1, In T2) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36730: Type 'Tout' cannot be used for the 'T1' of 'RW(Of T1, T2)' in 'RW(Of Tout, Tout)' in this context because 'Tout' is an 'Out' type parameter.
                Sub goo(ByVal x As RW(Of RW(Of Tout, Tout), RW(Of Tout, Tin)))
                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36731ERR_VarianceInParamDisallowedHereForGeneric4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInParamDisallowedHereForGeneric4">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As RW(Of RW(Of Tin, Tin), RW(Of Tout, Tin)))
            End Interface
            Interface RW(Of Out T1, In T2) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36731: Type 'Tin' cannot be used for the 'T2' of 'RW(Of T1, T2)' in 'RW(Of Tin, Tin)' in this context because 'Tin' is an 'In' type parameter.
                Sub goo(ByVal x As RW(Of RW(Of Tin, Tin), RW(Of Tout, Tin)))
                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36732ERR_VarianceTypeDisallowed2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceTypeDisallowed2">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Interface J : End Interface
                Sub goo(ByVal x As J)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36732: Type 'J' cannot be used in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
                Sub goo(ByVal x As J)
                                   ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36733ERR_VarianceTypeDisallowedForGeneric4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceTypeDisallowedForGeneric4">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Interface J : End Interface
                Sub goo(ByVal x As RW(Of J, Tout))
            End Interface
            Interface RW(Of Out T1, In T2) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36733: Type 'J' cannot be used for the 'T1' in 'RW(Of T1, T2)' in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
                Sub goo(ByVal x As RW(Of J, Tout))
                                   ~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36735ERR_VarianceTypeDisallowedHere3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceTypeDisallowedHere3">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Interface J : End Interface
                Sub goo(ByVal x As R(Of R(Of J)))
            End Interface
            Interface R(Of Out T) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36735: Type 'J' cannot be used in 'R(Of I(Of Tout, Tin, TSout, TSin).J)' in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
                Sub goo(ByVal x As R(Of R(Of J)))
                                   ~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36736ERR_VarianceTypeDisallowedHereForGeneric5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceTypeDisallowedHereForGeneric5">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Interface J : End Interface
                Sub goo(ByVal x As RW(Of RW(Of J, Tout), RW(Of Tout, Tin)))
            End Interface
            Interface RW(Of Out T1, In T2) : End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36736: Type 'J' cannot be used for the 'T1' of 'RW(Of T1, T2)' in 'RW(Of I(Of Tout, Tin, TSout, TSin).J, Tout)' in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
                Sub goo(ByVal x As RW(Of RW(Of J, Tout), RW(Of Tout, Tin)))
                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36738ERR_VariancePreventsSynthesizedEvents2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VariancePreventsSynthesizedEvents2">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Event e()
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36738: Event definitions with parameters are not allowed in an interface such as 'I(Of Tout, Tin, TSout, TSin)' that has 'In' or 'Out' type parameters. Consider declaring the event by using a delegate type which is not defined within 'I(Of Tout, Tin, TSout, TSin)'. For example, 'Event e As Action(Of ...)'.
                Event e()
                ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36740ERR_VarianceOutNullableDisallowed2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutNullableDisallowed2">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Function goo() As TSout?
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36740: Type 'TSout' cannot be used in 'TSout?' because 'In' and 'Out' type parameters cannot be made nullable, and 'TSout' is an 'Out' type parameter.
                Function goo() As TSout?
                                  ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36741ERR_VarianceInNullableDisallowed2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInNullableDisallowed2">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub goo(ByVal x As TSin?)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36741: Type 'TSin' cannot be used in 'TSin?' because 'In' and 'Out' type parameters cannot be made nullable, and 'TSin' is an 'In' type parameter.
                Sub goo(ByVal x As TSin?)
                                   ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36742ERR_VarianceOutByValDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutByValDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface IVariance(Of Out T)
                Sub Goo(ByVal a As T)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36742: Type 'T' cannot be used as a ByVal parameter type because 'T' is an 'Out' type parameter.
                Sub Goo(ByVal a As T)
                                   ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36743ERR_VarianceInReturnDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInReturnDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface IVariance(Of In T)
                Function Goo() As T
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36743: Type 'T' cannot be used as a return type because 'T' is an 'In' type parameter.
                Function Goo() As T
                                  ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36744ERR_VarianceOutConstraintDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutConstraintDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface IVariance(Of Out T)
                Function Goo(Of U As T)() As T
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36744: Type 'T' cannot be used as a generic type constraint because 'T' is an 'Out' type parameter.
                Function Goo(Of U As T)() As T
                                     ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36745ERR_VarianceInReadOnlyPropertyDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInReadOnlyPropertyDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                ReadOnly Property p() As Tin
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36745: Type 'Tin' cannot be used as a ReadOnly property type because 'Tin' is an 'In' type parameter.
                ReadOnly Property p() As Tin
                                         ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36746ERR_VarianceOutWriteOnlyPropertyDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutWriteOnlyPropertyDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                WriteOnly Property p() As Tout
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36746: Type 'Tout' cannot be used as a WriteOnly property type because 'Tout' is an 'Out' type parameter.
                WriteOnly Property p() As Tout
                                          ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36747ERR_VarianceOutPropertyDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutPropertyDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Property p() As Tout
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36747: Type 'Tout' cannot be used as a property type in this context because 'Tout' is an 'Out' type parameter and the property is not marked ReadOnly.
                Property p() As Tout
                                ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36748ERR_VarianceInPropertyDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInPropertyDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Property p() As Tin
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36748: Type 'Tin' cannot be used as a property type in this context because 'Tin' is an 'In' type parameter and the property is not marked WriteOnly.
                Property p() As Tin
                                ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36749ERR_VarianceOutByRefDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceOutByRefDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub f(ByRef x As Tout)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36749: Type 'Tout' cannot be used in this context because 'In' and 'Out' type parameters cannot be used for ByRef parameter types, and 'Tout' is an 'Out' type parameter.
                Sub f(ByRef x As Tout)
                                 ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC36750ERR_VarianceInByRefDisallowed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="VarianceInByRefDisallowed1">
        <file name="a.vb"><![CDATA[
            Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
                Sub f(ByRef x As Tin)
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36750: Type 'Tin' cannot be used in this context because 'In' and 'Out' type parameters cannot be used for ByRef parameter types, and 'Tin' is an 'In' type parameter.
                Sub f(ByRef x As Tin)
                                 ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC36917ERR_OverloadsModifierInModule()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OverloadsModifierInModule">
        <file name="a.vb"><![CDATA[
            Module M1
                Overloads Function goo(x as integer) as double
                    return nothing
                End Function
                Overloads Function goo(ByVal x As Long) As Double
                    Return Nothing
                End Function
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC36917: Inappropriate use of 'Overloads' keyword in a module.
                Overloads Function goo(x as integer) as double
                ~~~~~~~~~
BC36917: Inappropriate use of 'Overloads' keyword in a module.
                Overloads Function goo(ByVal x As Long) As Double
                ~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' Old name"MethodErrorsOverloadsInModule"
        <Fact>
        Public Sub BC36917ERR_OverloadsModifierInModule_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
    <file name="a.vb"><![CDATA[
Module M
    Overloads Sub S()
    End Sub
    Overloads Property P
End Module
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC36917: Inappropriate use of 'Overloads' keyword in a module.
    Overloads Sub S()
    ~~~~~~~~~
BC36917: Inappropriate use of 'Overloads' keyword in a module.
    Overloads Property P
    ~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
#End Region
 
#Region "Targeted Warning Tests"
 
        <Fact>
        Public Sub BC40000WRN_UseOfObsoleteSymbol2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="UseOfObsoleteSymbol2">
        <file name="a.vb"><![CDATA[
            Imports System.Net
            Module Module1
                Sub Main()
                    Dim RemoteEndPoint As EndPoint = Nothing
                    Dim x As Long
                    x = CType(CType(RemoteEndPoint, IPEndPoint).Address.Address Mod 256, Byte)
                End Sub
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40000: 'Public Overloads Property Address As Long' is obsolete: 'This property has been deprecated. It is address family dependent. Please use IPAddress.Equals method to perform comparisons. http://go.microsoft.com/fwlink/?linkid=14202'.
                    x = CType(CType(RemoteEndPoint, IPEndPoint).Address.Address Mod 256, Byte)
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40003WRN_MustOverloadBase4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustOverloadBase4">
        <file name="a.vb"><![CDATA[
            Interface I
                Sub S()
            End Interface
            Class C1
                Implements I
                Public Sub S() Implements I.S
                End Sub
            End Class
            Class C2
                Inherits C1
                Public Sub S()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40003: sub 'S' shadows an overloadable member declared in the base class 'C1'.  If you want to overload the base method, this method must be declared 'Overloads'.
                Public Sub S()
                           ~
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40004WRN_OverrideType5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="OverrideType5">
        <file name="a.vb"><![CDATA[
            Public Class Base
                Public i As Integer = 10
            End Class
            Public Class C1
                Inherits Base
                Public i As String = "hi"
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40004: variable 'i' conflicts with variable 'i' in the base class 'Base' and should be declared 'Shadows'.
                Public i As String = "hi"
                       ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40005WRN_MustOverride2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustOverride2">
        <file name="a.vb"><![CDATA[
            Class C1
                Overridable ReadOnly Property Goo(ByVal x As Integer) As Integer
                    Get
                        Return 1
                    End Get
                End Property
            End Class
            Class C2
                Inherits C1
                ReadOnly Property Goo(ByVal x As Integer) As Integer
                    Get
                        Return 1
                    End Get
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40005: property 'Goo' shadows an overridable method in the base class 'C1'. To override the base method, this method must be declared 'Overrides'.
                ReadOnly Property Goo(ByVal x As Integer) As Integer
                                  ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(543734, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543734")>
        <WorkItem(561748, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/561748")>
        <Fact>
        Public Sub BC40007WRN_DefaultnessShadowed4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Namespace N1
    Class base
        Default Public ReadOnly Property Item(ByVal i As Integer) As Integer
            Get
                Return i
            End Get
        End Property
    End Class
    Class base2
        Inherits base
    End Class
    Class derive
        Inherits base
        Default Public Overloads ReadOnly Property Item1(ByVal i As Integer) As Integer
            Get
                Return 2 * i
            End Get
        End Property
    End Class
    Class derive2
        Inherits base2
        Default Public Overloads ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
            Get
                Return 2 * i
            End Get
        End Property
    End Class
End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40007: Default property 'Item1' conflicts with the default property 'Item' in the base class 'base'. 'Item1' will be the default property. 'Item1' should be declared 'Shadows'.
        Default Public Overloads ReadOnly Property Item1(ByVal i As Integer) As Integer
                                                   ~~~~~
BC40007: Default property 'Item3' conflicts with the default property 'Item' in the base class 'base'. 'Item3' will be the default property. 'Item3' should be declared 'Shadows'.
        Default Public Overloads ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
                                                   ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact, WorkItem(546773, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546773")>
        Public Sub BC40007WRN_DefaultnessShadowed4_NoErrors()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Class Base
    Default Public ReadOnly Property TeamName(ByVal index As Integer) As String
        Get
            Return ""
        End Get
    End Property
End Class
Class Derived
    Inherits Base
    Default Public Shadows ReadOnly Property TeamProject(ByVal index As Integer) As String
        Get
            Return ""
        End Get
    End Property
End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, <errors><![CDATA[]]></errors>)
        End Sub
 
        <Fact, WorkItem(546773, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546773")>
        Public Sub BC40007WRN_DefaultnessShadowed4_TwoErrors()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Class Base
    Default Public ReadOnly Property TeamName(ByVal index As Integer) As String
        Get
            Return ""
        End Get
    End Property
End Class
Class Derived
    Inherits Base
    Default Public ReadOnly Property TeamProject(ByVal index As Integer) As String
        Get
            Return ""
        End Get
    End Property
    Default Public ReadOnly Property TeamProject(ByVal index As String) As String
        Get
            Return ""
        End Get
    End Property
End Class
]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40007: Default property 'TeamProject' conflicts with the default property 'TeamName' in the base class 'Base'. 'TeamProject' will be the default property. 'TeamProject' should be declared 'Shadows'.
    Default Public ReadOnly Property TeamProject(ByVal index As Integer) As String
                                     ~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact, WorkItem(546773, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546773")>
        Public Sub BC40007WRN_DefaultnessShadowed4_MixedErrors()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Class Base
    Default Public ReadOnly Property TeamName(ByVal index As Integer) As String
        Get
            Return ""
        End Get
    End Property
End Class
Class Derived
    Inherits Base
    Default Public Shadows ReadOnly Property TeamProject(ByVal index As Integer) As String
        Get
            Return ""
        End Get
    End Property
    Default Public ReadOnly Property TeamProject(ByVal index As String) As String
        Get
            Return ""
        End Get
    End Property
End Class
]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC30695: property 'TeamProject' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
    Default Public ReadOnly Property TeamProject(ByVal index As String) As String
                                     ~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <WorkItem(543734, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543734")>
        <Fact>
        Public Sub BC40007WRN_DefaultnessShadowed4_DifferentCasing()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Imports System
            Namespace N1
                Class base
                    Default Public ReadOnly Property Item(ByVal i As Integer) As Integer
                        Get
                            Return i
                        End Get
                    End Property
                End Class
                Class derive
                    Inherits base
                    Default Public Overloads ReadOnly Property item(ByVal i As Integer, j as Integer) As Integer
                        Get
                            Return 2 * i
                        End Get
                    End Property
                End Class
            End Namespace
        ]]></file>
    </compilation>)
 
            ' Differs only by case, shouldn't have errors.
            Dim expectedErrors1 = <errors><![CDATA[
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(543734, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543734")>
        <WorkItem(561748, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/561748")>
        <Fact>
        Public Sub BC40007WRN_DefaultnessShadowed4_Interface()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports System
Interface base1
End Interface
Interface base2
    Default ReadOnly Property Item2(ByVal i As Integer) As Integer
End Interface
Interface base3
    Inherits base2
End Interface
Interface derive1
    Inherits base1, base2
    Default ReadOnly Property Item1(ByVal i As Integer) As Integer
End Interface
Interface derive2
    Inherits base3
    Default ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40007: Default property 'Item1' conflicts with the default property 'Item2' in the base interface 'base2'. 'Item1' will be the default property. 'Item1' should be declared 'Shadows'.
    Default ReadOnly Property Item1(ByVal i As Integer) As Integer
                              ~~~~~
BC40007: Default property 'Item3' conflicts with the default property 'Item2' in the base interface 'base2'. 'Item3' will be the default property. 'Item3' should be declared 'Shadows'.
    Default ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
                              ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC40011WRN_ComClassNoMembers1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ComClassNoMembers1">
        <file name="a.vb"><![CDATA[
            <Microsoft.VisualBasic.ComClassAttribute()>
            Public Class C1
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C1' but 'C1' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
            Public Class C1
                         ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40012WRN_SynthMemberShadowsMember5_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        MustInherit Class A
            Public Sub get_P()
            End Sub
            Public Sub set_P()
            End Sub
            Public Function get_Q()
                Return Nothing
            End Function
            Public Sub set_Q()
            End Sub
            Public Function get_R(value)
                Return Nothing
            End Function
            Public Sub set_R(value)
            End Sub
            Public Function get_S()
                Return Nothing
            End Function
            Public Function set_S()
                Return Nothing
            End Function
            Public get_T
            Public Interface set_T
            End Interface
            Public Enum get_U
                A
            End Enum
            Public Structure set_U
            End Structure
        End Class
        MustInherit Class B
            Inherits A
            Public Property P
            Public ReadOnly Property Q
                Get
                    Return Nothing
                End Get
            End Property
            Friend WriteOnly Property R
                Set(value)
                End Set
            End Property
            Protected MustOverride Property S
            Public Property T
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            Public Property U
        End Class
        MustInherit Class C
            Inherits A
            Public Shadows Property P
            Public Shadows ReadOnly Property Q
                Get
                    Return Nothing
                End Get
            End Property
            Friend Shadows WriteOnly Property R
                Set(value)
                End Set
            End Property
            Protected MustOverride Shadows Property S
            Public Shadows Property T
                Get
                    Return Nothing
                End Get
                Set(value)
                End Set
            End Property
            Public Shadows Property U
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40012: property 'P' implicitly declares 'get_P', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property P
                            ~
BC40012: property 'P' implicitly declares 'set_P', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property P
                            ~
BC40012: property 'Q' implicitly declares 'get_Q', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public ReadOnly Property Q
                                     ~
BC40012: property 'R' implicitly declares 'set_R', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Friend WriteOnly Property R
                                      ~
BC40012: property 'S' implicitly declares 'get_S', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Protected MustOverride Property S
                                            ~
BC40012: property 'S' implicitly declares 'set_S', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Protected MustOverride Property S
                                            ~
BC40012: property 'T' implicitly declares 'get_T', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property T
                            ~
BC40012: property 'T' implicitly declares 'set_T', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property T
                            ~
BC40012: property 'U' implicitly declares 'get_U', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property U
                            ~
BC40012: property 'U' implicitly declares 'set_U', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property U
                            ~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(541355, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541355")>
        <Fact>
        Public Sub BC40012WRN_SynthMemberShadowsMember5_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        MustInherit Class A
            Private _P1
            Protected _P2
            Friend _P3
            Public Sub _Q1()
            End Sub
            Public Interface _Q2
            End Interface
            Public Enum _Q3
                A
            End Enum
            Public _R1
            Public _R2
            Public _R3
            Public _R4
        End Class
        MustInherit Class B
            Inherits A
            Friend Property P1
            Protected Property P2
            Private Property P3
            Public Property Q1
            Public Property Q2
            Public Property Q3
            Public ReadOnly Property R1
                Get
                    Return Nothing
                End Get
            End Property
            Public WriteOnly Property R2
                Set(value)
                End Set
            End Property
            Public MustOverride Property R3
            Public Property R4
        End Class
        MustInherit Class C
            Inherits A
            Friend Shadows Property P1
            Protected Shadows Property P2
            Private Shadows Property P3
            Public Shadows Property Q1
            Public Shadows Property Q2
            Public Shadows Property Q3
            Public Shadows ReadOnly Property R1
                Get
                    Return Nothing
                End Get
            End Property
            Public Shadows WriteOnly Property R2
                Set(value)
                End Set
            End Property
            Public MustOverride Shadows Property R3
            Public Shadows Property R4
        End Class
        MustInherit Class D
            Friend Property P1
            Protected Property P2
            Private Property P3
            Public Property Q1
            Public Property Q2
            Public Property Q3
            Public ReadOnly Property R1
                Get
                    Return Nothing
                End Get
            End Property
            Public WriteOnly Property R2
                Set(value)
                End Set
            End Property
            Public MustOverride Property R3
        End Class
        MustInherit Class E
            Inherits D
            Private _P1
            Protected _P2
            Friend _P3
            Public Sub _Q1()
            End Sub
            Public Interface _Q2
            End Interface
            Public Enum _Q3
                A
            End Enum
            Public _R1
            Public _R2
            Public _R3
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40012: property 'P2' implicitly declares '_P2', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Protected Property P2
                               ~~
BC40012: property 'P3' implicitly declares '_P3', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Private Property P3
                             ~~
BC40012: property 'Q1' implicitly declares '_Q1', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property Q1
                            ~~
BC40012: property 'Q2' implicitly declares '_Q2', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property Q2
                            ~~
BC40012: property 'Q3' implicitly declares '_Q3', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property Q3
                            ~~
BC40012: property 'R4' implicitly declares '_R4', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
            Public Property R4
                            ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(539827, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539827")>
        <Fact>
        Public Sub BC40012WRN_SynthMemberShadowsMember5_3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface IA
    Function get_Goo() As String
End Interface
Interface IB
    Inherits IA
    ReadOnly Property Goo() As Integer
End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 =
                <errors><![CDATA[
BC40012: property 'Goo' implicitly declares 'get_Goo', which conflicts with a member in the base interface 'IA', and so the property should be declared 'Shadows'.
    ReadOnly Property Goo() As Integer
                      ~~~
                ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC40012WRN_SynthMemberShadowsMember5_4()
            CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class A
            Public add_E
            Public remove_E
            Public EEvent
            Public EEventHandler
        End Class
        Class B
            Inherits A
            Public Event E()
        End Class
        Class C
            Inherits A
            Public Shadows Event E()
        End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "EEventHandler", "class", "A"),
    Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "EEvent", "class", "A"),
    Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "add_E", "class", "A"),
    Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "remove_E", "class", "A"))
 
        End Sub
 
        <Fact>
        Public Sub BC40014WRN_MemberShadowsSynthMember6()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        MustInherit Class A
            Public Property P
            Public ReadOnly Property Q
                Get
                    Return Nothing
                End Get
            End Property
            Friend WriteOnly Property R
                Set(value)
                End Set
            End Property
            Protected MustOverride Property S
        End Class
        MustInherit Class B
            Inherits A
            Public Sub get_P()
            End Sub
            Public Sub set_P()
            End Sub
            Public Function get_Q()
                Return Nothing
            End Function
            Public Sub set_Q()
            End Sub
            Public Function get_R(value)
                Return Nothing
            End Function
            Public Sub set_R(value)
            End Sub
            Public Function get_S()
                Return Nothing
            End Function
            Public Function set_S()
                Return Nothing
            End Function
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40014: sub 'get_P' conflicts with a member implicitly declared for property 'P' in the base class 'A' and should be declared 'Shadows'.
            Public Sub get_P()
                       ~~~~~
BC40014: sub 'set_P' conflicts with a member implicitly declared for property 'P' in the base class 'A' and should be declared 'Shadows'.
            Public Sub set_P()
                       ~~~~~
BC40014: function 'get_Q' conflicts with a member implicitly declared for property 'Q' in the base class 'A' and should be declared 'Shadows'.
            Public Function get_Q()
                            ~~~~~
BC40014: sub 'set_R' conflicts with a member implicitly declared for property 'R' in the base class 'A' and should be declared 'Shadows'.
            Public Sub set_R(value)
                       ~~~~~
BC40014: function 'get_S' conflicts with a member implicitly declared for property 'S' in the base class 'A' and should be declared 'Shadows'.
            Public Function get_S()
                            ~~~~~
BC40014: function 'set_S' conflicts with a member implicitly declared for property 'S' in the base class 'A' and should be declared 'Shadows'.
            Public Function set_S()
                            ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40019WRN_UseOfObsoletePropertyAccessor3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UseOfObsoletePropertyAccessor3">
        <file name="a.vb"><![CDATA[
            Imports System
            Class C1
                ReadOnly Property p As String
                    <Obsolete("hello", False)>
                    Get
                        Return "hello"
                    End Get
                End Property
            End Class
            Class C2
                Sub goo()
                    Dim s As C1 = New C1()
                    Dim a = s.p
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40019: 'Get' accessor of 'Public ReadOnly Property p As String' is obsolete: 'hello'.
                    Dim a = s.p
                            ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40025WRN_FieldNotCLSCompliant1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="FieldNotCLSCompliant1">
        <file name="a.vb"><![CDATA[
            Imports System
            <Assembly: CLSCompliant(True)> 
<CLSCompliant(True)> Public Class GenCompClass(Of T)
    <CLSCompliant(False)> Public Structure NonCompStruct
        Public a As UInteger
            End Structure
            <CLSCompliant(False)> Class cls1
            End Class
        End Class
        Public Class C(Of t)
            Inherits GenCompClass(Of String)
            Public x As GenCompClass(Of String).cls1
            Public y As GenCompClass(Of String).NonCompStruct
        End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40025: Type of member 'x' is not CLS-compliant.
            Public x As GenCompClass(Of String).cls1
                   ~
BC40025: Type of member 'y' is not CLS-compliant.
            Public y As GenCompClass(Of String).NonCompStruct
                   ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40026WRN_BaseClassNotCLSCompliant2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="BaseClassNotCLSCompliant2">
        <file name="a.vb"><![CDATA[
            Imports System
            <CLSCompliant(True)>
            Public Class MyCompliantClass
                Inherits BASE
            End Class
            Public Class BASE
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40026: 'MyCompliantClass' is not CLS-compliant because it derives from 'BASE', which is not CLS-compliant.
            Public Class MyCompliantClass
                         ~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40027WRN_ProcTypeNotCLSCompliant1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ProcTypeNotCLSCompliant1">
        <file name="a.vb"><![CDATA[
            Imports System
            <CLSCompliant(True)>
            Public Class MyCompliantClass
                Public Function ChangeValue() As UInt32
                    Return Nothing
                End Function
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40027: Return type of function 'ChangeValue' is not CLS-compliant.
                Public Function ChangeValue() As UInt32
                                ~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40028WRN_ParamNotCLSCompliant1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ParamNotCLSCompliant1">
        <file name="a.vb"><![CDATA[
            Imports System
            <CLSCompliant(True)>
            Public Class MyCompliantClass
                Public Sub ChangeValue(ByVal value As UInt32)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40028: Type of parameter 'value' is not CLS-compliant.
                Public Sub ChangeValue(ByVal value As UInt32)
                                             ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40029WRN_InheritedInterfaceNotCLSCompliant2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="InheritedInterfaceNotCLSCompliant2">
        <file name="a.vb"><![CDATA[
            Imports System
            <assembly: clscompliant(true)> 
            <CLSCompliant(False)> Public Interface i1
            End Interface
            Public Interface i2
                Inherits i1
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40029: 'i2' is not CLS-compliant because the interface 'i1' it inherits from is not CLS-compliant.
            Public Interface i2
                             ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40030WRN_CLSMemberInNonCLSType3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="CLSMemberInNonCLSType3">
        <file name="a.vb"><![CDATA[
            Imports System
            Public Module M1
                <CLSCompliant(True)> Class C1
                End Class
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40030: class 'M1.C1' cannot be marked CLS-compliant because its containing type 'M1' is not CLS-compliant.
                <CLSCompliant(True)> Class C1
                                           ~~

                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40031WRN_NameNotCLSCompliant1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NameNotCLSCompliant1">
        <file name="a.vb"><![CDATA[
            Imports System
            <Assembly: CLSCompliant(True)> 
            Namespace _NS
            End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40031: Name '_NS' is not CLS-compliant.
            Namespace _NS
                      ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40032WRN_EnumUnderlyingTypeNotCLS1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EnumUnderlyingTypeNotCLS1">
        <file name="a.vb"><![CDATA[
            <Assembly: System.CLSCompliant(True)>
            Public Class c1
                Public Enum COLORS As UInteger
                    RED
                    GREEN
                    BLUE
                End Enum
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40032: Underlying type 'UInteger' of Enum is not CLS-compliant.
                Public Enum COLORS As UInteger
                            ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40033WRN_NonCLSMemberInCLSInterface1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NonCLSMemberInCLSInterface1">
        <file name="a.vb"><![CDATA[
            Imports System
            <CLSCompliant(True)> Public Interface IFace
                <CLSCompliant(False)> Property Prop1() As Long
                <CLSCompliant(False)> Function F2() As Integer
                <CLSCompliant(False)> Event EV3(ByVal i3 As Integer)
                <CLSCompliant(False)> Sub Sub4()
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40033: Non CLS-compliant 'Property Prop1 As Long' is not allowed in a CLS-compliant interface.
                <CLSCompliant(False)> Property Prop1() As Long
                                               ~~~~~
BC40033: Non CLS-compliant 'Function F2() As Integer' is not allowed in a CLS-compliant interface.
                <CLSCompliant(False)> Function F2() As Integer
                                               ~~
BC40033: Non CLS-compliant 'Event EV3(i3 As Integer)' is not allowed in a CLS-compliant interface.
                <CLSCompliant(False)> Event EV3(ByVal i3 As Integer)
                                            ~~~
BC40033: Non CLS-compliant 'Sub Sub4()' is not allowed in a CLS-compliant interface.
                <CLSCompliant(False)> Sub Sub4()
                                          ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40034WRN_NonCLSMustOverrideInCLSType1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NonCLSMustOverrideInCLSType1">
        <file name="a.vb"><![CDATA[
            Imports System
            <CLSCompliant(True)> Public MustInherit Class QuiteCompliant
                <CLSCompliant(False)> Public MustOverride Sub Sub1()
                <CLSCompliant(False)> Protected MustOverride Function Fun2() As Integer
                <CLSCompliant(False)> Protected Friend MustOverride Sub Sub3()
                <CLSCompliant(False)> Friend MustOverride Function Fun4(ByVal x As Long) As Long
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40034: Non CLS-compliant 'MustOverride' member is not allowed in CLS-compliant type 'QuiteCompliant'.
                <CLSCompliant(False)> Public MustOverride Sub Sub1()
                                                              ~~~~
BC40034: Non CLS-compliant 'MustOverride' member is not allowed in CLS-compliant type 'QuiteCompliant'.
                <CLSCompliant(False)> Protected MustOverride Function Fun2() As Integer
                                                                      ~~~~
BC40034: Non CLS-compliant 'MustOverride' member is not allowed in CLS-compliant type 'QuiteCompliant'.
                <CLSCompliant(False)> Protected Friend MustOverride Sub Sub3()
                                                                        ~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40035WRN_ArrayOverloadsNonCLS2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ArrayOverloadsNonCLS2">
        <file name="a.vb"><![CDATA[
            Imports System
            <CLSCompliant(True)>
            Public MustInherit Class QuiteCompliant
                Public Sub goo(Of t)(ByVal p1()()() As Integer)
                End Sub
                Public Sub goo(Of t)(ByVal p1()()()()() As Integer)
                End Sub
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40035: 'Public Sub goo(Of t)(p1 As Integer()()()()())' is not CLS-compliant because it overloads 'Public Sub goo(Of t)(p1 As Integer()()())' which differs from it only by array of array parameter types or by the rank of the array parameter types.
                Public Sub goo(Of t)(ByVal p1()()()()() As Integer)
                           ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40038WRN_RootNamespaceNotCLSCompliant1()
            Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithRootNamespace("_CLS")
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="RootNamespaceNotCLSCompliant1">
        <file name="a.vb"><![CDATA[
            Imports System
            <Assembly: CLSCompliant(True)> 
            Module M1
            End Module
        ]]></file>
    </compilation>, opt)
            Dim expectedErrors1 = <errors><![CDATA[
BC40038: Root namespace '_CLS' is not CLS-compliant.
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40039WRN_RootNamespaceNotCLSCompliant2()
            Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithRootNamespace("A._B")
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="RootNamespaceNotCLSCompliant2">
        <file name="a.vb"><![CDATA[
            Imports System
            <Assembly: CLSCompliant(True)> 
            Module M1
            End Module
        ]]></file>
    </compilation>, opt)
            Dim expectedErrors1 = <errors><![CDATA[
BC40039: Name '_B' in the root namespace 'A._B' is not CLS-compliant.
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40041WRN_TypeNotCLSCompliant1()
            Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication)
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="TypeNotCLSCompliant1">
        <file name="a.vb"><![CDATA[
            Imports System
            <Assembly: CLSCompliant(True)> 
            <CLSCompliant(True)> Public Class GenCompClass(Of T)
            End Class
            Public Class C(Of t)
                Inherits GenCompClass(Of UInteger)
            End Class
        ]]></file>
    </compilation>, options:=opt)
            Dim expectedErrors1 = <errors><![CDATA[
BC40041: Type 'UInteger' is not CLS-compliant.
            Public Class C(Of t)
                         ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40042WRN_OptionalValueNotCLSCompliant1()
            Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication)
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="OptionalValueNotCLSCompliant1">
        <file name="a.vb"><![CDATA[
            Imports System
            <Assembly: CLSCompliant(True)> 
            Public Module M1
                Public Sub goo(Of t)(Optional ByVal p1 As Object = 3UI)
                End Sub
            End Module
        ]]></file>
    </compilation>, opt)
            Dim expectedErrors1 = <errors><![CDATA[
BC40042: Type of optional value for optional parameter 'p1' is not CLS-compliant.
                Public Sub goo(Of t)(Optional ByVal p1 As Object = 3UI)
                                                    ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40043WRN_CLSAttrInvalidOnGetSet()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CLSAttrInvalidOnGetSet">
        <file name="a.vb"><![CDATA[
            Imports System
            Class C1
                Property PROP As String
                    <CLSCompliant(True)>
                    Get
                        Return Nothing
                    End Get
                    Set(ByVal value As String)
                    End Set
                End Property
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40043: System.CLSCompliantAttribute cannot be applied to property 'Get' or 'Set'.
                    <CLSCompliant(True)>
                     ~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40046WRN_TypeConflictButMerged6()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
            Interface ii
            End Interface
            Structure teststruct
                Implements ii
            End Structure
            Partial Structure teststruct
            End Structure
            Structure teststruct
                Dim a As String
            End Structure
            Partial Interface ii
            End Interface
            Interface ii ' 3
            End Interface

            Module m
            End Module
            Partial Module m
            End Module
            Module m ' 3
            End Module
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40046: interface 'ii' and partial interface 'ii' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Interface ii
          ~~
BC40046: structure 'teststruct' and partial structure 'teststruct' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
            Structure teststruct
                      ~~~~~~~~~~
BC40046: structure 'teststruct' and partial structure 'teststruct' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
            Structure teststruct
                      ~~~~~~~~~~
BC40046: interface 'ii' and partial interface 'ii' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
            Interface ii ' 3
                      ~~
BC40046: module 'm' and partial module 'm' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
            Module m
                   ~
BC40046: module 'm' and partial module 'm' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
            Module m ' 3
                   ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40046WRN_TypeConflictButMerged6_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Namespace N
            Partial Class C
                Private F
            End Class
            Class C ' Warning 1
                Private G
            End Class
            Class C ' Warning 2
                Private H
            End Class
        End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40046: class 'C' and partial class 'C' conflict in namespace 'N', but are being merged because one of them is declared partial.
            Class C ' Warning 1
                  ~
BC40046: class 'C' and partial class 'C' conflict in namespace 'N', but are being merged because one of them is declared partial.
            Class C ' Warning 2
                  ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40048WRN_ShadowingGenericParamWithParam1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ShadowingGenericParamWithParam1">
        <file name="a.vb"><![CDATA[
            Interface I1(Of V)
                Class C1(Of V)
                End Class
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40048: Type parameter 'V' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
                Class C1(Of V)
                            ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact(), WorkItem(543528, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543528")>
        Public Sub BC40048WRN_ShadowingGenericParamWithParam1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ShadowingGenericParamWithParam1">
        <file name="a.vb"><![CDATA[
            Class base(Of T)
                Function TEST(Of T)(ByRef X As T)
                    Return Nothing
                End Function
            End Class
        ]]></file>
    </compilation>).VerifyDiagnostics(Diagnostic(ERRID.WRN_ShadowingGenericParamWithParam1, "T").WithArguments("T"))
 
        End Sub
 
        <Fact>
        Public Sub BC40050WRN_EventDelegateTypeNotCLSCompliant2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="EventDelegateTypeNotCLSCompliant2">
        <file name="a.vb"><![CDATA[
            Imports System
            <Assembly: CLSCompliant(True)> 
            Public Class ETester
                <CLSCompliant(False)> Public Delegate Sub abc(ByVal n As Integer)
                Public Custom Event E As abc
                    AddHandler(ByVal Value As abc)
                    End AddHandler
                    RemoveHandler(ByVal Value As abc)
                    End RemoveHandler
                    RaiseEvent(ByVal n As Integer)
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40050: Delegate type 'ETester.abc' of event 'E' is not CLS-compliant.
                Public Custom Event E As abc
                                    ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40053WRN_CLSEventMethodInNonCLSType3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="CLSEventMethodInNonCLSType3">
        <file name="a.vb"><![CDATA[
            Imports System
            <CLSCompliant(False)> _
            Public Class cls1
                Delegate Sub del1()
                Custom Event e1 As del1
                    AddHandler(ByVal value As del1)
                    End AddHandler
                    <CLSCompliant(True)> _
                    RemoveHandler(ByVal value As del1)
                    End RemoveHandler
                    RaiseEvent()
                    End RaiseEvent
                End Event
            End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40053: 'RemoveHandler' method for event 'e1' cannot be marked CLS compliant because its containing type 'cls1' is not CLS compliant.
                    <CLSCompliant(True)> _
                     ~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(539496, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539496")>
        <Fact>
        Public Sub BC40055WRN_NamespaceCaseMismatch3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NamespaceCaseMismatch3">
        <file name="a.vb"><![CDATA[
            Namespace ns1
            End Namespace

            Namespace Ns1
            End Namespace
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40055: Casing of namespace name 'ns1' does not match casing of namespace name 'Ns1' in 'a.vb'.
Namespace ns1
          ~~~
]]></errors>)
 
            compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NamespaceCaseMismatch3">
        <file name="a.vb"><![CDATA[
                        Namespace ns1
                        End Namespace
                    ]]></file>
        <file name="b.vb"><![CDATA[
                        Namespace Ns1
                        End Namespace
                    ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40055: Casing of namespace name 'ns1' does not match casing of namespace name 'Ns1' in 'b.vb'.
Namespace ns1
          ~~~
]]></errors>)
 
            compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="NamespaceCaseMismatch3">
        <file name="a.vb"><![CDATA[
                        Namespace Ns
                        End Namespace

                        Namespace ns.AB
                        End Namespace

                    ]]></file>
        <file name="b.vb"><![CDATA[
                        Namespace NS.Ab
                        End Namespace

                        Namespace Ns
                            Namespace Ab
                            End Namespace
                        End Namespace
                    ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40055: Casing of namespace name 'Ns' does not match casing of namespace name 'NS' in 'b.vb'.
Namespace Ns
          ~~
BC40055: Casing of namespace name 'Ab' does not match casing of namespace name 'AB' in 'a.vb'.
Namespace NS.Ab
             ~~
]]></errors>)
        End Sub
 
        <WorkItem(545727, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545727")>
        <Fact()>
        Public Sub BC40055_WRN_NamespaceCaseMismatch3_2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                <compilation>
                    <file name="a.vb"><![CDATA[
                                    Namespace Global
                                        Namespace CONSOLEAPPLICATIONVB
                                            Class H
                                            End Class
                                        End Namespace
                                    End Namespace
                                                        ]]></file>
                </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="ConsoleApplicationVB"))
            compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'CONSOLEAPPLICATIONVB' does not match casing of namespace name 'ConsoleApplicationVB' in '<project settings>'.
                                        Namespace CONSOLEAPPLICATIONVB
                                                  ~~~~~~~~~~~~~~~~~~~~
]]></expected>)
 
            ' different casing to see that best name has no influence on error
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                <compilation>
                    <file name="a.vb"><![CDATA[
                                    Namespace Global
                                        Namespace consoleapplicationvb
                                            Class H
                                            End Class
                                        End Namespace
                                    End Namespace
                                                        ]]></file>
                </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="CONSOLEAPPLICATIONVB"))
            compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'consoleapplicationvb' does not match casing of namespace name 'CONSOLEAPPLICATIONVB' in '<project settings>'.
                                        Namespace consoleapplicationvb
                                                  ~~~~~~~~~~~~~~~~~~~~
]]></expected>)
 
            ' passing nested ns to rootnamespace
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                            <compilation>
                                <file name="a.vb"><![CDATA[
                        Namespace Global
                            Namespace GOO
                                Namespace BAR
                                    Class H
                                    End Class
                                End Namespace    
                            End Namespace
                        End Namespace
                                            ]]></file>
                            </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="GOO.bar"))
            compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'BAR' does not match casing of namespace name 'bar' in '<project settings>'.
                                Namespace BAR
                                          ~~~
]]></expected>)
 
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                            <compilation>
                                <file name="a.vb"><![CDATA[
                        Namespace Global
                            Namespace GOO
                                Namespace bar
                                    Class H
                                    End Class
                                End Namespace    
                            End Namespace
                        End Namespace
                                            ]]></file>
                            </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="GOO.BAR"))
            compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'bar' does not match casing of namespace name 'BAR' in '<project settings>'.
                                Namespace bar
                                          ~~~
]]></expected>)
 
            ' passing nested ns to rootnamespace
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                            <compilation>
                                <file name="a.vb"><![CDATA[
Namespace Global
    Namespace goo
        Namespace BAR
            Class H
            End Class
        End Namespace    
    End Namespace
End Namespace
                    ]]></file>
                            </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="GOO.BAR"))
            compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'goo' does not match casing of namespace name 'GOO' in '<project settings>'.
    Namespace goo
              ~~~
]]></expected>)
 
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                            <compilation>
                                <file name="a.vb"><![CDATA[
Namespace Global
    Namespace GOO
        Namespace BAR
            Class H
            End Class
        End Namespace    
    End Namespace
End Namespace
                    ]]></file>
                            </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="goo.BAR"))
            compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'GOO' does not match casing of namespace name 'goo' in '<project settings>'.
    Namespace GOO
              ~~~
]]></expected>)
 
            ' no warnings if spelling is correct
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                <compilation>
                    <file name="a.vb"><![CDATA[
Namespace Global
    Namespace CONSOLEAPPLICATIONVB
        Class H
        End Class
    End Namespace
End Namespace
                    ]]></file>
                </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="CONSOLEAPPLICATIONVB"))
            compilation.AssertNoErrors()
 
            ' no warnings if no root namespace is given
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                <compilation>
                    <file name="a.vb"><![CDATA[
Namespace Global
    Namespace CONSOLEAPPLICATIONVB
        Class H
        End Class
    End Namespace
End Namespace
                    ]]></file>
                </compilation>)
            compilation.AssertNoErrors()
 
            ' no warnings for global namespace itself
            compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
                <compilation>
                    <file name="a.vb"><![CDATA[
Namespace GLObAl
    Namespace CONSOLEAPPLICATIONVB
        Class H
        End Class
    End Namespace
End Namespace
                    ]]></file>
                </compilation>)
            compilation.AssertNoErrors()
 
        End Sub
 
        <WorkItem(528713, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528713")>
        <Fact>
        Public Sub BC40056WRN_UndefinedOrEmptyNamespaceOrClass1()
            Dim options = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithRootNamespace("BC40056WRN_UndefinedOrEmptyNamespaceOrClass1")
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UndefinedOrEmptyNamespaceOrClass1">
        <file name="a.vb"><![CDATA[
            Imports alias1 = ns1.GenStruct(Of String)
            Structure GenStruct(Of T)
            End Structure
        ]]></file>
    </compilation>,
    options:=options
            )
            Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'ns1.GenStruct' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports alias1 = ns1.GenStruct(Of String)
                 ~~~~~~~~~~~~~~~~~~~~~~~~                                      
                                  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40056WRN_UndefinedOrEmptyNamespaceOrClass1_1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="UndefinedOrEmptyNamespaceOrClass1">
        <file name="a.vb"><![CDATA[
            Imports ns1.GOO
            Namespace ns1
                Module M1
                    Sub GOO()
                    End Sub
                End Module
            End Namespace
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'ns1.GOO' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports ns1.GOO
        ~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40056WRN_UndefinedOrEmptyNamespaceOrClass1_2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UndefinedOrEmptyNamespaceOrClass1">
        <file name="a.vb"><![CDATA[
            Imports Alias2 = System
            Imports N12 = Alias2
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'Alias2' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
            Imports N12 = Alias2
                          ~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC40057WRN_UndefinedOrEmptyProjectNamespaceOrClass1()
            Dim globalImports = GlobalImport.Parse({"Alias2 = System", "N12 = Alias2"})
            Dim options = TestOptions.ReleaseExe.WithGlobalImports(globalImports)
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="UndefinedOrEmpyProjectNamespaceOrClass1">
        <file name="a.vb"><![CDATA[
        ]]></file>
    </compilation>, options:=options)
            Dim expectedErrors1 = <errors><![CDATA[
BC40057: Namespace or type specified in the project-level Imports 'N12 = Alias2' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(545385, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545385")>
        <Fact>
        Public Sub BC41005WRN_MissingAsClauseinOperator()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
            Class D
                Shared Operator +(ByVal x As D) ' BC41005 -> BC42021. "Operator without an 'As' clause; type of Object assumed."
                    Return Nothing
                End Operator
            End Class
        ]]></file>
    </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, optionStrict:=OptionStrict.Custom))
 
            Dim expectedErrors1 = <errors><![CDATA[
BC42021: Operator without an 'As' clause; type of Object assumed.
                Shared Operator +(ByVal x As D) ' BC41005 -> BC42021. "Operator without an 'As' clause; type of Object assumed."
                                ~
                                  ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(528714, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528714"), WorkItem(1070286, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1070286")>
        <Fact()>
        Public Sub BC42000WRN_MustShadowOnMultipleInheritance2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="MustShadowOnMultipleInheritance2">
        <file name="a.vb"><![CDATA[
            Interface I1
                Sub goo(ByVal arg As Integer)
            End Interface
            Interface I2
                Sub goo(ByVal arg As Integer)
            End Interface
            Interface I3
                Inherits I1, I2
                Sub goo()
            End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40003: sub 'goo' shadows an overloadable member declared in the base interface 'I1'.  If you want to overload the base method, this method must be declared 'Overloads'.
                Sub goo()
                    ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact()>
        Public Sub BC42014WRN_IndirectlyImplementedBaseMember5()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="IndirectlyImplementedBaseMember5">
        <file name="a.vb"><![CDATA[
            Interface I1
                Sub goo()
            End Interface
            Interface I2
                Inherits I1
            End Interface
            Class C1
                Implements I1
                Public Sub goo() Implements I1.goo
                End Sub
            End Class
            Class C2
                Inherits C1
                Implements I2
                Public Shadows Sub goo() Implements I1.goo
                End Sub
            End Class
        ]]></file>
    </compilation>)
            ' BC42014 is deprecated
            Dim expectedErrors1 = <errors></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub BC42015WRN_ImplementedBaseMember4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="ImplementedBaseMember4">
        <file name="a.vb"><![CDATA[
            Imports System
            Class c1
                Implements IDisposable
                Public Sub Dispose1() Implements System.IDisposable.Dispose
                End Sub
            End Class
            Class c2
                Inherits c1
                Implements IDisposable
                Public Sub Dispose1() Implements System.IDisposable.Dispose
                End Sub
            End Class
        ]]></file>
    </compilation>)
 
            ' BC42015 is deprecated
            Dim expectedErrors1 = <errors><![CDATA[
BC40003: sub 'Dispose1' shadows an overloadable member declared in the base class 'c1'.  If you want to overload the base method, this method must be declared 'Overloads'.
                Public Sub Dispose1() Implements System.IDisposable.Dispose
                           ~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <WorkItem(539499, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539499")>
        <Fact>
        Public Sub BC42020WRN_ObjectAssumedVar1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MissingAsClauseinVarDecl">
        <file name="a.vb"><![CDATA[
            Module M1
                Sub Main()
                    Dim y() = New Object() {3}
                End Sub

                Public Fld

                Public Function Goo(ByVal x) As Integer
                    Return 1
                End Function
            End Module
        ]]></file>
    </compilation>, TestOptions.ReleaseExe.WithOptionInfer(False).WithOptionStrict(OptionStrict.Custom))
 
            Dim expectedErrors1 = <errors><![CDATA[
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
                    Dim y() = New Object() {3}
                        ~
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
                Public Fld
                       ~~~
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
                Public Function Goo(ByVal x) As Integer
                                          ~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
            compilation1 = compilation1.WithOptions(TestOptions.ReleaseExe.WithOptionInfer(False).WithOptionStrict(OptionStrict.Off))
 
            CompilationUtils.AssertNoErrors(compilation1)
        End Sub
 
        <WorkItem(539499, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539499")>
        <WorkItem(529849, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529849")>
        <Fact()>
        Public Sub BC42020WRN_ObjectAssumedVar1WithStaticLocal()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MissingAsClauseinVarDecl">
        <file name="a.vb"><![CDATA[
            Module M1
                Sub Main()
                    Static x = 3
                End Sub
            End Module
        ]]></file>
    </compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.Custom))
            Dim expectedErrors1 = <errors><![CDATA[
BC42020: Static variable declared without an 'As' clause; type of Object assumed.
                    Static x = 3
                           ~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
            compilation1 = compilation1.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.Off))
 
            CompilationUtils.AssertNoErrors(compilation1)
 
            compilation1 = compilation1.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
 
            CompilationUtils.AssertTheseDiagnostics(compilation1,
<expected><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
                    Static x = 3
                           ~
]]></expected>)
        End Sub
 
        <Fact>
        Public Sub ValidTypeNameAsVariableNameInAssignment()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
      <compilation name="Compilation">
          <file name="a.vb"><![CDATA[
Imports System

Namespace NS
End Namespace

Module Program2
    Sub Main2(args As System.String())
        DateTime = "hello"
        NS = "hello"
    End Sub
End Module
        ]]></file>
      </compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
                <errors><![CDATA[
BC30110: 'Date' is a structure type and cannot be used as an expression.
        DateTime = "hello"
        ~~~~~~~~
BC30112: 'NS' is a namespace and cannot be used as an expression.
        NS = "hello"
        ~~
                ]]></errors>)
        End Sub
 
        <Fact>
        Public Sub BC30209ERR_StrictDisallowImplicitObject()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MissingAsClauseinVarDecl">
        <file name="a.vb"><![CDATA[
            Module M1

                Public Fld

            End Module
        ]]></file>
    </compilation>, TestOptions.ReleaseDll.WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
 
            CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
                Public Fld
                       ~~~
]]></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MissingAsClauseinVarDecl">
        <file name="a.vb"><![CDATA[
            Module M1
                Sub Main()
                    Dim y() = New Object() {3}
                End Sub
            End Module
        ]]></file>
    </compilation>, TestOptions.ReleaseExe.WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
 
            CompilationUtils.AssertTheseDiagnostics(compilation2, <errors/>)
 
            compilation2 = compilation2.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(False).WithOptionStrict(OptionStrict.On))
 
            CompilationUtils.AssertTheseDiagnostics(compilation2,
<errors><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
                    Dim y() = New Object() {3}
                        ~
]]></errors>)
        End Sub
 
        <WorkItem(529849, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529849")>
        <Fact>
        Public Sub BC30209ERR_StrictDisallowImplicitObjectWithStaticLocals()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="BC30209ERR_StrictDisallowImplicitObjectWithStaticLocals">
        <file name="a.vb"><![CDATA[
            Module M1
                Sub Main()
                    Static x = 3
                End Sub
            End Module
        ]]></file>
    </compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
 
            CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
                    Static x = 3
                           ~
]]></errors>)
        End Sub
 
        <WorkItem(539501, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539501")>
        <Fact>
        Public Sub BC42021WRN_ObjectAssumed1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MissingAsClauseinVarDecl">
        <file name="a.vb"><![CDATA[
            Module M1
                Function Func1()
                    Return 3
                End Function

                Sub Main()
                End Sub

                Delegate Function Func2()

                ReadOnly Property Prop3
                    Get
                        Return Nothing
                    End Get
                End Property

            End Module
        ]]></file>
    </compilation>, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.Custom).WithOptionInfer(True))
 
            Dim expectedErrors1 = <errors><![CDATA[
BC42021: Function without an 'As' clause; return type of Object assumed.
                Function Func1()
                         ~~~~~
BC42021: Function without an 'As' clause; return type of Object assumed.
                Delegate Function Func2()
                                  ~~~~~
BC42022: Property without an 'As' clause; type of Object assumed.
                ReadOnly Property Prop3
                                  ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
            compilation1 = compilation1.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionStrict(OptionStrict.Off).WithOptionInfer(True))
            CompilationUtils.AssertNoErrors(compilation1)
        End Sub
 
        <Fact>
        Public Sub BC30210ERR_StrictDisallowsImplicitProc_4()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MissingAsClauseinVarDecl">
        <file name="a.vb"><![CDATA[
            Module M1
                Function Func1()
                    Return 3
                End Function

                Sub Main()
                End Sub

                Delegate Function Func2()

                ReadOnly Property Prop3
                    Get
                        Return Nothing
                    End Get
                End Property
            End Module
        ]]></file>
    </compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionStrict(OptionStrict.On).WithOptionInfer(True))
            Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
                Function Func1()
                         ~~~~~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
                Delegate Function Func2()
                                  ~~~~~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
                ReadOnly Property Prop3
                                  ~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' vbc Module1.vb /target:library /noconfig /optionstrict:custom
        <Fact()>
        Public Sub BC42022WRN_ObjectAssumedProperty1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="ObjectAssumedProperty1">
        <file name="a.vb"><![CDATA[
            Module Module1
                ReadOnly Property p()
                    Get
                        Return 2
                    End Get
                End Property
            End Module
        ]]></file>
    </compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
            Dim expectedErrors1 = <errors><![CDATA[
BC42022: Property without an 'As' clause; type of Object assumed.
                ReadOnly Property p()
                                  ~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' EDMAURER: tested elsewhere
 
        '        <Fact()>
        '        Public Sub BC42102WRN_ComClassPropertySetObject1()
        '            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib(
        '    <compilation name="ComClassPropertySetObject1">
        '       <file name="a.vb"><![CDATA[
        '            Imports Microsoft.VisualBasic
        '            <ComClass()> Public Class Class1
        '                Public WriteOnly Property prop2(ByVal x As String) As Object
        '                    Set(ByVal Value As Object)
        '                    End Set
        '                End Property
        '            End Class
        '        ]]></file>
        '    </compilation>)
        '            Dim expectedErrors1 = <errors><![CDATA[
        'BC42102: 'Public WriteOnly Property prop2(x As String) As Object' cannot be exposed to COM as a property 'Let'. You will not be able to assign non-object values (such as numbers or strings) to this property from Visual Basic 6.0 using a 'Let' statement.
        '                Public WriteOnly Property prop2(ByVal x As String) As Object
        '                                          ~~~~~
        '                 ]]></errors>
        '            CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
        '        End Sub
 
        <Fact()>
        Public Sub BC42309WRN_XMLDocCrefAttributeNotFound1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocCrefAttributeNotFound1">
        <file name="a.vb">
            <![CDATA[
''' <see cref="System.Collections.Generic.List(Of _)"/>
Class E
End Class
]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocCrefAttributeNotFound1">
        <file name="a.vb">
            <![CDATA[
''' <see cref="System.Collections.Generic.List(Of _)"/>
Class E
End Class
]]></file>
    </compilation>, parseOptions:=VisualBasic.VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
            Dim expectedErrors = <errors><![CDATA[
BC42309: XML comment has a tag with a 'cref' attribute 'System.Collections.Generic.List(Of _)' that could not be resolved.
''' <see cref="System.Collections.Generic.List(Of _)"/>
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC42310WRN_XMLMissingFileOrPathAttribute1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLMissingFileOrPathAttribute1">
        <file name="a.vb"><![CDATA[
'''<include/>
Class E
End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLMissingFileOrPathAttribute1">
        <file name="a.vb"><![CDATA[
'''<include/>
Class E
End Class
        ]]></file>
    </compilation>, parseOptions:=VisualBasic.VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
            Dim expectedErrors =
<errors>
    <![CDATA[
BC42310: XML comment tag 'include' must have a 'file' attribute. XML comment will be ignored.
'''<include/>
   ~~~~~~~~~~
BC42310: XML comment tag 'include' must have a 'path' attribute. XML comment will be ignored.
'''<include/>
   ~~~~~~~~~~
]]>
</errors>
            CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC42312WRN_XMLDocWithoutLanguageElement()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocWithoutLanguageElement">
        <file name="a.vb"><![CDATA[
            Class E
                ReadOnly Property quoteForTheDay() As String
                    ''' <summary>
                    Get
                        Return "hello"
                    End Get
                End Property
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocWithoutLanguageElement">
        <file name="a.vb"><![CDATA[
            Class E
                ReadOnly Property quoteForTheDay() As String
                    ''' <summary>
                    Get
                        Return "hello"
                    End Get
                End Property
            End Class
        ]]></file>
    </compilation>, parseOptions:=VisualBasic.VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
 
            CompilationUtils.AssertTheseDiagnostics(compilation2,
<errors>
    <![CDATA[
BC42312: XML documentation comments must precede member or type declarations.
                    ''' <summary>
                       ~~~~~~~~~~~
BC42304: XML documentation parse error: Element is missing an end tag. XML comment will be ignored.
                    ''' <summary>
                        ~~~~~~~~~
BC42304: XML documentation parse error: '>' expected. XML comment will be ignored.
                    ''' <summary>
                                 ~
BC42304: XML documentation parse error: Expected beginning '<' for an XML tag. XML comment will be ignored.
                    ''' <summary>
                                 ~
]]>
</errors>)
        End Sub
 
        <Fact()>
        Public Sub BC42313WRN_XMLDocReturnsOnWriteOnlyProperty()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocReturnsOnWriteOnlyProperty">
        <file name="a.vb"><![CDATA[
            Class E
                ''' <returns></returns>
                WriteOnly  Property quoteForTheDay() As String
                    set
                    End set
                End Property
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocReturnsOnWriteOnlyProperty">
        <file name="a.vb"><![CDATA[
            Class E
                ''' <returns></returns>
                WriteOnly  Property quoteForTheDay() As String
                    set
                    End set
                End Property
            End Class
        ]]></file>
    </compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
            Dim expectedErrors = <errors><![CDATA[
BC42313: XML comment tag 'returns' is not permitted on a 'WriteOnly' Property.
                ''' <returns></returns>
                    ~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC42314WRN_XMLDocOnAPartialType()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="XMLDocOnAPartialType">
        <file name="a.vb"><![CDATA[
            ''' <summary>
            ''' </summary>
            ''' <remarks></remarks>
            partial Class E
            End Class
            ''' <summary>
            ''' </summary>
            ''' <remarks></remarks>
            partial Class E
            End Class

            ''' <summary>
            ''' </summary>
            ''' <remarks></remarks>
            partial Interface I
            End Interface
            ''' <summary>
            ''' </summary>
            ''' <remarks></remarks>
            partial Interface I
            End Interface

            ''' <summary>
            ''' </summary>
            ''' <remarks></remarks>
            partial Module M
            End Module
            ''' <summary>
            ''' </summary>
            ''' <remarks></remarks>
            partial Module M
            End Module
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="XMLDocOnAPartialType">
        <file name="a.vb"><![CDATA[
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Class E
End Class
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Class E
End Class

''' <summary> 3
''' </summary>
''' <remarks></remarks>
partial Interface I
End Interface
''' <summary> 4
''' </summary>
''' <remarks></remarks>
partial Interface I
End Interface

''' <summary> 5
''' </summary>
''' <remarks></remarks>
partial Module M
End Module
''' <summary> 6
''' </summary>
''' <remarks></remarks>
partial Module M
End Module
        ]]></file>
    </compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
            Dim expectedErrors = <errors><![CDATA[
BC42314: XML comment cannot be applied more than once on a partial class. XML comments for this class will be ignored.
''' <summary>
   ~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial class. XML comments for this class will be ignored.
''' <summary>
   ~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial interface. XML comments for this interface will be ignored.
''' <summary> 3
   ~~~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial interface. XML comments for this interface will be ignored.
''' <summary> 4
   ~~~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial module. XML comments for this module will be ignored.
''' <summary> 5
   ~~~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial module. XML comments for this module will be ignored.
''' <summary> 6
   ~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC42317WRN_XMLDocBadGenericParamTag2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocBadGenericParamTag2">
        <file name="a.vb">
            <![CDATA[
Class C1(Of X)
    ''' <typeparam name="X">typeparam E1</typeparam>
    ''' <summary>summary - E1</summary>
    ''' <remarks>remarks - E1</remarks>
    Sub E1(Of T)(ByVal p As X)
    End Sub
End Class
]]>
        </file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocBadGenericParamTag2">
        <file name="a.vb">
            <![CDATA[
Class C1(Of X)
    ''' <typeparam name="X">typeparam E1</typeparam>
    ''' <summary>summary - E1</summary>
    ''' <remarks>remarks - E1</remarks>
    Sub E1(Of T)(ByVal p As X)
    End Sub
End Class
]]>
        </file>
    </compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
            Dim expectedErrors =
<errors>
    <![CDATA[
BC42317: XML comment type parameter 'X' does not match a type parameter on the corresponding 'sub' statement.
    ''' <typeparam name="X">typeparam E1</typeparam>
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]>
</errors>
            CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC42318WRN_XMLDocGenericParamTagWithoutName()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocGenericParamTagWithoutName">
        <file name="a.vb">
            <![CDATA[
Class C1(Of X)
    ''' <typeparam>typeparam E1</typeparam>
    Sub E1(Of T)(ByVal p As X)
    End Sub
End Class
]]>
        </file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocGenericParamTagWithoutName">
        <file name="a.vb">
            <![CDATA[
Class C1(Of X)
    ''' <typeparam>typeparam E1</typeparam>
    Sub E1(Of T)(ByVal p As X)
    End Sub
End Class
]]>
        </file>
    </compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
            Dim expectedErrors =
<errors>
    <![CDATA[
BC42318: XML comment type parameter must have a 'name' attribute.
    ''' <typeparam>typeparam E1</typeparam>
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]>
</errors>
            CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC42319WRN_XMLDocExceptionTagWithoutCRef()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocExceptionTagWithoutCRef">
        <file name="a.vb"><![CDATA[
            Class Myexception
                ''' <exception></exception>
                Sub Test()
                End Sub
            End Class
        ]]></file>
    </compilation>)
            CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation name="XMLDocExceptionTagWithoutCRef">
        <file name="a.vb"><![CDATA[
Class Myexception
    ''' <exception></exception>
    Sub Test()
    End Sub
End Class
        ]]></file>
    </compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
            Dim expectedErrors =
<errors>
    <![CDATA[
BC42319: XML comment exception must have a 'cref' attribute.
    ''' <exception></exception>
        ~~~~~~~~~~~~~~~~~~~~~~~
]]>
</errors>
            CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
        End Sub
 
        <WorkItem(541661, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541661")>
        <Fact()>
        Public Sub BC42333WRN_VarianceDeclarationAmbiguous3()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
    <compilation name="VarianceDeclarationAmbiguous3">
        <file name="a.vb"><![CDATA[
Imports System.Xml.Linq
Imports System.Linq
Module M1
    Class C1
        'COMPILEWARNING : BC42333, "System.Collections.Generic.IEnumerable(Of XDocument)", BC42333, "System.Collections.Generic.IEnumerable(Of XElement)"
        Implements System.Collections.Generic.IEnumerable(Of XDocument), System.Collections.Generic.IEnumerable(Of XElement)
        Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of System.Xml.Linq.XDocument) Implements System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XDocument).GetEnumerator
            Return Nothing
        End Function
        Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator(Of System.Xml.Linq.XElement) Implements System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XElement).GetEnumerator
            Return Nothing
        End Function
        Public Function GetEnumerator2() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
            Return Nothing
        End Function
    End Class
End Module
        ]]></file>
    </compilation>, XmlReferences)
            Dim expectedErrors1 = <errors><![CDATA[
BC42333: Interface 'System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XElement)' is ambiguous with another implemented interface 'System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XDocument)' due to the 'In' and 'Out' parameters in 'Interface IEnumerable(Of Out T)'.
        Implements System.Collections.Generic.IEnumerable(Of XDocument), System.Collections.Generic.IEnumerable(Of XElement)
                                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        ' vbc Module1.vb /target:library /noconfig /optionstrict:custom
        <Fact()>
        Public Sub BC42347WRN_MissingAsClauseinFunction()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation name="MissingAsClauseinFunction">
        <file name="a.vb"><![CDATA[
            Module M1
                Function Goo()
                    Return Nothing
                End Function
            End Module
        ]]></file>
    </compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, optionStrict:=OptionStrict.Custom))
            Dim expectedErrors1 = <errors><![CDATA[
BC42021: Function without an 'As' clause; return type of Object assumed.
                Function Goo()
                         ~~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
#End Region
 
        ' Check that errors are reported for type parameters.
        <Fact>
        Public Sub TypeParameterErrors()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Class X(Of T$)
            End Class
            Partial Class Y(Of T, U)
            End Class
            Class Z(Of T, In U, Out V)
            End Class
            Interface IZ(Of T, In U, Out V)
            End Interface
        ]]></file>
        <file name="b.vb"><![CDATA[
            Partial Class Y(Of T, V)
            End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC32041: Type character cannot be used in a type parameter declaration.
Class X(Of T$)
           ~~
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
            Class Z(Of T, In U, Out V)
                          ~~
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
            Class Z(Of T, In U, Out V)
                                ~~~
BC30931: Type parameter name 'V' does not match the name 'U' of the corresponding type parameter defined on one of the other partial types of 'Y'.
Partial Class Y(Of T, V)
                      ~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        'Check that errors are reported for multiple type arguments
        <Fact>
        Public Sub MultipleTypeArgumentErrors()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Imports System
            Imports System.Collections
            Class G(Of T)
            Dim x As G(Of System.Int64,
                     System.Collections.Hashtable)
            End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC32043: Too many type arguments to 'G(Of T)'.
            Dim x As G(Of System.Int64,
                     ~~~~~~~~~~~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        ' Check that errors are reported for duplicate option statements in a single file.
        <Fact>
        Public Sub BC30225ERR_DuplicateOption1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Option Compare Text
Option Infer On
Option Compare On
    ]]></file>
        <file name="b.vb"><![CDATA[
Option Strict On        
Option Infer On
Option Strict On
Option Explicit
Option Explicit Off
    ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30225: 'Option Compare' statement can only appear once per file.
Option Compare On
~~~~~~~~~~~~~~~
BC30207: 'Option Compare' must be followed by 'Text' or 'Binary'.
Option Compare On
               ~~
BC30225: 'Option Strict' statement can only appear once per file.
Option Strict On
~~~~~~~~~~~~~~~~
BC30225: 'Option Explicit' statement can only appear once per file.
Option Explicit Off
~~~~~~~~~~~~~~~~~~~                                     
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BC31393ERR_ExpressionHasTheTypeWhichIsARestrictedType()
            CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
Module Program
    Sub M(tr As System.TypedReference)
        Dim t = tr.GetType()
    End Sub
End Module
    ]]></file>
    </compilation>).VerifyDiagnostics()
        End Sub
 
        ' Check that errors are reported for import statements in a single file.
        <Fact>
        Public Sub ImportErrors()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports N1(Of String)
Imports A = N1
Imports B = N1
Imports N1.M1
Imports N1.M1
Imports A = N1.N2.C
Imports N3
Imports N1.N2
Imports N1.Gen(Of C)
Imports N1.Gen(Of Integer, String)
Imports System$.Collections%
Imports D$ = System.Collections
Imports N3
Imports System.Cheesecake.Frosting
        ]]></file>
        <file name="b.vb"><![CDATA[
Namespace N1
    Class Gen(Of T)
    End Class
    Module M1
    End Module
End Namespace
Namespace N1.N2
    Class C
    End Class
End Namespace
Namespace N3
    Class D
    End Class
End Namespace
        ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC32045: 'N1' has no type parameters and so cannot have type arguments.
Imports N1(Of String)
        ~~~~~~~~~~~~~
BC31051: Namespace or type 'M1' has already been imported.
Imports N1.M1
        ~~~~~
BC30572: Alias 'A' is already declared.
Imports A = N1.N2.C
        ~
BC30002: Type 'C' is not defined.
Imports N1.Gen(Of C)
                  ~
BC32043: Too many type arguments to 'Gen(Of T)'.
Imports N1.Gen(Of Integer, String)
        ~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30468: Type declaration characters are not valid in this context.
Imports System$.Collections%
        ~~~~~~~
BC30468: Type declaration characters are not valid in this context.
Imports System$.Collections%
                ~~~~~~~~~~~~
BC31398: Type characters are not allowed on Imports aliases.
Imports D$ = System.Collections
        ~~
BC31051: Namespace or type 'N3' has already been imported.
Imports N3
        ~~
BC40056: Namespace or type specified in the Imports 'System.Cheesecake.Frosting' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports System.Cheesecake.Frosting
        ~~~~~~~~~~~~~~~~~~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
        End Sub
 
        ' Check that errors are reported for import statements in a single file.
        <Fact>
        Public Sub ProjectImportErrors()
            Dim diagnostics As ImmutableArray(Of Diagnostic) = Nothing
            Dim globalImports = GlobalImport.Parse({
                    "N1(Of String)",
                    "A = N1",
                    "B = N1",
                    "N1.M1",
                    "N1.M1",
                    "A = N1.N2.C",
                    "N3",
                    "N1.N2",
                    "N1.Gen(Of C)",
                    "N1.Gen(Of Integer, String)",
                    "System$.Collections%",
                    "D$ = System.Collections",
                    "N3",
                    "System.Cheesecake.Frosting"
                    }, diagnostics)
 
            Assert.NotEqual(diagnostics, Nothing)
 
            CompilationUtils.AssertTheseDiagnostics(diagnostics,
<errors><![CDATA[
BC31398: Error in project-level import 'D$ = System.Collections' at 'D$' : Type characters are not allowed on Imports aliases.
]]></errors>)
 
            ' only include the imports with correct syntax:
            Dim options = TestOptions.ReleaseDll.WithGlobalImports(globalImports)
 
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="b.vb"><![CDATA[
Namespace N1
    Class Gen(Of T)
    End Class
    Module M1
    End Module
End Namespace
Namespace N1.N2
    Class C
    End Class
End Namespace
Namespace N3
    Class D
    End Class
End Namespace
        ]]></file>
    </compilation>, options)
 
            Dim expectedErrors = <errors><![CDATA[
BC30002: Error in project-level import 'N1.Gen(Of C)' at 'C' : Type 'C' is not defined.
BC30468: Error in project-level import 'System$.Collections%' at 'Collections%' : Type declaration characters are not valid in this context.
BC30468: Error in project-level import 'System$.Collections%' at 'System$' : Type declaration characters are not valid in this context.
BC30572: Error in project-level import 'A = N1.N2.C' at 'A' : Alias 'A' is already declared.
BC32043: Error in project-level import 'N1.Gen(Of Integer, String)' at 'N1.Gen(Of Integer, String)' : Too many type arguments to 'Gen(Of T)'.
BC32045: Error in project-level import 'N1(Of String)' at 'N1(Of String)' : 'N1' has no type parameters and so cannot have type arguments.
BC40057: Namespace or type specified in the project-level Imports 'System.Cheesecake.Frosting' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub ModifierErrorsInsideNamespace()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[

          Namespace n1
                Shadows Enum e6
                  x
                End Enum

                Private Enum e7
                    x
                End Enum
            End Namespace

            Shadows Enum e8
                x
            End Enum

            Private Enum e9
                x
            End Enum
        ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC32200: 'e6' cannot be declared 'Shadows' outside of a class, structure, or interface.
                Shadows Enum e6
                             ~~
BC31089: Types declared 'Private' must be inside another type.
                Private Enum e7
                             ~~
BC32200: 'e8' cannot be declared 'Shadows' outside of a class, structure, or interface.
            Shadows Enum e8
                         ~~
BC31089: Types declared 'Private' must be inside another type.
            Private Enum e9
                         ~~                                     
                       ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub ModifierErrorsInsideInterface()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface i
    Private Class c1

    End Class

    Shared Class c2

    End Class

    MustInherit Class c3

    End Class

    MustOverride Class c4

    End Class
End Interface
        ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC31070: Class in an interface cannot be declared 'Private'.
    Private Class c1
    ~~~~~~~
BC30461: Classes cannot be declared 'Shared'.
    Shared Class c2
    ~~~~~~
BC30461: Classes cannot be declared 'MustOverride'.
    MustOverride Class c4
    ~~~~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        ' Checks for accessibility across partial types
        <Fact>
        Public Sub ModifierErrorsAcrossPartialTypes()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Partial public Class c1
            End Class

            Partial friend Class c1
            End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30925: Specified access 'Friend' for 'c1' does not match the access 'Public' specified on one of its other partial types.
            Partial friend Class c1
                                 ~~
            ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            NotInheritable class A
            end class

            Partial MustInherit Class A
            End class
          ]]></file>
    </compilation>)
 
            Dim expectedErrors2 = <errors><![CDATA[
BC30926: 'MustInherit' cannot be specified for partial type 'A' because it cannot be combined with 'NotInheritable' specified for one of its other partial types.
            Partial MustInherit Class A
                                      ~

  ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation2, expectedErrors2)
 
        End Sub
 
        ' Checks for missing partial on classes
        <Fact>
        Public Sub ModifierWarningsAcrossPartialTypes()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
            Class cc1
            End Class

            Class cC1
            End Class

            partial Class Cc1
            End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC40046: class 'cc1' and partial class 'Cc1' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Class cc1
      ~~~
BC40046: class 'cC1' and partial class 'Cc1' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
            Class cC1
                  ~~~
  ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class cc1
        End Class

        Class cC1
        End Class

        Class Cc1
        End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors2 = <errors><![CDATA[
BC30179: class 'cC1' and class 'cc1' conflict in namespace '<Default>'.
        Class cC1
              ~~~
BC30179: class 'Cc1' and class 'cc1' conflict in namespace '<Default>'.
        Class Cc1
              ~~~                 
  ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation2, expectedErrors2)
 
        End Sub
 
        <Fact>
        Public Sub ErrorTypeNotDefineType()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
 <compilation name="ErrorType">
     <file name="a.vb"><![CDATA[
Class A
    Dim n As B
End Class
     ]]></file>
 </compilation>)
 
            Dim errs = compilation.GetDeclarationDiagnostics()
            Assert.Equal(1, errs.Length())
            Dim err = DirectCast(errs.Single(), Diagnostic)
            Assert.Equal(DirectCast(ERRID.ERR_UndefinedType1, Integer), err.Code)
 
            Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
            Dim fsym = DirectCast(classA.GetMembers()(1), FieldSymbol)
            Dim sym = fsym.Type
            Assert.Equal(SymbolKind.ErrorType, sym.Kind)
            Assert.Equal("B", sym.Name)
            Assert.Null(sym.ContainingAssembly)
            Assert.Null(sym.ContainingSymbol)
            Assert.Equal(Accessibility.Public, sym.DeclaredAccessibility)
            Assert.False(sym.IsShared)
            Assert.False(sym.IsMustOverride)
            Assert.False(sym.IsNotOverridable)
            Assert.False(sym.IsValueType)
            Assert.True(sym.IsReferenceType)
 
            Assert.Equal(0, sym.Interfaces.Length())
            Assert.Null(sym.BaseType)
            Assert.Equal("B", DirectCast(sym, ErrorTypeSymbol).ConstructedFrom.ToTestDisplayString())
 
            Assert.Equal(0, sym.GetAttributes().Length()) ' Enumerable.Empty<SymbolAttribute>()
            Assert.Equal(0, sym.GetMembers().Length()) ' Enumerable.Empty<Symbol>()
            Assert.Equal(0, sym.GetMembers(String.Empty).Length())
            Assert.Equal(0, sym.GetTypeMembers().Length()) ' Enumerable.Empty<NamedTypeSymbol>()
            Assert.Equal(0, sym.GetTypeMembers(String.Empty).Length())
            Assert.Equal(0, sym.GetTypeMembers(String.Empty, 0).Length())
        End Sub
 
        <WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Public Class X
                        End Class
                    End Class
                    Class B
                        Inherits B.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31447: Class 'B' cannot reference itself in Inherits clause.
                        Inherits B.C.X
                                 ~
]]></errors>)
        End Sub
 
        <WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Public Class X
                        End Class
                    End Class
                    Class B
                        Inherits C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
                        Inherits C.X
                                 ~
]]></errors>)
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass3()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Public Class X
                            Public Class A
                            End Class
                        End Class
                    End Class
                    Class B
                        Inherits B.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31447: Class 'B' cannot reference itself in Inherits clause.
                        Inherits B.C.X
                                 ~
]]></errors>)
 
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass4()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Public Class X
                            Public Class A
                            End Class
                        End Class
                    End Class
                    Class B
                        Inherits C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
                        Inherits C.X
                                 ~
]]></errors>)
 
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass5()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Interface A
                        Class X
                        End Class
                    End Interface
                    Class B
                        Inherits C.X
                        Public Interface C
                            Inherits A
                        End Interface
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
                        Inherits C.X
                                 ~
]]></errors>)
 
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass6()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Class X
                        End Class
                    End Class
                    Class B
                        Inherits C(Of Integer).X
                        Public Class C(Of T)
                            Inherits A
                        End Class 
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C(Of Integer)' in Inherits clause.
                        Inherits C(Of Integer).X
                                 ~~~~~~~~~~~~~
]]></errors>)
 
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass7()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Class X
                            Class A
                            End Class
                        End Class
                    End Class
                    Class B
                        Inherits D.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                    Class D
                        Inherits B.C
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31449: Inherits clause of class 'B' causes cyclic dependency: 
    'B.C' is nested in 'B'.
    Base type of 'B' needs 'B.C' to be resolved.
                        Inherits D.X
                                 ~~~
]]></errors>)
 
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass8()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Class X
                            Class A
                            End Class
                        End Class
                    End Class

                    Class B
                        Inherits D
                        Public Class C
                            Inherits A
                        End Class
                    End Class

                    Class D
                        Inherits B.C.X
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31449: Inherits clause of class 'B.C' causes cyclic dependency: 
    Base type of 'D' needs 'B.C' to be resolved.
    Base type of 'B.C' needs 'D' to be resolved.
                            Inherits A
                                     ~
BC30002: Type 'B.C.X' is not defined.
                        Inherits B.C.X
                                 ~~~~~
]]></errors>)
 
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClass9()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Class X
                            Class A
                            End Class
                        End Class
                    End Class

                    Class B
                        Inherits D.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class

                    Class D
                        Inherits B
                    End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
                        Inherits D.C.X
                                 ~~~
]]></errors>)
 
        End Sub
 
        <Fact>
        Public Sub AccessBaseClassThroughNestedClassA()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
Interface IIndia(Of T)
End Interface

Class Alpha
    Class Bravo
    End Class
End Class

Class Charlie
    Inherits Alpha
    Implements IIndia(Of Charlie.Bravo)
End Class

Class Echo
    Implements IIndia(Of Echo)
End Class

Class Golf
    Implements IIndia(Of Golf.Hotel)
    Class Hotel
    End Class
End Class

Class Juliet
    Implements IIndia(Of Juliet.Kilo.Lima)
    Class Kilo
        Class Lima
        End Class
    End Class
End Class

Class November(Of T)
End Class

Class Oscar
    Inherits November(Of Oscar)
End Class

Class Papa
    Inherits November(Of Papa.Quebec)
    Class Quebec
    End Class
End Class

Class Romeo
    Inherits November(Of Romeo.Sierra.Tango)
    Class Sierra
        Class Tango
        End Class
    End Class
End Class

Class Uniform
    Implements Uniform.IIndigo
    Interface IIndigo
    End Interface
End Class

Interface IBlah
    Inherits Victor.IIdiom
End Interface

Class Victor
    Implements IBlah
    Interface IIdiom
    End Interface
End Class

Class Xray
    Implements Yankee.IIda
    Class Yankee
        Inherits Xray
        Interface IIda
        End Interface
    End Class
End Class

Class Beta
    Inherits Gamma
    Class Gamma
    End Class
End Class

Class Delta
    Inherits Delta.Epsilon
    Class Epsilon
    End Class
End Class

Class Zeta(Of T)
    Inherits Eta(Of Beta)
End Class
Class Eta(Of T)
    Inherits Zeta(Of Delta)
End Class
                ]]></file>
              </compilation>)
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'Beta' cannot reference its nested type 'Beta.Gamma' in Inherits clause.
    Inherits Gamma
             ~~~~~
BC31447: Class 'Delta' cannot reference itself in Inherits clause.
    Inherits Delta.Epsilon
             ~~~~~
BC30257: Class 'Zeta(Of T)' cannot inherit from itself: 
    'Zeta(Of T)' inherits from 'Eta(Of Beta)'.
    'Eta(Of Beta)' inherits from 'Zeta(Of T)'.
    Inherits Eta(Of Beta)
             ~~~~~~~~~~~~
]]></errors>)
 
        End Sub
 
        <WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
        <Fact>
        Public Sub AccessInterfaceThroughNestedClass()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
              <compilation>
                  <file name="a.vb"><![CDATA[
                    Class A
                        Public Interface X
                        End Interface
                    End Class
                    Class B
                        Implements B.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
              </compilation>
            )
            CompilationUtils.AssertNoErrors(compilation)
        End Sub
 
        <WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
        <Fact>
        Public Sub AccessBaseClassThroughNestedClassSemantic_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
            <compilation>
                <file name="a.vb"><![CDATA[
                    Class A
                        Public Class X
                        End Class
                    End Class
                    Class B
                        Inherits B.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
            </compilation>
            )
            '  resolve X from 'Inherits B.C.X' first, then 'Inherits A'
            Dim tree = compilation.SyntaxTrees(0)
            Dim model = compilation.GetSemanticModel(tree)
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
        End Sub
 
        <WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
        <Fact>
        Public Sub AccessBaseClassThroughNestedClassSemantic_2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
            <compilation>
                <file name="a.vb"><![CDATA[
                    Class A
                        Public Class X
                        End Class
                    End Class
                    Class B
                        Inherits B.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
            </compilation>
            )
            '  resolve 'Inherits A', then X from 'Inherits B.C.X' first
            Dim tree = compilation.SyntaxTrees(0)
            Dim model = compilation.GetSemanticModel(tree)
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
        End Sub
 
        <WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
        <Fact>
        Public Sub AccessInterfaceThroughNestedClassSemantic_1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
            <compilation>
                <file name="a.vb"><![CDATA[
                    Class A
                        Public Interface X
                        End Interface
                    End Class
                    Class B
                        Implements B.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
            </compilation>
            )
            '  resolve X from 'Inherits B.C.X' first, then 'Implements A'
            Dim tree = compilation.SyntaxTrees(0)
            Dim model = compilation.GetSemanticModel(tree)
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
        End Sub
 
        <WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
        <Fact>
        Public Sub AccessInterfaceThroughNestedClassSemantic_2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
            <compilation>
                <file name="a.vb"><![CDATA[
                    Class A
                        Public Interface X
                        End Interface
                    End Class
                    Class B
                        Implements B.C.X
                        Public Class C
                            Inherits A
                        End Class
                    End Class
                ]]></file>
            </compilation>
            )
            '  resolve 'Inherits A', then X from 'Implements B.C.X' first
            Dim tree = compilation.SyntaxTrees(0)
            Dim model = compilation.GetSemanticModel(tree)
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
            model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
        End Sub
 
        <Fact>
        Public Sub InterfaceModifierErrors()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
    <file name="a.vb"><![CDATA[
        Static Interface i1
        End Interface

        Static Class c1
        End Class

        Static Structure s1
        End Structure

        Static Enum e1
            dummy
        End Enum

        Static Delegate Sub s()

        Static Module m
        End Module
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30397: 'Static' is not valid on an Interface declaration.
Static Interface i1
~~~~~~
BC30461: Classes cannot be declared 'Static'.
        Static Class c1
        ~~~~~~
BC30395: 'Static' is not valid on a Structure declaration.
        Static Structure s1
        ~~~~~~
BC30396: 'Static' is not valid on an Enum declaration.
        Static Enum e1
        ~~~~~~
BC30385: 'Static' is not valid on a Delegate declaration.
        Static Delegate Sub s()
        ~~~~~~
BC31052: Modules cannot be declared 'Static'.
        Static Module m
        ~~~~~~                                     
                       ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub BaseClassErrors1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
    <file name="1.vb"><![CDATA[
Option Strict On        

Class C1
    Inherits Object, Object
End Class

Class C11
    Inherits System.Exception
    Inherits System.Exception
End Class

Class C2
    Inherits System.Collections.ArrayList, System.Collections.Generic.List(Of Integer)
End Class 

Class C3(Of T)
    Inherits T
End Class

Partial Class C4
    Inherits System.Collections.ArrayList
End Class
NotInheritable Class NI
End class
    ]]></file>
    <file name="a.vb"><![CDATA[
Option Strict Off        
Public Partial Class C4
    Inherits System.Collections.Generic.List(Of Integer)
End Class
Interface I1
End Interface
Class C5
    Inherits I1
End Class
Class C6
    Inherits System.Guid
End Class
Class C7
    Inherits NI
End Class
Class C8
    Inherits System.Delegate
End Class
Module M1
    Inherits System.Object
End Module
Structure S1
    Inherits System.Collections.Hashtable
End Structure
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
    Inherits Object, Object
    ~~~~~~~~~~~~~~~~~~~~~~~
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
    Inherits System.Exception
    ~~~~~~~~~~~~~~~~~~~~~~~~~
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
    Inherits System.Collections.ArrayList, System.Collections.Generic.List(Of Integer)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32055: Class 'C3' cannot inherit from a type parameter.
    Inherits T
             ~
BC30928: Base class 'List(Of Integer)' specified for class 'C4' cannot be different from the base class 'ArrayList' of one of its other partial types.
    Inherits System.Collections.Generic.List(Of Integer)
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30258: Classes can inherit only from other classes.
    Inherits I1
             ~~
BC30258: Classes can inherit only from other classes.
    Inherits System.Guid
             ~~~~~~~~~~~
BC30299: 'C7' cannot inherit from class 'NI' because 'NI' is declared 'NotInheritable'.
    Inherits NI
             ~~
BC30015: Inheriting from '[Delegate]' is not valid.
    Inherits System.Delegate
             ~~~~~~~~~~~~~~~
BC30230: 'Inherits' not valid in Modules.
    Inherits System.Object
    ~~~~~~~~~~~~~~~~~~~~~~
BC30628: Structures cannot have 'Inherits' statements.
    Inherits System.Collections.Hashtable
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BaseClassErrors2a()
 
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class B(Of T)
    Class Inner
    End Class
End Class

Class D1
    Inherits B(Of Integer)
    Dim x As B(Of D1.Inner)
End Class

Class D2
    Inherits B(Of D2.Inner)
End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30002: Type 'D2.Inner' is not defined.
    Inherits B(Of D2.Inner)
                  ~~~~~~~~
]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact()>
        Public Sub BaseClassErrors2b()
 
            ' There is a race known in base type detection
            For i = 0 To 50
                Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="b.vb"><![CDATA[
Class XB(Of T)
    Class Inner2
    End Class
End Class

Class XC
    Inherits XB(Of XD.Inner2)
End Class

Class XD
    Inherits XB(Of XC.Inner2)
End Class
        ]]></file>
    </compilation>)
 
                CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31449: Inherits clause of class 'XC' causes cyclic dependency: 
    Base type of 'XD' needs 'XC' to be resolved.
    Base type of 'XC' needs 'XD' to be resolved.
    Inherits XB(Of XD.Inner2)
             ~~~~~~~~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
    Inherits XB(Of XC.Inner2)
                   ~~~~~~~~~
]]></errors>)
            Next
        End Sub
 
        <Fact()>
        Public Sub BaseClassErrors2c()
 
            ' There is a race known in base type detection
            For i = 0 To 50
                Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="b.vb"><![CDATA[
Class XB(Of T)
    Class Inner2
    End Class
End Class

Class X0
    Inherits XB(Of X1.Inner2)
End Class

Class X1
    Inherits XB(Of X2.Inner2)
End Class

Class X2
    Inherits XB(Of X3.Inner2)
End Class

Class X3
    Inherits XB(Of X4.Inner2)
End Class

Class X4
    Inherits XB(Of X5.Inner2)
End Class

Class X5
    Inherits XB(Of X6.Inner2)
End Class

Class X6
    Inherits XB(Of X7.Inner2)
End Class

Class X7
    Inherits XB(Of X8.Inner2)
End Class

Class X8
    Inherits XB(Of X9.Inner2)
End Class

Class X9
    Inherits XB(Of X0.Inner2)
End Class
        ]]></file>
    </compilation>)
 
                Dim expectedErrors = <errors><![CDATA[
BC31449: Inherits clause of class 'X0' causes cyclic dependency: 
    Base type of 'X1' needs 'X2' to be resolved.
    Base type of 'X2' needs 'X3' to be resolved.
    Base type of 'X3' needs 'X4' to be resolved.
    Base type of 'X4' needs 'X5' to be resolved.
    Base type of 'X5' needs 'X6' to be resolved.
    Base type of 'X6' needs 'X7' to be resolved.
    Base type of 'X7' needs 'X8' to be resolved.
    Base type of 'X8' needs 'X9' to be resolved.
    Base type of 'X9' needs 'X0' to be resolved.
    Base type of 'X0' needs 'X1' to be resolved.
    Inherits XB(Of X1.Inner2)
             ~~~~~~~~~~~~~~~~
BC30002: Type 'X0.Inner2' is not defined.
    Inherits XB(Of X0.Inner2)
                   ~~~~~~~~~
                                     ]]></errors>
 
                CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
            Next
        End Sub
 
        <Fact()>
        Public Sub BaseClassErrors2d()
 
            ' There is a race known in base type detection
            For i = 0 To 50
                Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="b.vb"><![CDATA[
Class XB(Of T)
    Class Inner2
    End Class
End Class

Class X0
    Inherits XB(Of X9.Inner2) ' X0
End Class

Class X1
    Inherits XB(Of X9.Inner2) ' X1
End Class

Class X2
    Inherits XB(Of X1.Inner2)
End Class

Class X3
    Inherits XB(Of X2.Inner2)
End Class

Class X4
    Inherits XB(Of X3.Inner2)
End Class

Class X5
    Inherits XB(Of X4.Inner2)
End Class

Class X6
    Inherits XB(Of X5.Inner2)
End Class

Class X7
    Inherits XB(Of X6.Inner2)
End Class

Class X8
    Inherits XB(Of X7.Inner2)
End Class

Class X9
    Inherits XB(Of X8.Inner2)
End Class
        ]]></file>
    </compilation>)
 
                Dim expectedErrors = <errors><![CDATA[
BC31449: Inherits clause of class 'X1' causes cyclic dependency: 
    Base type of 'X9' needs 'X8' to be resolved.
    Base type of 'X8' needs 'X7' to be resolved.
    Base type of 'X7' needs 'X6' to be resolved.
    Base type of 'X6' needs 'X5' to be resolved.
    Base type of 'X5' needs 'X4' to be resolved.
    Base type of 'X4' needs 'X3' to be resolved.
    Base type of 'X3' needs 'X2' to be resolved.
    Base type of 'X2' needs 'X1' to be resolved.
    Base type of 'X1' needs 'X9' to be resolved.
    Inherits XB(Of X9.Inner2) ' X1
             ~~~~~~~~~~~~~~~~
BC30002: Type 'X1.Inner2' is not defined.
    Inherits XB(Of X1.Inner2)
                   ~~~~~~~~~
                                     ]]></errors>
 
                CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
            Next
        End Sub
 
        <Fact()>
        Public Sub BaseClassErrors2e()
 
            ' There is a race known in base type detection
            For i = 0 To 50
                Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="b.vb"><![CDATA[
Class XB(Of T)
    Class Inner2
    End Class
End Class

Class XC
    Inherits XB(Of XD.Inner2)
End Class

Class XD
    Inherits XB(Of XC.Inner2)
End Class

Class XE
    Inherits XB(Of XC.Inner2)
End Class
        ]]></file>
    </compilation>)
 
                Dim expectedErrors = <errors><![CDATA[
BC31449: Inherits clause of class 'XC' causes cyclic dependency: 
    Base type of 'XD' needs 'XC' to be resolved.
    Base type of 'XC' needs 'XD' to be resolved.
    Inherits XB(Of XD.Inner2)
             ~~~~~~~~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
    Inherits XB(Of XC.Inner2)
                   ~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
    Inherits XB(Of XC.Inner2)
                   ~~~~~~~~~
                                    ]]></errors>
 
                CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
            Next
        End Sub
 
        <Fact()>
        Public Sub BaseClassErrors2f()
 
            ' There is a race known in base type detection
            For i = 0 To 50
                Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="b.vb"><![CDATA[
Class XC
    Inherits XD.Inner2
End Class

Class XD
    Inherits XC.Inner2
End Class
        ]]></file>
    </compilation>)
 
                CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC30002: Type 'XD.Inner2' is not defined.
    Inherits XD.Inner2
             ~~~~~~~~~
BC31449: Inherits clause of class 'XC' causes cyclic dependency: 
    Base type of 'XD' needs 'XC' to be resolved.
    Base type of 'XC' needs 'XD' to be resolved.
    Inherits XD.Inner2
             ~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
    Inherits XC.Inner2
             ~~~~~~~~~
]]></errors>)
            Next
        End Sub
 
        <Fact()>
        Public Sub BaseClassErrors2g()
 
            ' There is a race known in base type detection
            For i = 0 To 50
                Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="b.vb"><![CDATA[
Class XC
    Inherits XD.Inner2
End Class

Class XD
    Inherits XC.Inner2
    Class Inner2
    End Class
End Class
        ]]></file>
    </compilation>)
 
                CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC30002: Type 'XC.Inner2' is not defined.
    Inherits XC.Inner2
             ~~~~~~~~~
BC31449: Inherits clause of class 'XD' causes cyclic dependency: 
    'XD.Inner2' is nested in 'XD'.
    Base type of 'XD' needs 'XD.Inner2' to be resolved.
    Inherits XC.Inner2
             ~~~~~~~~~
]]></errors>)
            Next
        End Sub
 
        <Fact>
        Public Sub FieldErrors1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Public Partial Class C
    Public Public p as Integer
    Public Private q as Integer
    Private MustOverride r as Integer
    Dim s 
End Class
    ]]></file>
    <file name="b.vb"><![CDATA[
Option Strict On        
Public Partial Class C
    Dim x% As Integer
    Dim t ' error only if Option Strict is on
    Dim u? as Integer?
End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30178: Specifier is duplicated.
    Public Public p as Integer
           ~~~~~~
BC30176: Only one of 'Public', 'Private', 'Protected', 'Friend', 'Protected Friend', or 'Private Protected' can be specified.
    Public Private q as Integer
           ~~~~~~~
BC30235: 'MustOverride' is not valid on a member variable declaration.
    Private MustOverride r as Integer
            ~~~~~~~~~~~~
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
    Dim x% As Integer
        ~~
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
    Dim t ' error only if Option Strict is on
        ~
BC33100: Nullable modifier cannot be specified on both a variable and its type.
    Dim u? as Integer?
           ~~~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub MethodErrors1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Option Strict On        
Public Partial Class C
    Protected Private Sub m1()
    End Sub
    NotOverridable MustOverride Sub m2()
    NotOverridable Overridable Sub m3()
    End Sub
    Overridable Overrides Sub m4()
    End Sub
    Overridable Shared Sub m5()
    End Sub
    Public Function m6()
    End Function
    Public Function m7%() as string
    End Function
    Shadows Overloads Sub m8()
    End Sub
    Sub m9(Of T$)()
    End Sub
    Public MustInherit Sub m10()
    End Sub
End Class
    ]]></file>
    <file name="b.vb"><![CDATA[
Option Strict Off        
Public Partial Class C
    Public Sub x$()
    End Sub
End Class
    ]]></file>
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
 
            Dim expectedErrors = <errors><![CDATA[
BC36716: Visual Basic 15.0 does not support Private Protected.
    Protected Private Sub m1()
              ~~~~~~~
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
    NotOverridable MustOverride Sub m2()
                   ~~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
    NotOverridable MustOverride Sub m2()
                                    ~~
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
    NotOverridable Overridable Sub m3()
                   ~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
    NotOverridable Overridable Sub m3()
                                   ~~
BC30730: Methods declared 'Overrides' cannot be declared 'Overridable' because they are implicitly overridable.
    Overridable Overrides Sub m4()
                ~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'Overridable' on a method declaration.
    Overridable Shared Sub m5()
    ~~~~~~~~~~~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
    Public Function m6()
                    ~~
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
    Public Function m7%() as string
                    ~~~
BC31408: 'Overloads' and 'Shadows' cannot be combined.
    Shadows Overloads Sub m8()
            ~~~~~~~~~
BC32041: Type character cannot be used in a type parameter declaration.
    Sub m9(Of T$)()
              ~~
BC30242: 'MustInherit' is not valid on a method declaration.
    Public MustInherit Sub m10()
           ~~~~~~~~~~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
    Public Sub x$()
               ~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub MethodErrorsInInNotInheritableClass()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
NotInheritable Class c
    Overridable Sub s1()
    End Sub

    NotOverridable Sub s2()
    End Sub

    MustOverride Sub s3()

    Default Sub s4()
    End Sub

    Protected Sub s5()
    End Sub

    Protected Friend Sub s6()
    End Sub

    Overridable Sub New()
    End Sub

    NotOverridable Sub New(ByVal i1 As Integer)
    End Sub

    MustOverride Sub New(ByVal i1 As Integer, ByVal i2 As Integer)

    Default Sub s4(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer)
    End Sub

    Protected Sub s5(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer, ByVal i4 As Integer)
    End Sub

    Protected Friend Sub s6(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer, ByVal i4 As Integer, ByVal i5 As Integer)
    End Sub
End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
    Overridable Sub s1()
    ~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
    NotOverridable Sub s2()
    ~~~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
    MustOverride Sub s3()
    ~~~~~~~~~~~~
BC30242: 'Default' is not valid on a method declaration.
    Default Sub s4()
    ~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
    Overridable Sub New()
    ~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
    NotOverridable Sub New(ByVal i1 As Integer)
    ~~~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
    MustOverride Sub New(ByVal i1 As Integer, ByVal i2 As Integer)
    ~~~~~~~~~~~~
BC30242: 'Default' is not valid on a method declaration.
    Default Sub s4(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer)
    ~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub MethodErrorsInInterfaces1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Option Strict On        
Imports System.Collections.Generic

Public Interface i1
    Private Sub m1()
    Protected Sub m2()
    Friend Sub m3()
    Static Sub m4()
    Shared Sub m5()
    Shadows Sub m6()
    MustInherit Sub m7()
    Overloads Sub m8()
    NotInheritable Sub m9()
    Overrides Sub m10()
    NotOverridable Sub m11()
    MustOverride Sub m12()
    ReadOnly Sub m13()
    WriteOnly Sub m14()
    Dim Sub m15()
    Const Sub m16()
    Default Sub m17()
    WithEvents Sub m18()
    Widening Sub m19()
    Narrowing Sub m20()
    sub m21 implements IEnumerator.MoveNext
    sub m22 handles DownButton.Click
    Iterator Function I1() as IEnumerable(of Integer)
    End Interface
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[ 
BC30270: 'Private' is not valid on an interface method declaration.
    Private Sub m1()
    ~~~~~~~
BC30270: 'Protected' is not valid on an interface method declaration.
    Protected Sub m2()
    ~~~~~~~~~
BC30270: 'Friend' is not valid on an interface method declaration.
    Friend Sub m3()
    ~~~~~~
BC30242: 'Static' is not valid on a method declaration.
    Static Sub m4()
    ~~~~~~
BC30270: 'Shared' is not valid on an interface method declaration.
    Shared Sub m5()
    ~~~~~~
BC30242: 'MustInherit' is not valid on a method declaration.
    MustInherit Sub m7()
    ~~~~~~~~~~~
BC30242: 'NotInheritable' is not valid on a method declaration.
    NotInheritable Sub m9()
    ~~~~~~~~~~~~~~
BC30270: 'Overrides' is not valid on an interface method declaration.
    Overrides Sub m10()
    ~~~~~~~~~
BC30270: 'NotOverridable' is not valid on an interface method declaration.
    NotOverridable Sub m11()
    ~~~~~~~~~~~~~~
BC30270: 'MustOverride' is not valid on an interface method declaration.
    MustOverride Sub m12()
    ~~~~~~~~~~~~
BC30242: 'ReadOnly' is not valid on a method declaration.
    ReadOnly Sub m13()
    ~~~~~~~~
BC30242: 'WriteOnly' is not valid on a method declaration.
    WriteOnly Sub m14()
    ~~~~~~~~~
BC30242: 'Dim' is not valid on a method declaration.
    Dim Sub m15()
    ~~~
BC30242: 'Const' is not valid on a method declaration.
    Const Sub m16()
    ~~~~~
BC30242: 'Default' is not valid on a method declaration.
    Default Sub m17()
    ~~~~~~~
BC30242: 'WithEvents' is not valid on a method declaration.
    WithEvents Sub m18()
    ~~~~~~~~~~
BC30242: 'Widening' is not valid on a method declaration.
    Widening Sub m19()
    ~~~~~~~~
BC30242: 'Narrowing' is not valid on a method declaration.
    Narrowing Sub m20()
    ~~~~~~~~~
BC30270: 'implements' is not valid on an interface method declaration.
    sub m21 implements IEnumerator.MoveNext
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30270: 'handles' is not valid on an interface method declaration.
    sub m22 handles DownButton.Click
            ~~~~~~~~~~~~~~~~~~~~~~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
    sub m22 handles DownButton.Click
                    ~~~~~~~~~~
BC30270: 'Iterator' is not valid on an interface method declaration.
    Iterator Function I1() as IEnumerable(of Integer)
    ~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        <WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
        <WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
        Public Sub UnsupportedHandles_01()
            Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
    <file name="a.vb"><![CDATA[
Public Class DerivedClass
    Inherits BaseClass

    Private Shared Sub Handler() Handles EventHost.SomeEvent
    End Sub
End Class

Public MustInherit Class BaseClass
    Protected Shared WithEvents EventHost As EventHost
End Class

Public Class EventHost
    Public Event SomeEvent()
End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[ 
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
    Private Shared Sub Handler() Handles EventHost.SomeEvent
                                         ~~~~~~~~~
]]></errors>
 
            compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
            compilation.AssertTheseEmitDiagnostics(expectedErrors)
        End Sub
 
        <Fact>
        <WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
        <WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
        Public Sub UnsupportedHandles_02()
            Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
    <file name="a.vb"><![CDATA[
Public Class DerivedClass
    Inherits BaseClass

    Private Sub Handler() Handles EventHost.SomeEvent
    End Sub
End Class

Public MustInherit Class BaseClass
    Protected Shared WithEvents EventHost As EventHost
End Class

Public Class EventHost
    Public Event SomeEvent()
End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[ 
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
    Private Sub Handler() Handles EventHost.SomeEvent
                                  ~~~~~~~~~
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
    Private Sub Handler() Handles EventHost.SomeEvent
                                  ~~~~~~~~~
]]></errors>
 
            compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
            compilation.AssertTheseEmitDiagnostics(expectedErrors)
        End Sub
 
        <Fact>
        <WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
        <WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
        Public Sub UnsupportedHandles_03()
            Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
    <file name="a.vb"><![CDATA[
Public Class DerivedClass
    Inherits BaseClass

    Private Shared Sub Handler() Handles EventHost.SomeEvent, EventHost2.SomeEvent
    End Sub

    Protected Shared WithEvents EventHost2 As EventHost
End Class

Public MustInherit Class BaseClass
    Protected Shared WithEvents EventHost As EventHost
End Class

Public Class EventHost
    Public Event SomeEvent()
End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[ 
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
    Private Shared Sub Handler() Handles EventHost.SomeEvent, EventHost2.SomeEvent
                                         ~~~~~~~~~
]]></errors>
 
            compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
            compilation.AssertTheseEmitDiagnostics(expectedErrors)
        End Sub
 
        <Fact>
        <WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
        <WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
        Public Sub UnsupportedHandles_04()
            Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
    <file name="a.vb"><![CDATA[
Public Class DerivedClass
    Inherits BaseClass

    Private Shared Sub Handler() Handles EventHost2.SomeEvent, EventHost.SomeEvent
    End Sub

    Protected Shared WithEvents EventHost2 As EventHost
End Class

Public MustInherit Class BaseClass
    Protected Shared WithEvents EventHost As EventHost
End Class

Public Class EventHost
    Public Event SomeEvent()
End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[ 
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
    Private Shared Sub Handler() Handles EventHost2.SomeEvent, EventHost.SomeEvent
                                                               ~~~~~~~~~
]]></errors>
 
            compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
            compilation.AssertTheseEmitDiagnostics(expectedErrors)
        End Sub
 
        <Fact>
        Public Sub ErrorTypeSymbol_DefaultMember_CodeCoverageItems()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Coverage">
    <file name="a.vb"><![CDATA[
Class A
    Dim n As B
End Class
    ]]></file>
</compilation>)
 
            Dim errs = compilation.GetDeclarationDiagnostics()
 
            Assert.Equal(1, Enumerable.Count(Of Diagnostic)(errs))
            Dim err As Diagnostic = Enumerable.Single(Of Diagnostic)(errs)
            Assert.Equal(&H7532, err.Code)
            Dim fieldSymb As FieldSymbol = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single.GetMembers.Item(1), FieldSymbol)
            Dim symbType As TypeSymbol = fieldSymb.Type
 
            Dim errTypeSym As ErrorTypeSymbol = DirectCast(symbType, ErrorTypeSymbol)
            Assert.Equal(SymbolKind.ErrorType, errTypeSym.Kind)
            Assert.Equal("B", errTypeSym.Name)
            Assert.Null(errTypeSym.ContainingAssembly)
            Assert.Null(errTypeSym.ContainingSymbol)
            Assert.Equal(Accessibility.Public, errTypeSym.DeclaredAccessibility)
            Assert.False(errTypeSym.IsShared)
            Assert.False(errTypeSym.IsMustOverride)
            Assert.False(errTypeSym.IsNotOverridable)
            Assert.False(errTypeSym.IsValueType)
            Assert.True(errTypeSym.IsReferenceType)
            Assert.Equal(SpecializedCollections.EmptyCollection(Of String), errTypeSym.MemberNames)
            Assert.Equal(ImmutableArray.Create(Of Symbol)(), errTypeSym.GetMembers)
            Assert.Equal(ImmutableArray.Create(Of Symbol)(), errTypeSym.GetMembers("B"))
            Assert.Equal(ImmutableArray.Create(Of NamedTypeSymbol)(), errTypeSym.GetTypeMembers)
            Assert.Equal(ImmutableArray.Create(Of NamedTypeSymbol)(), errTypeSym.GetTypeMembers("B"))
            Assert.Equal(ImmutableArray.Create(Of NamedTypeSymbol)(), errTypeSym.GetTypeMembers("B", 1))
            Assert.Equal(TypeKind.Error, errTypeSym.TypeKind)
            Assert.Equal(ImmutableArray.Create(Of Location)(), errTypeSym.Locations)
            Assert.Equal(ImmutableArray.Create(Of SyntaxReference)(), errTypeSym.DeclaringSyntaxReferences)
            Assert.Equal(0, errTypeSym.Arity)
            Assert.Null(errTypeSym.EnumUnderlyingType)
            Assert.Equal("B", errTypeSym.Name)
            Assert.Equal(0, errTypeSym.TypeArguments.Length)
            Assert.Equal(0, errTypeSym.TypeParameters.Length)
            Assert.Equal(errTypeSym.CandidateSymbols.Length, errTypeSym.IErrorTypeSymbol_CandidateSymbols.Length)
        End Sub
 
        <Fact>
        Public Sub ConstructorErrors1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Option Strict On        
Public Partial Class C
    Public Overridable Sub New(x as Integer)
    End Sub
    MustOverride Sub New(y as String)
    NotOverridable Friend Sub New(z as Object)
    End Sub
    Private Shadows Sub New(z as Object, a as integer)
    End Sub
    Protected Overloads Sub New(z as Object, a as string)
    End Sub
    Public Static Sub New(z as string, a as Object)
    End Sub
    Overrides Sub New()
    End Sub
End Class
    ]]></file>
    <file name="b.vb"><![CDATA[
Option Strict Off        
Public Partial Class C
End Class

Public Interface I
    Sub New()
End Interface
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30364: 'Sub New' cannot be declared 'Overridable'.
    Public Overridable Sub New(x as Integer)
           ~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'MustOverride'.
    MustOverride Sub New(y as String)
    ~~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'NotOverridable'.
    NotOverridable Friend Sub New(z as Object)
    ~~~~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'Shadows'.
    Private Shadows Sub New(z as Object, a as integer)
            ~~~~~~~
BC32040: The 'Overloads' keyword is used to overload inherited members; do not use the 'Overloads' keyword when overloading 'Sub New'.
    Protected Overloads Sub New(z as Object, a as string)
              ~~~~~~~~~
BC30242: 'Static' is not valid on a method declaration.
    Public Static Sub New(z as string, a as Object)
           ~~~~~~
BC30283: 'Sub New' cannot be declared 'Overrides'.
    Overrides Sub New()
    ~~~~~~~~~
BC30363: 'Sub New' cannot be declared in an interface.
    Sub New()
    ~~~~~~~~~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub SharedConstructorErrors1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
    <file name="a.vb"><![CDATA[
Option Strict On        
Public Class C
    Public Shared Sub New() '1
    End Sub
    Private Shared Sub New() '2
    End Sub
    Friend Shared Sub New() '3
    End Sub
    Shared Protected  Sub New() '4
    End Sub
    Shared Protected Friend Sub New() '5
    End Sub
    Shared Sub New(x as integer) '6
    End Sub
End Class
    ]]></file>
    <file name="b.vb"><![CDATA[
Option Strict Off        
Public Module M
    Public Sub New() '8
    End Sub
    Private Sub New() '9
    End Sub
    Friend Sub New() '10
    End Sub
    Protected  Sub New() '11
    End Sub
    Protected Friend Sub New() '12
    End Sub
    Sub New(x as Integer, byref y as string) '13
    End Sub
End Module
    ]]></file>
</compilation>)
 
            Dim expectedErrors =
<errors><![CDATA[
BC30480: Shared 'Sub New' cannot be declared 'Public'.
    Public Shared Sub New() '1
    ~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
    Public Shared Sub New() '1
                      ~~~
BC30480: Shared 'Sub New' cannot be declared 'Private'.
    Private Shared Sub New() '2
    ~~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
    Private Shared Sub New() '2
                       ~~~
BC30480: Shared 'Sub New' cannot be declared 'Friend'.
    Friend Shared Sub New() '3
    ~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
    Friend Shared Sub New() '3
                      ~~~
BC30480: Shared 'Sub New' cannot be declared 'Protected'.
    Shared Protected  Sub New() '4
           ~~~~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
    Shared Protected  Sub New() '4
                          ~~~
BC30480: Shared 'Sub New' cannot be declared 'Protected Friend'.
    Shared Protected Friend Sub New() '5
           ~~~~~~~~~~~~~~~~
BC30479: Shared 'Sub New' cannot have any parameters.
    Shared Sub New(x as integer) '6
                  ~~~~~~~~~~~~~~
BC30480: Shared 'Sub New' cannot be declared 'Public'.
    Public Sub New() '8
    ~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
    Public Sub New() '8
               ~~~
BC30480: Shared 'Sub New' cannot be declared 'Private'.
    Private Sub New() '9
    ~~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
    Private Sub New() '9
                ~~~
BC30480: Shared 'Sub New' cannot be declared 'Friend'.
    Friend Sub New() '10
    ~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
    Friend Sub New() '10
               ~~~
BC30433: Methods in a Module cannot be declared 'Protected'.
    Protected  Sub New() '11
    ~~~~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
    Protected  Sub New() '11
                   ~~~
BC30433: Methods in a Module cannot be declared 'Protected Friend'.
    Protected Friend Sub New() '12
    ~~~~~~~~~~~~~~~~
BC30479: Shared 'Sub New' cannot have any parameters.
    Sub New(x as Integer, byref y as string) '13
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub ParameterErrors()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Option Strict On        
Public Partial Class C
    Public Sub m1(x)
    End Sub
    Public Sub m2(byref byval k as Integer)
    End Sub
    Public Sub m3(byref byref k as Integer)
    End Sub
    Public Sub m4(ByRef ParamArray x() as string)
    End Sub
    Public Sub m5(ParamArray q as Integer)
    End Sub
End Class
    ]]></file>
    <file name="b.vb"><![CDATA[
Option Strict Off        
Public Partial Class C
    Public Sub m8(x, y$)
    End Sub
    Public Sub m9(x, z As String, w)
    End Sub

End Class
    ]]></file>
</compilation>)
 
            Dim expectedErrors = <errors><![CDATA[
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
    Public Sub m1(x)
                  ~
BC30641: 'ByVal' and 'ByRef' cannot be combined.
    Public Sub m2(byref byval k as Integer)
                        ~~~~~
BC30785: Parameter specifier is duplicated.
    Public Sub m3(byref byref k as Integer)
                        ~~~~~
BC30667: ParamArray parameters must be declared 'ByVal'.
    Public Sub m4(ByRef ParamArray x() as string)
                        ~~~~~~~~~~
BC30050: ParamArray parameter must be an array.
    Public Sub m5(ParamArray q as Integer)
                             ~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
    Public Sub m8(x, y$)
                  ~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
    Public Sub m9(x, z As String, w)
                  ~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
    Public Sub m9(x, z As String, w)
                                  ~
                                 ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
        End Sub
 
        <Fact>
        Public Sub MoreParameterErrors()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MoreParameterErrors">
    <file name="a.vb"><![CDATA[
Imports System        
Module M1
    Function F1(f1 as integer) as Integer
        return 0
    End Function

    Function F1(i1 as integer, I1 as integer) as Integer
        return 0
    End Function

    Function F1(of T1) (i1 as integer, t1 as integer) as Integer
        return 0
    End Function

End Module
    ]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30530: Parameter cannot have the same name as its defining function.
    Function F1(f1 as integer) as Integer
                ~~
BC30237: Parameter already declared with name 'I1'.
    Function F1(i1 as integer, I1 as integer) as Integer
                               ~~
BC32089: 't1' is already declared as a type parameter of this method.
    Function F1(of T1) (i1 as integer, t1 as integer) as Integer
                                       ~~    
]]></expected>)
        End Sub
 
        <Fact>
        Public Sub LocalDeclarationSameAsFunctionNameError()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LocalDeclarationSameAsFunctionNameError">
    <file name="a.vb"><![CDATA[
Imports System        
Module M1
    Function F1() as Integer
        dim f1 as integer = 0
        do
            dim f1 As integer = 0
        loop
        return 0
    End Function

End Module
    ]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30290: Local variable cannot have the same name as the function containing it.
        dim f1 as integer = 0
            ~~
BC30290: Local variable cannot have the same name as the function containing it.
            dim f1 As integer = 0
                ~~
]]></expected>)
        End Sub
 
        <Fact>
        Public Sub DuplicateLocalDeclarationError()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateLocalDeclarationError">
    <file name="a.vb"><![CDATA[
Imports System        
Module M1
    Function F1() as Integer
        dim i as long = 0
        dim i as integer = 0
        dim j,j as integer
        return 0
    End Function

End Module
    ]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30288: Local variable 'i' is already declared in the current block.
        dim i as integer = 0
            ~
BC42024: Unused local variable: 'j'.
        dim j,j as integer
            ~
BC30288: Local variable 'j' is already declared in the current block.
        dim j,j as integer
              ~
BC42024: Unused local variable: 'j'.
        dim j,j as integer
              ~
]]></expected>)
        End Sub
 
        <Fact>
        Public Sub LocalDeclarationTypeParameterError()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateLocalDeclarationError">
    <file name="a.vb"><![CDATA[
Imports System        
Module M1
    Function F1(of T)() as Integer
        dim t as integer = 0
        do
        dim t as integer = 0
        loop
        return 0
    End Function

End Module
    ]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC32089: 't' is already declared as a type parameter of this method.
        dim t as integer = 0
            ~
BC30616: Variable 't' hides a variable in an enclosing block.
        dim t as integer = 0
            ~
]]></expected>)
        End Sub
 
        <Fact>
        Public Sub LocalDeclarationParameterError()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateLocalDeclarationError">
    <file name="a.vb"><![CDATA[
Imports System        
Module M1
    Function F1(p as integer) as Integer
        dim p as integer = 0
        do
            dim p as integer = 0
        loop 
        return 0
    End Function

End Module
    ]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30734: 'p' is already declared as a parameter of this method.
        dim p as integer = 0
            ~
BC30616: Variable 'p' hides a variable in an enclosing block.
            dim p as integer = 0
                ~
]]></expected>)
        End Sub
 
        ' Checks for duplicate type parameters
        <Fact>
        Public Sub DuplicateMethodTypeParameterErrors()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
        Class BB(Of T)

            Class A(Of t1)
                Public t1 As Integer

                Sub f(Of t, t)()
                End Sub

            End Class

        End Class


        Class a(Of t)
            Inherits BB(Of t)
            Class b
                Class c(Of t)

                End Class
            End Class
        End Class

        Class base(Of T)
            Function TEST(Of T)(ByRef X As T)
                Return Nothing
            End Function
        End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32054: 't1' has the same name as a type parameter.
                Public t1 As Integer
                       ~~
BC40048: Type parameter 't' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
                Sub f(Of t, t)()
                         ~
BC32049: Type parameter already declared with name 't'.
                Sub f(Of t, t)()
                            ~
BC40048: Type parameter 't' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
                Class c(Of t)
                           ~
BC40048: Type parameter 'T' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
            Function TEST(Of T)(ByRef X As T)
                             ~
     ]]></errors>
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact, WorkItem(527182, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527182")>
        Public Sub DuplicatedNameWithDifferentCases()
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AAA">
    <file name="a.vb"><![CDATA[
Module Module1
    Dim S1 As String
    Dim s1 As String
    Dim S1 As Integer

    Function MyFunc() As Integer
        Return 0
    End Function
    Function MYFUNC() As Integer
        Return 0
    End Function

    Sub Main()
    End Sub
End Module

Namespace NS
    Partial Public Class AAA
        Public BBB As Integer
        Friend BBb As Integer

        Sub SSS()
        End Sub
    End Class
    Partial Public Class AaA
        Public Structure ST1
            Shared CH1, ch1 As Char
        End Structure
        Structure st1
            Shared ch1, ch2 As Char
        End Structure
    End Class
End Namespace
    ]]></file>
    <file name="b.vb"><![CDATA[
Namespace Ns
    Partial Public Class Aaa
        Private Bbb As Integer

        Sub Sss()
        End Sub
    End Class
End Namespace
    ]]></file>
</compilation>)
 
            Dim globalNS = compilation.SourceModule.GlobalNamespace
            Dim myMod = DirectCast(globalNS.GetMembers("module1").Single(), NamedTypeSymbol)
            ' no merge for non-namespace/type members
            Dim mem1 = myMod.GetMembers("S1")
            Assert.Equal(3, mem1.Length) ' 3
            mem1 = myMod.GetMembers("myfunc")
            Assert.Equal(2, mem1.Length) ' 2
 
            Dim myNS = DirectCast(globalNS.GetMembers("ns").Single(), NamespaceSymbol)
            Dim types = myNS.GetMembers("aaa")
            Assert.Equal(1, types.Length)
            Dim type1 = DirectCast(types.First(), NamedTypeSymbol)
            ' no merge for fields
            Dim mem2 = type1.GetMembers("bbb")
            Assert.Equal(3, mem2.Length) ' 3
            Dim mem3 = type1.GetMembers("sss")
            Assert.Equal(2, mem3.Length) ' 2
            Dim mem4 = type1.GetMembers("St1")
            Assert.Equal(1, mem4.Length)
            Dim type2 = DirectCast(mem4.First(), NamedTypeSymbol)
            ' from both St1
            Dim mem5 = type2.GetMembers("Ch1")
            Assert.Equal(3, mem2.Length) ' 3
 
            Dim errs = compilation.GetDeclarationDiagnostics()
            ' Native compilers 9 errors
            Assert.True(errs.Length > 6, "Contain Decl Errors")
        End Sub
 
        <WorkItem(537443, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537443")>
        <Fact>
        Public Sub DuplicatedTypes()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Module Module1
    Sub sub1()
        Dim element1 = <RootEle>
        </RootEle>
    End Sub
End Module

'COMPILEERROR: BC30179, "Module1"
Module Module1
    Sub sub1()
        Dim element1 = <RootEle>
        </RootEle>
    End Sub
End Module

Namespace GenArityErr001

    Public Structure ga001Str2 (Of T As Integer)
       Dim i As Integer
    End Structure

    ' BC30179: Name conflict
    ' COMPILEERROR: BC30179, "ga001Str2"
    Public Structure ga001Str2 (Of X As New)
       Dim i As Integer
    End Structure
End Namespace
    ]]></file>
</compilation>)
 
            Dim globalNS = compilation.Assembly.GlobalNamespace
            Dim modOfNS = DirectCast(globalNS.GetMembers("Module1").Single(), NamedTypeSymbol)
            Dim mem1 = DirectCast(modOfNS.GetMembers().First(), MethodSymbol)
            Assert.Equal("sub1", mem1.Name)
 
            Dim ns = DirectCast(globalNS.GetMembers("GenArityErr001").First(), NamespaceSymbol)
            Dim type1 = DirectCast(ns.GetMembers("ga001Str2").First(), NamedTypeSymbol)
            Assert.NotEmpty(type1.GetMembers().AsEnumerable())
 
        End Sub
 
        <WorkItem(537443, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537443")>
        <Fact>
        Public Sub InvalidPartialTypes()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
    <file name="a.vb"><![CDATA[
Option Explicit On
Namespace PartialStruct118
    Interface ii
        Sub abc()
    End Interface
    'COMPILEWARNING: BC40046, "teststruct"
    Structure teststruct
        Implements ii

        'COMPILEERROR: BC30269, "abc"
        Public Sub abc() Implements ii.abc
        End Sub
        Public Scen5 As String
        'COMPILEERROR: BC30269, "Scen6"
        Public Sub Scen6(ByVal x As String)
        End Sub
        'COMPILEERROR: BC30269, "New"
        Public Sub New(ByVal x As String)
        End Sub
    End Structure
    'COMPILEERROR: BC32200, "teststruct"
    partial Shadows Structure teststruct

    End Structure
    'COMPILEERROR: BC30395, "MustInherit"
    partial MustInherit Structure teststruct

    End Structure
    'COMPILEERROR: BC30395, "NotInheritable"
    partial NotInheritable Structure teststruct

    End Structure
    'COMPILEERROR: BC30178, "partial"
    partial partial structure teststruct
    End Structure

    partial Structure teststruct
        'COMPILEERROR: BC30260, "Scen5"
        Public Scen5 As String

        Public Sub Scen6(ByVal x As String)
        End Sub
    End Structure

    partial Structure teststruct
        'COMPILEERROR: BC30628, "Inherits Scen7"
        Inherits scen7
    End Structure

    partial Structure teststruct
        Implements ii
        Public Sub New(ByVal x As String)
        End Sub
        Public Sub abc() Implements ii.abc
        End Sub
    End Structure
        'COMPILEWARNING: BC40046, "teststruct"
    Structure teststruct
        Dim a As String
    End Structure

End Namespace

    ]]></file>
</compilation>)
 
            Dim globalNS = compilation.Assembly.GlobalNamespace
            Dim ns = DirectCast(globalNS.GetMembers("PartialStruct118").Single(), NamespaceSymbol)
            Dim type1 = DirectCast(ns.GetTypeMembers("teststruct").First(), NamedTypeSymbol)
            Assert.Equal("teststruct", type1.Name)
            Assert.NotEmpty(type1.GetMembers().AsEnumerable)
 
        End Sub
 
        <WorkItem(537680, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537680")>
        <Fact>
        Public Sub ModuleWithTypeParameters()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
                <compilation name="Err">
                    <file name="a.vb"><![CDATA[
Namespace Regression139822
    'COMPILEERROR: BC32073, "(of T)"
    Module Module1(of T)
    End Module
End Namespace
                    ]]></file>
                </compilation>)
 
            Dim globalNS = compilation.SourceModule.GlobalNamespace
            Dim ns = DirectCast(globalNS.GetMembers("Regression139822").Single(), NamespaceSymbol)
            Dim myMod = DirectCast(ns.GetMembers("Module1").SingleOrDefault(), NamedTypeSymbol)
            Assert.Equal(0, myMod.TypeParameters.Length)
            Assert.Equal(0, myMod.Arity)
        End Sub
 
        <Fact>
        Public Sub Bug4577()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
               <compilation name="Bug4577">
                   <file name="a.vb"><![CDATA[
Namespace A.B
End Namespace

Namespace A
  Class B
  End Class

  Class B(Of T)
  End Class
End Namespace

Class C
    Class D
    End Class

    Public d As Integer

    Class E(Of T)
    End Class

    Public e As Integer

    Class D '2
    End Class
End Class
                    ]]></file>
               </compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30179: class 'B' and namespace 'B' conflict in namespace 'A'.
  Class B
        ~
BC30260: 'd' is already declared as 'Class D' in this class.
    Public d As Integer
           ~
BC30260: 'e' is already declared as 'Class E(Of T)' in this class.
    Public e As Integer
           ~
BC30179: class 'D' and class 'D' conflict in class 'C'.
    Class D '2
          ~
]]></expected>)
        End Sub
 
        <Fact>
        Public Sub Bug4054()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Bug4054">
    <file name="a.vb"><![CDATA[
        Module Program
            Sub Main()
                Dim x(0# To 2)
            End Sub
        End Module        
    ]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
    <expected><![CDATA[
        BC32059: Array lower bounds can be only '0'.
                Dim x(0# To 2)
                      ~~
    ]]></expected>)
 
        End Sub
 
        <WorkItem(537507, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537507")>
        <Fact>
        Public Sub ReportErrorTypeCharacterInTypeNameDeclaration()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ReportErrorTypeCharacterInTypeNameDeclaration">
    <file name="a.vb"><![CDATA[
Namespace n1#

Class C1#
End Class

Class c2#(of T)
end class

Enum e1#
    dummy
end enum

Structure s1#
End structure

End Namespace

Module Program#
End Module
]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30468: Type declaration characters are not valid in this context.
Namespace n1#
          ~~~
BC30468: Type declaration characters are not valid in this context.
Class C1#
      ~~~
BC30468: Type declaration characters are not valid in this context.
Class c2#(of T)
      ~~~
BC30468: Type declaration characters are not valid in this context.
Enum e1#
     ~~~
BC30468: Type declaration characters are not valid in this context.
Structure s1#
          ~~~
BC30468: Type declaration characters are not valid in this context.
Module Program#
       ~~~~~~~~                                                           
 ]]></errors>)
        End Sub
 
        <WorkItem(537507, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537507")>
        <Fact>
        Public Sub ReportErrorTypeCharacterInTypeName()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ReportErrorTypeCharacterInTypeName">
    <file name="a.vb"><![CDATA[
Namespace n1

Class C1#
End Class

Class c2#(of T)
    public f1 as c1#
end class

End Namespace

Module Program
    Dim x1 as C1#
    dim x2 as N1.C1#
    dim x3 as n1.c2#(of integer)
End Module
]]></file>
</compilation>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30468: Type declaration characters are not valid in this context.
Class C1#
      ~~~
BC30468: Type declaration characters are not valid in this context.
Class c2#(of T)
      ~~~
BC30468: Type declaration characters are not valid in this context.
    public f1 as c1#
                 ~~~
BC30002: Type 'C1' is not defined.
    Dim x1 as C1#
              ~~~
BC30468: Type declaration characters are not valid in this context.
    Dim x1 as C1#
              ~~~
BC30468: Type declaration characters are not valid in this context.
    dim x2 as N1.C1#
                 ~~~
BC30468: Type declaration characters are not valid in this context.
    dim x3 as n1.c2#(of integer)
                 ~~~                                               
 ]]></errors>)
        End Sub
 
        <WorkItem(540895, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540895")>
        <Fact>
        Public Sub BC31538ERR_FriendAssemblyBadAccessOverride2()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ClassLibrary1">
    <file name="a.vb"><![CDATA[
Imports System

Public Class A
    Protected Friend Overridable Sub G()
        Console.WriteLine("A.G")
    End Sub
End Class
    ]]></file>
</compilation>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ConsoleApp">
    <file name="c.vb"><![CDATA[
Imports System
Imports ClassLibrary1

MustInherit Class B
    Inherits A
    Protected Friend Overrides Sub G()
    End Sub
End Class
    ]]></file>
</compilation>, {New VisualBasicCompilationReference(compilation1)})
 
            CompilationUtils.AssertTheseDiagnostics(compilation2, <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'ClassLibrary1' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports ClassLibrary1
        ~~~~~~~~~~~~~
BC31538: Member 'Protected Friend Overrides Sub G()' cannot override member 'Protected Friend Overridable Sub G()' defined in another assembly/project because the access modifier 'Protected Friend' expands accessibility. Use 'Protected' instead.
    Protected Friend Overrides Sub G()
                                   ~
]]></errors>)
        End Sub
 
        ' Note that the candidate symbols infrastructure on error types is tested heavily in 
        ' the SemanticModel tests. The following tests just make sure the public
        ' API is working correctly.
 
        Public Sub ErrorTypeCandidateSymbols1()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
 <compilation name="ErrorType">
     <file name="a.vb"><![CDATA[
Option Strict On
Class A
    Dim n As B
End Class
     ]]></file>
 </compilation>)
 
            Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
            Dim fsym = DirectCast(classA.GetMembers("n").First(), FieldSymbol)
            Dim typ = fsym.Type
            Assert.Equal(SymbolKind.ErrorType, typ.Kind)
            Assert.Equal("B", typ.Name)
 
            Dim errortype = DirectCast(typ, ErrorTypeSymbol)
            Assert.Equal(CandidateReason.None, errortype.CandidateReason)
            Assert.Equal(0, errortype.CandidateSymbols.Length)
        End Sub
 
        <Fact()>
        Public Sub ErrorTypeCandidateSymbols2()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
 <compilation name="ErrorType">
     <file name="a.vb"><![CDATA[
Option Strict On
Class C
    Private Class B
    End Class
End Class
Class A
    Inherits C
    Dim n As B
End Class
     ]]></file>
 </compilation>)
 
            Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
            Dim classB = DirectCast(DirectCast(compilation.GlobalNamespace.GetTypeMembers("C").Single(), NamedTypeSymbol).GetTypeMembers("B").Single, NamedTypeSymbol)
 
            Dim fsym = DirectCast(classA.GetMembers("n").First(), FieldSymbol)
            Dim typ = fsym.Type
            Assert.Equal(SymbolKind.ErrorType, typ.Kind)
            Assert.Equal("B", typ.Name)
 
            Dim errortyp = DirectCast(typ, ErrorTypeSymbol)
            Assert.Equal(CandidateReason.Inaccessible, errortyp.CandidateReason)
            Assert.Equal(1, errortyp.CandidateSymbols.Length)
            Assert.Equal(classB, errortyp.CandidateSymbols(0))
        End Sub
 
        <Fact()>
        Public Sub ErrorTypeCandidateSymbols3()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
 <compilation name="ErrorType">
     <file name="a.vb"><![CDATA[
Option Strict On
Imports N1, N2
Namespace N1
    Class B
    End Class
End Namespace
Namespace N2
    Class B
    End Class
End Namespace
Class A
    Dim n As B
End Class
     ]]></file>
 </compilation>)
 
            Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
            Dim classB1 = DirectCast(DirectCast(compilation.GlobalNamespace.GetMembers("N1").Single(), NamespaceSymbol).GetTypeMembers("B").Single, NamedTypeSymbol)
            Dim classB2 = DirectCast(DirectCast(compilation.GlobalNamespace.GetMembers("N2").Single(), NamespaceSymbol).GetTypeMembers("B").Single, NamedTypeSymbol)
 
            Dim fsym = DirectCast(classA.GetMembers("n").First(), FieldSymbol)
            Dim typ = fsym.Type
            Assert.Equal(SymbolKind.ErrorType, typ.Kind)
            Assert.Equal("B", typ.Name)
 
            Dim errortyp = DirectCast(typ, ErrorTypeSymbol)
            Assert.Equal(CandidateReason.Ambiguous, errortyp.CandidateReason)
            Assert.Equal(2, errortyp.CandidateSymbols.Length)
            Assert.True((TypeSymbol.Equals(classB1, TryCast(errortyp.CandidateSymbols(0), TypeSymbol), TypeCompareKind.ConsiderEverything) AndAlso
                        TypeSymbol.Equals(classB2, TryCast(errortyp.CandidateSymbols(1), TypeSymbol), TypeCompareKind.ConsiderEverything)) OrElse
                        (TypeSymbol.Equals(classB2, TryCast(errortyp.CandidateSymbols(0), TypeSymbol), TypeCompareKind.ConsiderEverything) AndAlso
                        TypeSymbol.Equals(classB1, TryCast(errortyp.CandidateSymbols(1), TypeSymbol), TypeCompareKind.ConsiderEverything)), "should have B1 and B2 in some order")
        End Sub
 
        <Fact()>
        Public Sub TypeArgumentOfFriendType()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
 <compilation name="E">
     <file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("goo")>
Friend Class ImmutableStack(Of T)
End Class
     ]]></file>
 </compilation>)
 
            Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
 <compilation name="goo">
     <file name="a.vb"><![CDATA[
Friend Class Scanner

  Protected Class ConditionalState
  End Class

  Protected Class PreprocessorState
    Friend ReadOnly _conditionals As ImmutableStack(Of ConditionalState)
  End Class

End Class
     ]]></file>
 </compilation>, {New VisualBasicCompilationReference(compilation)})
 
            Assert.Empty(compilation2.GetDiagnostics())
        End Sub
 
        <Fact, WorkItem(544071, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544071")>
        Public Sub ProtectedTypeExposureGeneric()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
 <compilation name="E">
     <file name="a.vb"><![CDATA[
Friend Class B(Of T)
  Protected Enum ENM
       None
  End Enum
End Class

Class D
  Inherits B(Of Integer)
  Protected Sub proc(p1 As ENM)
  End Sub
  Protected Sub proc(p1 As B(Of Long).ENM)
  End Sub
End Class
     ]]></file>
 </compilation>)
 
            Dim diags = compilation.GetDiagnostics()
            Assert.Empty(diags)
 
        End Sub
 
        <Fact, WorkItem(574771, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/574771")>
        Public Sub Bug574771()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Public Interface vbGI6504Int1(Of X)
End Interface
Public Interface vbGI6504Int2(Of T, U)
    Function Fun2(ByVal p1 As T, ByVal t2 As U) As Long
End Interface
Public Interface vbGI6504Int3(Of T)
    Inherits vbGI6504Int1(Of T)
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
End Interface
Public Class vbGI6504Cls1(Of X)
    Implements vbGI6504Int3(Of X)
    Public Function Fun2(ByVal p1 As X, ByVal t2 As X) As Long Implements vbGI6504Int2(Of X, X).Fun2
        Return 12000L
    End Function
End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC32042: Too few type arguments to 'vbGI6504Int2(Of T, U)'.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
         ~~~~~~~~~~~~~~~
BC32093: 'Of' required when specifying type arguments for a generic type or method.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
                      ~
BC30002: Type 'O' is not defined.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
                      ~
BC30198: ')' expected.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
                        ~
BC32055: Interface 'vbGI6504Int3' cannot inherit from a type parameter.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
                           ~
BC31035: Interface 'vbGI6504Int2(Of X, X)' is not implemented by this class.
    Public Function Fun2(ByVal p1 As X, ByVal t2 As X) As Long Implements vbGI6504Int2(Of X, X).Fun2
                                                                          ~~~~~~~~~~~~~~~~~~~~~
     ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact, WorkItem(578723, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/578723")>
        Public Sub Bug578723()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I(Of T)
    Sub Goo(Optional x As Integer = Nothing)
End Interface
 
Class C
    Implements I(Of Integer)
 
    Public Sub Goo(Optional x As Integer = 0) Implements (Of Integer).Goo
    End Sub
End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'C' must implement 'Sub Goo([x As Integer = 0])' for interface 'I(Of Integer)'.
    Implements I(Of Integer)
               ~~~~~~~~~~~~~
BC30203: Identifier expected.
    Public Sub Goo(Optional x As Integer = 0) Implements (Of Integer).Goo
                                                         ~
                                  ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <WorkItem(783920, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/783920")>
        <Fact()>
        Public Sub Bug783920()
            Dim comp1 = CreateCompilationWithMscorlib40(
    <compilation name="Bug783920_VB">
        <file name="a.vb"><![CDATA[
Public Class MyAttribute1
    Inherits System.Attribute
End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll)
 
            Dim comp2 = CreateCompilationWithMscorlib40AndReferences(
    <compilation>
        <file name="a.vb"><![CDATA[
Public Class MyAttribute2
    Inherits MyAttribute1
End Class
        ]]></file>
    </compilation>, {New VisualBasicCompilationReference(comp1)}, TestOptions.ReleaseDll)
 
            Dim source3 =
    <compilation>
        <file name="a.vb"><![CDATA[
<MyAttribute2>
Public Class Test
End Class
        ]]></file>
    </compilation>
 
            Dim expected =
<expected><![CDATA[
BC30652: Reference required to assembly 'Bug783920_VB, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'MyAttribute1'. Add one to your project.
<MyAttribute2>
 ~~~~~~~~~~~~
]]></expected>
 
            Dim comp4 = CreateCompilationWithMscorlib40AndReferences(source3, {comp2.EmitToImageReference()}, TestOptions.ReleaseDll)
            AssertTheseDiagnostics(comp4, expected)
 
            Dim comp3 = CreateCompilationWithMscorlib40AndReferences(source3, {New VisualBasicCompilationReference(comp2)}, TestOptions.ReleaseDll)
            AssertTheseDiagnostics(comp3, expected)
        End Sub
 
        <Fact()>
        Public Sub BC30166ERR_ExpectedNewableClass1()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
    <compilation>
        <file name="a.vb"><![CDATA[
Friend Module AttrRegress006mod

    ' Need this attribute
    <System.Runtime.InteropServices.TypeLibType(System.Runtime.InteropServices.TypeLibTypeFlags.FHidden)>
    Class test
    End Class

    Sub AttrRegress006()
        'COMPILEERROR: BC30166, "Test" EDMAURER no longer giving this error.
        Dim c As New test
    End Sub
End Module]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact, WorkItem(528709, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528709")>
        Public Sub Bug528709()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Enum TestEnum
    One
    One
End Enum
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC31421: 'One' is already declared in this enum.
    One
    ~~~
                                  ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact, WorkItem(529327, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529327")>
        Public Sub Bug529327()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I1
    Property Bar As Integer
    Sub Goo()
End Interface
Interface I2
    Inherits I1
    Property Bar As Integer
    Sub Goo()
End Interface
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC40003: property 'Bar' shadows an overloadable member declared in the base interface 'I1'.  If you want to overload the base method, this method must be declared 'Overloads'.
    Property Bar As Integer
             ~~~
BC40003: sub 'Goo' shadows an overloadable member declared in the base interface 'I1'.  If you want to overload the base method, this method must be declared 'Overloads'.
    Sub Goo()
        ~~~
                                  ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact, WorkItem(531353, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531353")>
        Public Sub Bug531353()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class c1
    Shared Operator +(ByVal x As c1, ByVal y As c2) As Integer
        Return 0
    End Operator
End Class
Class c2
    Inherits c1
    'COMPILEWARNING: BC40003, "+"
    Shared Operator +(ByVal x As c1, ByVal y As c2) As Integer
        Return 0
    End Operator
End Class
        ]]></file>
    </compilation>)
 
            Dim expectedErrors1 = <errors><![CDATA[
BC40003: operator 'op_Addition' shadows an overloadable member declared in the base class 'c1'.  If you want to overload the base method, this method must be declared 'Overloads'.
    Shared Operator +(ByVal x As c1, ByVal y As c2) As Integer
                    ~
                                  ]]></errors>
 
            CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
 
        End Sub
 
        <Fact, WorkItem(1068209, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1068209")>
        Public Sub Bug1068209_01()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Interface I1
    ReadOnly Property P1 As Integer
    Sub get_P2()

    Event E1 As System.Action
    Sub remove_E2()
End Interface

Interface I3
    Inherits I1
    Overloads Sub get_P1()
    Overloads Property P2 As Integer

    Overloads Sub add_E1()
    Event E2 As System.Action
End Interface
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40014: sub 'get_P1' conflicts with a member implicitly declared for property 'P1' in the base interface 'I1' and should be declared 'Shadows'.
    Overloads Sub get_P1()
                  ~~~~~~
BC40012: property 'P2' implicitly declares 'get_P2', which conflicts with a member in the base interface 'I1', and so the property should be declared 'Shadows'.
    Overloads Property P2 As Integer
                       ~~
BC40014: sub 'add_E1' conflicts with a member implicitly declared for event 'E1' in the base interface 'I1' and should be declared 'Shadows'.
    Overloads Sub add_E1()
                  ~~~~~~
BC40012: event 'E2' implicitly declares 'remove_E2', which conflicts with a member in the base interface 'I1', and so the event should be declared 'Shadows'.
    Event E2 As System.Action
          ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact, WorkItem(1068209, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1068209")>
        Public Sub Bug1068209_02()
            Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Class I1
    ReadOnly Property P1 As Integer
        Get
            return Nothing
        End Get
    End Property

    Sub get_P2()
    End Sub

    Event E1 As System.Action

    Sub remove_E2()
    End Sub
End Class

Class I3
    Inherits I1

    Overloads Sub get_P1()
    End Sub

    Overloads ReadOnly Property P2 As Integer
        Get
            return Nothing
        End Get
    End Property

    Overloads Sub add_E1()
    End Sub

    Event E2 As System.Action
End Class
        ]]></file>
    </compilation>)
            Dim expectedErrors1 = <errors><![CDATA[
BC40014: sub 'get_P1' conflicts with a member implicitly declared for property 'P1' in the base class 'I1' and should be declared 'Shadows'.
    Overloads Sub get_P1()
                  ~~~~~~
BC40012: property 'P2' implicitly declares 'get_P2', which conflicts with a member in the base class 'I1', and so the property should be declared 'Shadows'.
    Overloads ReadOnly Property P2 As Integer
                                ~~
BC40014: sub 'add_E1' conflicts with a member implicitly declared for event 'E1' in the base class 'I1' and should be declared 'Shadows'.
    Overloads Sub add_E1()
                  ~~~~~~
BC40012: event 'E2' implicitly declares 'remove_E2', which conflicts with a member in the base class 'I1', and so the event should be declared 'Shadows'.
    Event E2 As System.Action
          ~~
                 ]]></errors>
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
        End Sub
 
        <Fact>
        Public Sub NoObsoleteDiagnosticsForProjectLevelImports_01()
            Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"GlobEnumsClass"}))
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
<System.Serializable><System.Obsolete()> 
Class GlobEnumsClass

    Public Enum xEmailMsg
        Option1
        Option2
    End Enum

End Class

Class Account
    Property Status() As xEmailMsg
End Class
        ]]></file>
    </compilation>, options:=options)
 
            CompileAndVerify(compilation).VerifyDiagnostics()
        End Sub
 
        <Fact>
        Public Sub NoObsoleteDiagnosticsForProjectLevelImports_02()
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
    <compilation>
        <file name="a.vb"><![CDATA[
Imports GlobEnumsClass

<System.Serializable><System.Obsolete()> 
Class GlobEnumsClass

    Public Enum xEmailMsg
        Option1
        Option2
    End Enum

End Class

Class Account
    Property Status() As xEmailMsg
End Class
        ]]></file>
    </compilation>, options:=TestOptions.ReleaseDll)
 
            compilation.AssertTheseDiagnostics(<expected>
BC40008: 'GlobEnumsClass' is obsolete.
Imports GlobEnumsClass
        ~~~~~~~~~~~~~~
                                               </expected>)
        End Sub
 
        <Fact>
        Public Sub MustOverrideInScript()
            Dim source = <![CDATA[
Friend MustOverride Function F() As Object
Friend MustOverride ReadOnly Property P
]]>
            Dim comp = CreateCompilationWithMscorlib461(
                {VisualBasicSyntaxTree.ParseText(source.Value, TestOptions.Script)},
                references:={SystemCoreRef})
            comp.AssertTheseDiagnostics(<expected>
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride Function F() As Object
       ~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride ReadOnly Property P
       ~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact>
        Public Sub MustOverrideInInteractive()
            Dim source = <![CDATA[
Friend MustOverride Function F() As Object
Friend MustOverride ReadOnly Property P
]]>
            Dim submission = VisualBasicCompilation.CreateScriptCompilation(
                "s0.dll",
                syntaxTree:=Parse(source.Value, TestOptions.Script),
                references:={MscorlibRef, SystemCoreRef})
            submission.AssertTheseDiagnostics(<expected>
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride Function F() As Object
       ~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride ReadOnly Property P
       ~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub MultipleForwardsOfATypeToDifferentAssembliesWithoutUsingItShouldNotReportAnError()
            Dim forwardingIL = "
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
  .ver 4:0:0:0
}
 
.assembly Forwarding
{
}
 
.module Forwarding.dll
 
.assembly extern Destination1
{
}
.assembly extern Destination2
{
}
 
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination2
}
 
.class public auto ansi beforefieldinit TestSpace.ExistingReference
       extends [mscorlib]System.Object
{
  .field public static literal string Value = ""TEST VALUE""
  .method public hidebysig specialname rtspecialname
          instance void  .ctor() cil managed
        {
            // Code size       8 (0x8)
            .maxstack  8
            IL_0000:  ldarg.0
            IL_0001:  call instance void[mscorlib] System.Object::.ctor()
            IL_0006:  nop
            IL_0007:  ret
        }
}"
            Dim ilReference = CompileIL(forwardingIL, prependDefaultHeader:=False)
 
            Dim code =
    <compilation>
        <file name="a.vb"><![CDATA[
Imports TestSpace
Namespace UserSpace
    Public Class Program
        Public Shared Sub Main()
            System.Console.WriteLine(ExistingReference.Value)
        End Sub
    End Class
End Namespace
        ]]></file>
    </compilation>
 
            CompileAndVerify(
                source:=code,
                references:={ilReference},
                expectedOutput:="TEST VALUE")
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub MultipleForwardsOfFullyQualifiedTypeToDifferentAssembliesWhileReferencingItShouldErrorOut()
            Dim userCode =
    <compilation>
        <file name="a.vb"><![CDATA[
Namespace ForwardingNamespace
    Public Class Program
        Public Shared Sub Main()
            Dim obj = New Destination.TestClass()
        End Sub
    End Class
End Namespace
        ]]></file>
    </compilation>
 
            Dim forwardingIL = "
.assembly extern Destination1
{
    .ver 1:0:0:0
}
.assembly extern Destination2
{
    .ver 1:0:0:0
}
.assembly Forwarder
{
    .ver 1:0:0:0
}
.module ForwarderModule.dll
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination2
}"
            Dim compilation = CreateCompilationWithCustomILSource(userCode, forwardingIL, appendDefaultHeader:=False)
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30002: Type 'Destination.TestClass' is not defined.
            Dim obj = New Destination.TestClass()
                          ~~~~~~~~~~~~~~~~~~~~~
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Destination.TestClass' to multiple assemblies: 'Destination1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and 'Destination2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
            Dim obj = New Destination.TestClass()
                          ~~~~~~~~~~~~~~~~~~~~~
 ]]></errors>)
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub MultipleForwardsToManyAssembliesShouldJustReportTheFirstTwo()
 
            Dim userCode =
    <compilation>
        <file name="a.vb"><![CDATA[
Namespace ForwardingNamespace
    Public Class Program
        Public Shared Sub Main()
            Dim obj = New Destination.TestClass()
        End Sub
    End Class
End Namespace
        ]]></file>
    </compilation>
 
            Dim forwardingIL = "
.assembly Forwarder
{
}
.module ForwarderModule.dll
.assembly extern Destination1 { }
.assembly extern Destination2 { }
.assembly extern Destination3 { }
.assembly extern Destination4 { }
.assembly extern Destination5 { }
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination2
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination3
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination4
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination5
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
	.assembly extern Destination2
}"
 
            Dim compilation = CreateCompilationWithCustomILSource(userCode, forwardingIL, appendDefaultHeader:=False)
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30002: Type 'Destination.TestClass' is not defined.
            Dim obj = New Destination.TestClass()
                          ~~~~~~~~~~~~~~~~~~~~~
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Destination.TestClass' to multiple assemblies: 'Destination1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'Destination2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
            Dim obj = New Destination.TestClass()
                          ~~~~~~~~~~~~~~~~~~~~~
 ]]></errors>)
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub RequiredExternalTypesForAMethodSignatureWillReportErrorsIfForwardedToMultipleAssemblies()
            ' The scenario Is that assembly A Is calling a method from assembly B. This method has a parameter of a type that lives
            ' in assembly C. If A Is compiled against B And C, it should compile successfully.
            ' Now if assembly C Is replaced with assembly C2, that forwards the type to both D1 And D2, it should fail with the appropriate error.
 
            Dim codeC = "
Namespace C
    Public Class ClassC
    End Class
End Namespace"
 
            Dim referenceC = CreateCompilationWithMscorlib40(
                source:=codeC,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="C").EmitToImageReference()
 
            Dim codeB = "
Imports C
 
Namespace B
    Public Class ClassB
        Public Shared Sub MethodB(obj As ClassC)
            System.Console.WriteLine(obj.GetHashCode())
        End Sub
    End Class
End Namespace"
 
            Dim compilationB = CreateCompilationWithMscorlib40(
                source:=codeB,
                references:={referenceC},
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="B")
 
            Dim referenceB = compilationB.EmitToImageReference()
 
            Dim codeA = "
Imports B
 
Namespace A
    Public Class ClassA
        Public Sub MethodA()
            ClassB.MethodB(Nothing)
        End Sub
    End Class
End Namespace"
 
            Dim compilation = CreateCompilationWithMscorlib40(
                source:=codeA,
                references:={referenceB, referenceC},
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="A")
 
            compilation.VerifyDiagnostics() ' No Errors
 
            Dim codeC2 = "
.assembly C { }
.module CModule.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder C.ClassC
{
	.assembly extern D1
}
.class extern forwarder C.ClassC
{
	.assembly extern D2
}"
 
            Dim referenceC2 = CompileIL(codeC2, prependDefaultHeader:=False)
 
            compilation = CreateCompilationWithMscorlib40(
                source:=codeA,
                references:={referenceB, referenceC2},
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="A")
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC37208: Module 'CModule.dll' in assembly 'C, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'C.ClassC' to multiple assemblies: 'D1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
            ClassB.MethodB(Nothing)
            ~~~~~~~~~~~~~~~~~~~~~~~
 ]]></errors>)
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub MultipleTypeForwardersToTheSameAssemblyShouldNotResultInMultipleForwardError()
            Dim codeC = "
Namespace C
    Public Class ClassC
    End Class
End Namespace"
            Dim compilationC = CreateCompilationWithMscorlib40(
                source:=codeC,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="C")
 
            Dim referenceC = compilationC.EmitToImageReference()
 
            Dim codeB = "
Imports C
 
Namespace B
    Public Class ClassB
        Public Shared Function MethodB(obj As ClassC) As String
            Return ""obj is "" + If(obj Is Nothing, ""nothing"", obj.ToString())
        End Function
    End Class
End Namespace"
            Dim compilationB = CreateCompilationWithMscorlib40(
                source:=codeB,
                references:={referenceC},
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="B")
 
            Dim referenceB = compilationB.EmitToImageReference()
 
            Dim codeA =
    <compilation>
        <file name="a.vb"><![CDATA[
Imports B

Namespace A
    Public Class ClassA
        Public Shared Sub Main()
            System.Console.WriteLine(ClassB.MethodB(Nothing))
        End Sub
    End Class
End Namespace
        ]]></file>
    </compilation>
 
            CompileAndVerify(
                source:=codeA,
                references:={referenceB, referenceC},
                expectedOutput:="obj is nothing")
 
            Dim codeC2 = "
.assembly C
{
	.ver 0:0:0:0
}
.module C.dll
.assembly extern D { }
.class extern forwarder C.ClassC
{
	.assembly extern D
}
.class extern forwarder C.ClassC
{
	.assembly extern D
}"
 
            Dim referenceC2 = CompileIL(codeC2, prependDefaultHeader:=False)
 
            Dim compilation = CreateCompilationWithMscorlib40(codeA, references:={referenceB, referenceC2})
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30652: Reference required to assembly 'D, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'ClassC'. Add one to your project.
            System.Console.WriteLine(ClassB.MethodB(Nothing))
                                     ~~~~~~~~~~~~~~~~~~~~~~~
 ]]></errors>)
 
            Dim codeD = "
Namespace C
    Public Class ClassC
    End Class
End Namespace"
            Dim referenceD = CreateCompilationWithMscorlib40(
                source:=codeD,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="D").EmitToImageReference()
 
            ' ECMA-335 "II.22.14 ExportedType : 0x27" rule 14: "Ignoring nested Types, there shall be no duplicate rows, based upon FullName [ERROR]".
            Dim verifier = CompileAndVerify(
                source:=codeA,
                references:={referenceB, referenceC2, referenceD},
                expectedOutput:="obj is nothing",
                verify:=Verification.FailsILVerify.WithILVerifyMessage("[Main]: Unable to resolve token. { Offset = 0x1, Token = 167772166 }"))
 
            verifier.VerifyIL("A.ClassA.Main()", "
{
  // Code size       12 (0xc)
  .maxstack  1
  IL_0000:  ldnull
  IL_0001:  call       ""Function B.ClassB.MethodB(C.ClassC) As String""
  IL_0006:  call       ""Sub System.Console.WriteLine(String)""
  IL_000b:  ret
}
")
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub CompilingModuleWithMultipleForwardersToDifferentAssembliesShouldErrorOut()
            Dim ilSource = "
.module ForwarderModule.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder Testspace.TestType
{
	.assembly extern D1
}
.class extern forwarder Testspace.TestType
{
	.assembly extern D2
}"
 
            Dim ilModule = GetILModuleReference(ilSource, prependDefaultHeader:=False)
            Dim compilation = CreateCompilationWithMscorlib40(
                source:=String.Empty,
                references:={ilModule},
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="Forwarder")
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Testspace.TestType' to multiple assemblies: 'D1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
]]></errors>)
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub CompilingModuleWithMultipleForwardersToTheSameAssemblyShouldNotProduceMultipleForwardingErrors()
            Dim ilSource = "
.assembly extern D { }
.class extern forwarder Testspace.TestType
{
	.assembly extern D
}
.class extern forwarder Testspace.TestType
{
	.assembly extern D
}"
 
            Dim ilModule = GetILModuleReference(ilSource, prependDefaultHeader:=False)
            Dim compilation = CreateCompilationWithMscorlib40(String.Empty, references:={ilModule}, options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
 
            CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30652: Reference required to assembly 'D, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'TestType'. Add one to your project.
]]></errors>)
 
            Dim dCode = "
Namespace Testspace
    Public Class TestType
    End Class
End Namespace"
            Dim dReference = CreateCompilationWithMscorlib40(
                source:=dCode,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="D").EmitToImageReference()
 
            ' Now compilation succeeds
            CreateCompilationWithMscorlib40(
                source:=String.Empty,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                references:={ilModule, dReference}).VerifyDiagnostics()
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub LookingUpATypeForwardedTwiceInASourceCompilationReferenceShouldFail()
            ' This test specifically tests that SourceAssembly symbols also produce this error (by using a CompilationReference instead of the usual PEAssembly symbol)
 
            Dim ilSource = "
.module ForwarderModule.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder Testspace.TestType
{
	.assembly extern D1
}
.class extern forwarder Testspace.TestType
{
	.assembly extern D2
}"
 
            Dim ilModuleReference = GetILModuleReference(ilSource, prependDefaultHeader:=False)
            Dim forwarderCompilation = CreateEmptyCompilation(
                source:=String.Empty,
                references:={ilModuleReference},
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="Forwarder")
 
            Dim vbSource = "
Namespace UserSpace
    Public Class UserClass
        Public Shared Sub Main()
            Dim obj = new Testspace.TestType()
        End Sub
    End Class
End Namespace"
 
            Dim userCompilation = CreateCompilationWithMscorlib40(
                source:=vbSource,
                references:={forwarderCompilation.ToMetadataReference()},
                assemblyName:="UserAssembly")
 
            CompilationUtils.AssertTheseDiagnostics(userCompilation, <errors><![CDATA[
BC30002: Type 'Testspace.TestType' is not defined.
            Dim obj = new Testspace.TestType()
                          ~~~~~~~~~~~~~~~~~~
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Testspace.TestType' to multiple assemblies: 'D1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
            Dim obj = new Testspace.TestType()
                          ~~~~~~~~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub ForwardingErrorsInLaterModulesAlwaysOverwriteOnesInEarlierModules()
            Dim module1IL = "
.module module1IL.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder Testspace.TestType
{
	.assembly extern D1
}
.class extern forwarder Testspace.TestType
{
	.assembly extern D2
}"
 
            Dim module1Reference = GetILModuleReference(module1IL, prependDefaultHeader:=False)
 
            Dim module2IL = "
.module module12L.dll
.assembly extern D3 { }
.assembly extern D4 { }
.class extern forwarder Testspace.TestType
{
	.assembly extern D3
}
.class extern forwarder Testspace.TestType
{
	.assembly extern D4
}"
 
            Dim module2Reference = GetILModuleReference(module2IL, prependDefaultHeader:=False)
 
            Dim forwarderCompilation = CreateEmptyCompilation(
                source:=String.Empty,
                references:={module1Reference, module2Reference},
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="Forwarder")
 
            Dim vbSource = "
Namespace UserSpace
    Public Class UserClass
        Public Shared Sub Main()
            Dim obj = new Testspace.TestType()
        End Sub
    End Class
End Namespace"
 
            Dim userCompilation = CreateCompilationWithMscorlib40(
                source:=vbSource,
                references:={forwarderCompilation.ToMetadataReference()},
                assemblyName:="UserAssembly")
 
            CompilationUtils.AssertTheseDiagnostics(userCompilation, <errors><![CDATA[
BC30002: Type 'Testspace.TestType' is not defined.
            Dim obj = new Testspace.TestType()
                          ~~~~~~~~~~~~~~~~~~
BC37208: Module 'module12L.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Testspace.TestType' to multiple assemblies: 'D3, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D4, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
            Dim obj = new Testspace.TestType()
                          ~~~~~~~~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact>
        <WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
        Public Sub MultipleForwardsThatChainResultInTheSameAssemblyShouldStillProduceAnError()
            ' The scenario Is that assembly A Is calling a method from assembly B. This method has a parameter of a type that lives
            ' in assembly C. Now if assembly C Is replaced with assembly C2, that forwards the type to both D And E, And D fowards it to E,
            ' it should fail with the appropriate error.
 
            Dim codeC = "
Namespace C
    Public Class ClassC
    End Class
End Namespace"
            Dim referenceC = CreateCompilationWithMscorlib40(
                source:=codeC,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="C").EmitToImageReference()
 
            Dim codeB = "
Imports C
 
Namespace B
    Public Class ClassB
        Public Shared Sub MethodB(obj As ClassC)
            System.Console.WriteLine(obj.GetHashCode())
        End Sub
    End Class
End Namespace"
            Dim referenceB = CreateCompilationWithMscorlib40(
                source:=codeB,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                references:={referenceC},
                assemblyName:="B").EmitToImageReference()
 
            Dim codeC2 = "
.assembly C { }
.module C.dll
.assembly extern D { }
.assembly extern E { }
.class extern forwarder C.ClassC
{
	.assembly extern D
}
.class extern forwarder C.ClassC
{
	.assembly extern E
}"
 
            Dim referenceC2 = CompileIL(codeC2, prependDefaultHeader:=False)
 
            Dim codeD = "
.assembly D { }
.assembly extern E { }
.class extern forwarder C.ClassC
{
	.assembly extern E
}"
 
            Dim referenceD = CompileIL(codeD, prependDefaultHeader:=False)
            Dim referenceE = CreateCompilationWithMscorlib40(
                source:=codeC,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                assemblyName:="E").EmitToImageReference()
 
            Dim codeA = "
Imports B
Imports C
 
Namespace A
    Public Class ClassA
        Public Sub MethodA(obj As ClassC)
            ClassB.MethodB(obj)
        End Sub
    End Class
End Namespace"
 
            Dim userCompilation = CreateCompilationWithMscorlib40(
                source:=codeA,
                options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                references:={referenceB, referenceC2, referenceD, referenceE},
                assemblyName:="A")
 
            CompilationUtils.AssertTheseDiagnostics(userCompilation, <errors><![CDATA[
BC37208: Module 'C.dll' in assembly 'C, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'C.ClassC' to multiple assemblies: 'D, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'E, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
            ClassB.MethodB(obj)
            ~~~~~~~~~~~~~~~~~~~
]]></errors>)
        End Sub
 
        <Fact>
        <WorkItem(52516, "https://github.com/dotnet/roslyn/issues/52516")>
        Public Sub ErrorInfo_01()
            Dim [error] = New MissingMetadataTypeSymbol.Nested(New UnsupportedMetadataTypeSymbol(), "Test", 0, False)
            Dim info = [error].ErrorInfo
 
            Assert.Equal(ERRID.ERR_UnsupportedType1, CType(info.Code, ERRID))
            Assert.Null([error].ContainingModule)
            Assert.Null([error].ContainingAssembly)
            Assert.NotNull([error].ContainingSymbol)
        End Sub
 
    End Class
End Namespace