Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
b71f2bec
R
Rust
项目概览
int
/
Rust
12 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b71f2bec
编写于
8月 04, 2023
作者:
U
Urgau
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Avoid invalid NaN lint machine-applicable suggestion in const context
上级
c435af0d
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
9 addition
and
11 deletion
+9
-11
compiler/rustc_lint/src/lints.rs
compiler/rustc_lint/src/lints.rs
+1
-1
compiler/rustc_lint/src/types.rs
compiler/rustc_lint/src/types.rs
+8
-5
tests/ui/lint/invalid-nan-comparison.stderr
tests/ui/lint/invalid-nan-comparison.stderr
+0
-5
未找到文件。
compiler/rustc_lint/src/lints.rs
浏览文件 @
b71f2bec
...
...
@@ -1467,7 +1467,7 @@ pub enum InvalidNanComparisons {
#[diag(lint_invalid_nan_comparisons_eq_ne)]
EqNe
{
#[subdiagnostic]
suggestion
:
InvalidNanComparisonsSuggestion
,
suggestion
:
Option
<
InvalidNanComparisonsSuggestion
>
,
},
#[diag(lint_invalid_nan_comparisons_lt_le_gt_ge)]
LtLeGtGe
,
...
...
compiler/rustc_lint/src/types.rs
浏览文件 @
b71f2bec
...
...
@@ -572,32 +572,35 @@ fn is_nan(cx: &LateContext<'_>, expr: &hir::Expr<'_>) -> bool {
}
fn
eq_ne
(
cx
:
&
LateContext
<
'_
>
,
e
:
&
hir
::
Expr
<
'_
>
,
l
:
&
hir
::
Expr
<
'_
>
,
r
:
&
hir
::
Expr
<
'_
>
,
f
:
impl
FnOnce
(
Span
,
Span
)
->
InvalidNanComparisonsSuggestion
,
)
->
InvalidNanComparisons
{
let
suggestion
=
let
suggestion
=
(
!
cx
.tcx
.hir
()
.is_inside_const_context
(
e
.hir_id
))
.then
(||
{
if
let
Some
(
l_span
)
=
l
.span
.find_ancestor_inside
(
e
.span
)
&&
let
Some
(
r_span
)
=
r
.span
.find_ancestor_inside
(
e
.span
)
{
let
Some
(
r_span
)
=
r
.span
.find_ancestor_inside
(
e
.span
)
{
f
(
l_span
,
r_span
)
}
else
{
InvalidNanComparisonsSuggestion
::
Spanless
};
}
});
InvalidNanComparisons
::
EqNe
{
suggestion
}
}
let
lint
=
match
binop
.node
{
hir
::
BinOpKind
::
Eq
|
hir
::
BinOpKind
::
Ne
if
is_nan
(
cx
,
l
)
=>
{
eq_ne
(
e
,
l
,
r
,
|
l_span
,
r_span
|
InvalidNanComparisonsSuggestion
::
Spanful
{
eq_ne
(
cx
,
e
,
l
,
r
,
|
l_span
,
r_span
|
InvalidNanComparisonsSuggestion
::
Spanful
{
nan_plus_binop
:
l_span
.until
(
r_span
),
float
:
r_span
.shrink_to_hi
(),
neg
:
(
binop
.node
==
hir
::
BinOpKind
::
Ne
)
.then
(||
r_span
.shrink_to_lo
()),
})
}
hir
::
BinOpKind
::
Eq
|
hir
::
BinOpKind
::
Ne
if
is_nan
(
cx
,
r
)
=>
{
eq_ne
(
e
,
l
,
r
,
|
l_span
,
r_span
|
InvalidNanComparisonsSuggestion
::
Spanful
{
eq_ne
(
cx
,
e
,
l
,
r
,
|
l_span
,
r_span
|
InvalidNanComparisonsSuggestion
::
Spanful
{
nan_plus_binop
:
l_span
.shrink_to_hi
()
.to
(
r_span
),
float
:
l_span
.shrink_to_hi
(),
neg
:
(
binop
.node
==
hir
::
BinOpKind
::
Ne
)
.then
(||
l_span
.shrink_to_lo
()),
...
...
tests/ui/lint/invalid-nan-comparison.stderr
浏览文件 @
b71f2bec
...
...
@@ -5,11 +5,6 @@ LL | const TEST: bool = 5f32 == f32::NAN;
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(invalid_nan_comparisons)]` on by default
help: use `f32::is_nan()` or `f64::is_nan()` instead
|
LL - const TEST: bool = 5f32 == f32::NAN;
LL + const TEST: bool = 5f32.is_nan();
|
warning: incorrect NaN comparison, NaN cannot be directly compared to itself
--> $DIR/invalid-nan-comparison.rs:14:5
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录