未验证 提交 0d217f9d 编写于 作者: C Charles Stoner 提交者: GitHub

Report errors binding to native integer operations with -langversion:8 (#47388)

上级 f9b3987d
......@@ -166,6 +166,8 @@ private BoundExpression BindCompoundAssignment(AssignmentExpressionSyntax node,
BinaryOperatorSignature bestSignature = best.Signature;
CheckNativeIntegerFeatureAvailability(bestSignature.Kind, node, diagnostics);
if (CheckOverflowAtRuntime)
{
bestSignature = new BinaryOperatorSignature(
......@@ -571,6 +573,8 @@ private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, Di
break;
}
CheckNativeIntegerFeatureAvailability(resultOperatorKind, node, diagnostics);
TypeSymbol resultType = signature.ReturnType;
BoundExpression resultLeft = left;
BoundExpression resultRight = right;
......@@ -2108,6 +2112,8 @@ private BoundExpression BindIncrementOperator(CSharpSyntaxNode node, ExpressionS
var signature = best.Signature;
CheckNativeIntegerFeatureAvailability(signature.Kind, node, diagnostics);
HashSet<DiagnosticInfo> useSiteDiagnostics = null;
var resultConversion = Conversions.ClassifyConversionFromType(signature.ReturnType, operandType, ref useSiteDiagnostics);
diagnostics.Add(node, useSiteDiagnostics);
......@@ -2479,6 +2485,8 @@ private BoundExpression BindUnaryOperatorCore(CSharpSyntaxNode node, string oper
var resultMethod = signature.Method;
var resultConstant = FoldUnaryOperator(node, resultOperatorKind, resultOperand, resultType.SpecialType, diagnostics);
CheckNativeIntegerFeatureAvailability(resultOperatorKind, node, diagnostics);
return new BoundUnaryOperator(
node,
resultOperatorKind.WithOverflowChecksIfApplicable(CheckOverflowAtRuntime),
......@@ -3994,5 +4002,27 @@ private static ConstantValue FoldConditionalOperator(BoundExpression condition,
return ConstantValue.Bad;
}
}
private static void CheckNativeIntegerFeatureAvailability(BinaryOperatorKind operatorKind, SyntaxNode syntax, DiagnosticBag diagnostics)
{
switch (operatorKind & BinaryOperatorKind.TypeMask)
{
case BinaryOperatorKind.NInt:
case BinaryOperatorKind.NUInt:
CheckFeatureAvailability(syntax, MessageID.IDS_FeatureNativeInt, diagnostics);
break;
}
}
private static void CheckNativeIntegerFeatureAvailability(UnaryOperatorKind operatorKind, SyntaxNode syntax, DiagnosticBag diagnostics)
{
switch (operatorKind & UnaryOperatorKind.TypeMask)
{
case UnaryOperatorKind.NInt:
case UnaryOperatorKind.NUInt:
CheckFeatureAvailability(syntax, MessageID.IDS_FeatureNativeInt, diagnostics);
break;
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册