diff --git a/src/Compilers/VisualBasic/Portable/Symbols/Source/SourceMethodSymbol.vb b/src/Compilers/VisualBasic/Portable/Symbols/Source/SourceMethodSymbol.vb index f72d9d7a581f6..d8d928756aa88 100644 --- a/src/Compilers/VisualBasic/Portable/Symbols/Source/SourceMethodSymbol.vb +++ b/src/Compilers/VisualBasic/Portable/Symbols/Source/SourceMethodSymbol.vb @@ -1721,6 +1721,8 @@ lReportErrorOnTwoTokens: End If ElseIf VerifyObsoleteAttributeAppliedToMethod(arguments, AttributeDescription.ObsoleteAttribute) Then ElseIf VerifyObsoleteAttributeAppliedToMethod(arguments, AttributeDescription.DeprecatedAttribute) Then + ElseIf arguments.Attribute.IsTargetAttribute(Me, AttributeDescription.ModuleInitializerAttribute) Then + arguments.Diagnostics.Add(ERRID.WRN_AttributeNotSupportedInVB, arguments.AttributeSyntaxOpt.Location, AttributeDescription.ModuleInitializerAttribute.FullName) Else Dim methodImpl As MethodSymbol = If(Me.IsPartial, PartialImplementationPart, Me) diff --git a/src/Compilers/VisualBasic/Test/Emit/Attributes/AttributeTests_WellKnownAttributes.vb b/src/Compilers/VisualBasic/Test/Emit/Attributes/AttributeTests_WellKnownAttributes.vb index 5a0d76947435e..2879dbadd8fd6 100644 --- a/src/Compilers/VisualBasic/Test/Emit/Attributes/AttributeTests_WellKnownAttributes.vb +++ b/src/Compilers/VisualBasic/Test/Emit/Attributes/AttributeTests_WellKnownAttributes.vb @@ -5812,6 +5812,413 @@ BC30657: 'sc1_method' has a return type that is not supported or parameter types ]]>) End Sub +#End Region + +#Region "ModuleInitializerAttribute" + + Public Sub ModuleInitializerAttributeOnMethod() + Dim source = + + + Sub S() + End Sub + + + Function F() As Integer + Return 1 + End Function +End Class +]]> + + + + Dim compilation = CreateCompilationWithMscorlib40(source) + CompilationUtils.AssertTheseDiagnostics(compilation, + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +BC42381: 'System.Runtime.CompilerServices.ModuleInitializerAttribute' is not supported in VB. + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +]]>) + End Sub + + + Public Sub ModuleInitializerAttributeOnClass() + Dim source = + + +Class C +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnProperty() + Dim source = + + + Property P As Integer + Get + Return 1 + End Get + + Set + End Set + End Property +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnAccessors() + Dim source = + + + Get + Return 1 + End Get + + + Set + End Set + End Property +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertTheseDiagnostics(comp, + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +BC42381: 'System.Runtime.CompilerServices.ModuleInitializerAttribute' is not supported in VB. + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +]]>) + End Sub + + + Public Sub ModuleInitializerAttributeOnModule() + Dim source = + + + +Namespace System.Runtime.CompilerServices + Class ModuleInitializerAttribute + Inherits System.Attribute + End Class +End Namespace +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnAssembly() + Dim source = + + + +Namespace System.Runtime.CompilerServices + Class ModuleInitializerAttribute + Inherits System.Attribute + End Class +End Namespace +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnEnum() + Dim source = + + +Enum E + Member +End Enum +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnEnumMember() + Dim source = + + + Member1 + + Member2 +End Enum +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnEvent() + Dim source = + + + Event E(ByVal i As Integer) +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnDelegate() + Dim source = + + + Delegate Sub D() +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnInterface() + Dim source = + + +Interface I +End Interface +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnStructure() + Dim source = + + +Structure S +End Structure +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnReturnValue() + Dim source = + + Integer + Return 1 + End Function +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnParameter() + Dim source = + + ByVal i As Integer) + End Sub +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + + + Public Sub ModuleInitializerAttributeOnField() + Dim source = + + + Dim i As Integer +End Class +]]> + + + + + Dim comp = CreateCompilationWithMscorlib40(source) + + CompilationUtils.AssertNoDiagnostics(comp) + End Sub + #End Region