本月测试基础设施动态:2024 年 10 月
这是对 rust-lang/rust 仓库1 2024 年 10 月2 测试基础设施变更的快速总结。它还包括对正在进行的工作的简要描述。
与往常一样,如果您在使用我们的测试基础设施时遇到错误或用户体验问题,请提交一个 issue。如果我们不知道它们,错误和小的瑕疵就无法修复!
感谢所有为我们的测试基础设施做出贡献的人!
亮点
compiletest
现在支持自带自定义 diff 工具
compiletest
(和 bootstrap)现在支持自带自定义 diff 工具 (#131181).
这只会影响视觉差异的生成(即,也许你喜欢不同的视觉风格)。.stderr
快照等不受影响。
如果你想使用你最喜欢的 diff 工具来生成视觉差异,你可以修改 config.toml
的 build.compiletest-diff-tool
选项。
[build]
# What custom diff tool to use for displaying compiletest tests.
#compiletest-diff-tool = <none>
感谢 @dev-ardi
的实现!
minicore
测试辅助和 //@ add-core-stubs
指令
ui
, assembly
和 codegen
测试现在可以使用 //@ add-core-stubs
指令有条件地构建一个 minicore
测试辅助,该辅助提供 core
存根 (#130693)。这样做是为了我们可以在只需要为交叉编译目标构建的交叉编译测试之间共享 core
存根,并避免在每个这样的测试中重复发明和维护重复的 minicore
副本3。
以前,每次你想添加一个不同的 ui
/assembly
/codegen
测试(例如,检查交叉编译 ABI)时,都必须重新发明一个 minicore
,这是导致贡献者摩擦的一个重要来源,并且更容易在 minicore
副本中引入错误。对于想要引入新的 lang item 的编译器贡献者来说,这也特别烦人,因为他们发现自己不得不更新多个这样的 core
存根副本。
请注意,目前,共享的 tests/auxiliary/minicore.rs
测试辅助仍然非常少。计划是先落实测试基础设施,然后我们可以逐步向共享的测试辅助添加更多 core
存根。
用法示例
// tests/ui/abi/my-abi-test.rs
//@ add-core-stubs
//@ compile-flags: --target x86_64-pc-windows-msvc
//@ needs-llvm-components: x86
#![crate_type = "lib"]
#![feature(no_core)]
#![no_std]
#![no_core]
extern crate minicore;
use minicore::*;
struct Meow;
impl Copy for Meow {} // `Copy` is provided by `minicore`!
有关原始动机的更多信息,请参阅上下文 issue、MCP 和 跟踪 issue。有关用法示例,请参阅rustc-dev-guide 章节。
PR 列表
改进
- 通用测试基础设施:添加
minicore
测试辅助并在ui
/assembly
/codegen
测试中支持//@ add-core-stubs
指令 #130693 - compiletest: 添加测试基础设施,以显式测试禁用
autodiff
/enzyme
的 rustc #131470 - compiletest: 针对检查构建失败的
build-fail
测试的特殊情况错误消息 #131642 - compiletest: 记录 compiletest 的 lib.rs 的各个部分 #131679
- compiletest: 修复 run-make 测试输出目录中不必要的嵌套 #131764
- compiletest: 在使用修订版时警告冗余的 --cfg 指令 #131925
- compiletest: 将 html-tidy 与 rust tidy 工具区分开来 #131941
- compiletest: 自定义差异工具 #131181
- compiletest: 不允许与内置
cfg
冲突的测试修订版 #131930 - compiletest: 动态链接 run-make 支持 #132225
- compiletest: 提高 LLVM 版本处理的健壮性 #132315
- compiletest: 添加 “reference” 作为已知的 compiletest 标头 #1313824
tests/run-make
, CI: 添加aarch64-gnu-debug
作业 #131207- meta: 使用 A-compiletest 标记影响 compiletest 的 PR #131682
修复
- compiletest: 修复 run-make 测试的最新检查 #131681
- compiletest: 抑制 run-make 测试的 Windows 错误报告 (WER)5
- compiletest: 在 run-make 测试中尝试使用修订版时出错 #131614
tests/run-make
, CI: 在x86_64-gnu-debug
中运行完整的 stage 2run-make
测试套件 #131917- bootstrap,
tests/run-make
: 当 CI rustc 可用时,不要从之前的编译器进行 stage-off #132006 - bootstrap,
tests/mir-opt
: 为mir-opt
测试套件匹配主机和目标的 stdRUSTFLAGS
,以修复双重 std 构建/重建 #131442 - emscripten:修复 bootstrap 和 compiletest 对 emscripten 目标测试的处理,作为 修复 emscripten 目标上大多数 ui 测试 #131705 的一部分
清理
- compiletest: 将 auxiliary-crate 属性提取到它们自己的模块/结构中 #131541
- compiletest: 将指令
needs-profiler-support
重命名为needs-profiler-runtime
#131429 - compiletest: 将调试器设置代码移出 lib.rs #131638
- compiletest: 删除检查指令原始行的唯一代码 #131585
- compiletest: 将测试集合上下文/状态存储在两个结构中 #131870
- compiletest: 整理 tidy 和 tidy(html 版本)的歧义消除方式 #131961
- compiletest: 使
line_directive
返回DirectiveLine
#132033 - compiletest: 将
command-list.rs
重命名为directive-list.rs
#132313 - compiletest: 删除使用
lto=thin
查找输出的魔法 hack #131524 - compiletest: 简化汇编测试的
--emit
模式的选择 #131525 - compiletest: 将调试器设置代码移出 lib.rs #131638
文档更新
- rustc-dev-guide: 记录 compiletest 指令
ignore-coverage-map
和ignore-coverage-run
#2094 - rustc-dev-guide: 将
needs-profiler-support
重命名为needs-profiler-runtime
#2095 - rustc-dev-guide: 修复并更新
needs-force-clang-based-tests
的文档 #2085 - rustc-dev-guide: 为 integration-testing 和 headers 添加重定向 #2092
- rustc-dev-guide: 描述 minicore 测试辅助和指令 #2097
- rustc-dev-guide: 修复 minicore.rs 链接 #2122
- rustc-dev-guide: 为
reference
compiletest 标头添加链接 #2096
正在进行的工作
注意:肯定还有更多自发的工作,这更多的是我知道“计划中”的。
-
这里的测试基础设施指的是测试工具 compiletest 和我们的构建系统 bootstrap 中的支持组件。这个测试基础设施主要被 rustc 和 rustdoc 使用。其他工具,如 cargo、miri 或 rustfmt,维护它们自己的测试基础设施。↩
-
具体来说是 2024-10-09 到 2024-11-04。请注意,之前的问题错误地在文件名和 URL 中使用了 10 月,但实际上是 9 月的问题。↩
-
你可以说我们目前更像是一个...“多核”的情况,呵呵。↩
-
这是 T-spec 将测试与参考规则关联起来的工作的一部分。↩
-
如果您想查看
run-make
测试套件中未抑制的 Windows 错误报告是什么样子,请参阅 https://github.com/rust-lang/rust/issues/132092#issuecomment-2436615833。↩