Skip to content

Commit d49b29e

Browse files
authored
Avoid cycle caused by calculation of ObsoleteState/ExperimentalState. (#70171)
* Avoid cycle caused by calculation of ObsoleteState/ExperimentalState. Fixes #70007. * Add C# test * More tests
1 parent 6d59156 commit d49b29e

File tree

3 files changed

+139
-1
lines changed

3 files changed

+139
-1
lines changed

src/Compilers/CSharp/Test/Semantic/Semantics/BindingTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3907,5 +3907,27 @@ void N()
39073907
var typeInfo = model.GetTypeInfo(lambda.Body);
39083908
Assert.Equal("System.Int32", typeInfo.Type.ToTestDisplayString());
39093909
}
3910+
3911+
[Fact]
3912+
[WorkItem("https://github.com/dotnet/roslyn/issues/70007")]
3913+
public void CycleThroughAttribute()
3914+
{
3915+
var compilation = CreateCompilation(@"
3916+
using System.Reflection;
3917+
3918+
[assembly: AssemblyVersion(MainVersion.CurrentVersion)]
3919+
3920+
public class MainVersion
3921+
{
3922+
public const string Hauptversion = ""8"";
3923+
public const string Nebenversion = ""2"";
3924+
public const string Build = ""0"";
3925+
public const string Revision = ""1"";
3926+
3927+
public const string CurrentVersion = Hauptversion + ""."" + Nebenversion + ""."" + Build + ""."" + Revision;
3928+
}
3929+
");
3930+
CompileAndVerify(compilation).VerifyDiagnostics();
3931+
}
39103932
}
39113933
}

src/Compilers/VisualBasic/Portable/Binding/Binder_Initializers.vb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
550550
End If
551551

552552
Dim boundInitValueHasErrorsOrConstTypeIsWrong As Boolean =
553-
initValueDiagnostics.HasAnyErrors OrElse fieldSymbol.HasDeclaredType AndAlso Not targetType.IsValidTypeForConstField()
553+
initValueDiagnostics.HasAnyResolvedErrors OrElse fieldSymbol.HasDeclaredType AndAlso Not targetType.IsValidTypeForConstField()
554554

555555
' NOTE: we'll only report ERR_RequiredConstConversion2 ("Conversion from '...' to '.' cannot occur in
556556
' NOTE: a constant expression") and ERR_RequiredConstExpr ("Constant expression is required") in case

src/Compilers/VisualBasic/Test/Semantic/Binding/Binder_Expressions_Tests.vb

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3446,5 +3446,121 @@ End Class </file>
34463446

34473447
CompileAndVerify(compilation, expectedOutput:="42")
34483448
End Sub
3449+
3450+
<WorkItem("https://github.com/dotnet/roslyn/issues/70007")>
3451+
<Fact()>
3452+
Public Sub CycleThroughAttribute_01()
3453+
Dim compilation = CreateCompilation(
3454+
<compilation>
3455+
<file name="a.vb"><![CDATA[
3456+
Imports System.Reflection
3457+
3458+
<Assembly: AssemblyVersion(MainVersion.CurrentVersion)>
3459+
3460+
Public Class MainVersion
3461+
Public Const Hauptversion As String = "8"
3462+
Public Const Nebenversion As String = "2"
3463+
Public Const Build As String = "0"
3464+
Public Const Revision As String = "1"
3465+
3466+
Public Const CurrentVersion As String = Hauptversion & "." & Nebenversion & "." & Build & "." & Revision
3467+
End Class
3468+
]]></file>
3469+
</compilation>)
3470+
3471+
CompileAndVerify(compilation).VerifyDiagnostics()
3472+
End Sub
3473+
3474+
<WorkItem("https://github.com/dotnet/roslyn/issues/70007")>
3475+
<Fact()>
3476+
Public Sub CycleThroughAttribute_02()
3477+
Dim compilation = CreateCompilation(
3478+
<compilation>
3479+
<file name="a.vb"><![CDATA[
3480+
<Module: MyAttribute(MainVersion.CurrentVersion)>
3481+
3482+
Public Class MainVersion
3483+
Public Const Hauptversion As String = "8"
3484+
Public Const Nebenversion As String = "2"
3485+
Public Const Build As String = "0"
3486+
Public Const Revision As String = "1"
3487+
3488+
Public Const CurrentVersion As String = Hauptversion & "." & Nebenversion & "." & Build & "." & Revision
3489+
End Class
3490+
3491+
class MyAttribute
3492+
Inherits System.Attribute
3493+
3494+
Sub New(x as String)
3495+
End Sub
3496+
End Class
3497+
]]></file>
3498+
</compilation>)
3499+
3500+
CompileAndVerify(compilation).VerifyDiagnostics()
3501+
End Sub
3502+
3503+
<WorkItem("https://github.com/dotnet/roslyn/issues/70007")>
3504+
<Fact()>
3505+
Public Sub CycleThroughAttribute_03()
3506+
Dim compilation = CreateCompilation(
3507+
<compilation>
3508+
<file name="a.vb"><![CDATA[
3509+
<MyAttribute(MainVersion.CurrentVersion)>
3510+
Public Class MainVersion
3511+
Public Const Hauptversion As String = "8"
3512+
Public Const Nebenversion As String = "2"
3513+
Public Const Build As String = "0"
3514+
Public Const Revision As String = "1"
3515+
3516+
Public Const CurrentVersion As String = Hauptversion & "." & Nebenversion & "." & Build & "." & Revision
3517+
End Class
3518+
3519+
class MyAttribute
3520+
Inherits System.Attribute
3521+
3522+
Sub New(x as String)
3523+
End Sub
3524+
End Class
3525+
]]></file>
3526+
</compilation>)
3527+
3528+
CompileAndVerify(compilation).VerifyDiagnostics()
3529+
End Sub
3530+
3531+
<WorkItem("https://github.com/dotnet/roslyn/issues/70007")>
3532+
<Fact()>
3533+
Public Sub CycleThroughAttribute_04()
3534+
Dim compilation = CreateCompilation(
3535+
<compilation>
3536+
<file name="a.vb"><![CDATA[
3537+
Imports System.Reflection
3538+
3539+
<Assembly: AssemblyVersion(MainVersion.CurrentVersion)>
3540+
3541+
<Module: MyAttribute(MainVersion.CurrentVersion)>
3542+
3543+
<MyAttribute(MainVersion.CurrentVersion)>
3544+
Public Class MainVersion
3545+
Public Const Hauptversion As String = "8"
3546+
Public Const Nebenversion As String = "2"
3547+
Public Const Build As String = "0"
3548+
Public Const Revision As String = "1"
3549+
3550+
Public Const CurrentVersion As String = Hauptversion & "." & Nebenversion & "." & Build & "." & Revision
3551+
End Class
3552+
3553+
class MyAttribute
3554+
Inherits System.Attribute
3555+
3556+
Sub New(x as String)
3557+
End Sub
3558+
End Class
3559+
]]></file>
3560+
</compilation>)
3561+
3562+
CompileAndVerify(compilation).VerifyDiagnostics()
3563+
End Sub
3564+
34493565
End Class
34503566
End Namespace

0 commit comments

Comments
 (0)