提交 6f30a310 编写于 作者: J Julien Couvreur 提交者: GitHub

Handle pointer type constraint by ignoring it (#15942)

上级 9b67e25d
......@@ -230,6 +230,11 @@ internal static class ConstraintsHelper
constraintDeducedBase = constraintType;
break;
case TypeKind.Pointer:
// Such a constraint can only be introduced by type substitution,
// in which case it is already reported elsewhere, so we ignore this constraint.
continue;
case TypeKind.Submission:
default:
throw ExceptionUtilities.UnexpectedValue(constraintType.TypeKind);
......
......@@ -6685,5 +6685,35 @@ partial class Class4
Diagnostic(ErrorCode.WRN_DeprecatedSymbol, "Class2").WithArguments("Class2").WithLocation(30, 36)
);
}
[Fact]
[WorkItem(278264, "https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?id=278264")]
public void IntPointerConstraintIntroducedBySubstitution()
{
string source = @"
class R1<T1>
{
public virtual void f<T2>() where T2 : T1 { }
}
class R2 : R1<int*>
{
public override void f<T2>() { }
}
class Program
{
static void Main(string[] args)
{
R2 r = new R2();
r.f<int>();
}
}";
var compilation = CreateCompilationWithMscorlib(source);
compilation.VerifyDiagnostics(
// (6,7): error CS0306: The type 'int*' may not be used as a type argument
// class R2 : R1<int *>
Diagnostic(ErrorCode.ERR_BadTypeArgument, "R2").WithArguments("int*").WithLocation(6, 7)
);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册