Skip to content

Commit 15833b3

Browse files
committed
Destructure Rust TOML config
This will allow us to check if all values are used
1 parent f90f898 commit 15833b3

File tree

1 file changed

+108
-61
lines changed

1 file changed

+108
-61
lines changed

src/bootstrap/src/core/config/config.rs

+108-61
Original file line numberDiff line numberDiff line change
@@ -1379,9 +1379,62 @@ impl Config {
13791379
let mut omit_git_hash = None;
13801380

13811381
if let Some(rust) = toml.rust {
1382-
set(&mut config.channel, rust.channel);
1383-
1384-
config.download_rustc_commit = config.download_ci_rustc_commit(rust.download_rustc);
1382+
let Rust {
1383+
optimize: optimize_toml,
1384+
debug: debug_toml,
1385+
codegen_units,
1386+
codegen_units_std,
1387+
debug_assertions: debug_assertions_toml,
1388+
debug_assertions_std: debug_assertions_std_toml,
1389+
overflow_checks: overflow_checks_toml,
1390+
overflow_checks_std: overflow_checks_std_toml,
1391+
debug_logging: debug_logging_toml,
1392+
debuginfo_level: debuginfo_level_toml,
1393+
debuginfo_level_rustc: debuginfo_level_rustc_toml,
1394+
debuginfo_level_std: debuginfo_level_std_toml,
1395+
debuginfo_level_tools: debuginfo_level_tools_toml,
1396+
debuginfo_level_tests: debuginfo_level_tests_toml,
1397+
split_debuginfo,
1398+
run_dsymutil: _,
1399+
backtrace,
1400+
incremental,
1401+
parallel_compiler,
1402+
default_linker,
1403+
channel,
1404+
description,
1405+
musl_root,
1406+
rpath,
1407+
verbose_tests,
1408+
optimize_tests,
1409+
codegen_tests,
1410+
omit_git_hash: omit_git_hash_toml,
1411+
dist_src,
1412+
save_toolstates,
1413+
codegen_backends,
1414+
lld,
1415+
use_lld,
1416+
llvm_tools,
1417+
deny_warnings,
1418+
backtrace_on_ice,
1419+
verify_llvm_ir,
1420+
thin_lto_import_instr_limit,
1421+
remap_debuginfo,
1422+
jemalloc,
1423+
test_compare_mode,
1424+
llvm_libunwind,
1425+
control_flow_guard,
1426+
ehcont_guard,
1427+
new_symbol_mangling,
1428+
profile_generate,
1429+
profile_use,
1430+
download_rustc,
1431+
lto,
1432+
validate_mir_opts,
1433+
} = rust;
1434+
1435+
set(&mut config.channel, channel);
1436+
1437+
config.download_rustc_commit = config.download_ci_rustc_commit(download_rustc);
13851438
// This list is incomplete, please help by expanding it!
13861439
if config.download_rustc_commit.is_some() {
13871440
// We need the channel used by the downloaded compiler to match the one we set for rustdoc;
@@ -1398,68 +1451,65 @@ impl Config {
13981451
}
13991452
}
14001453

1401-
debug = rust.debug;
1402-
debug_assertions = rust.debug_assertions;
1403-
debug_assertions_std = rust.debug_assertions_std;
1404-
overflow_checks = rust.overflow_checks;
1405-
overflow_checks_std = rust.overflow_checks_std;
1406-
debug_logging = rust.debug_logging;
1407-
debuginfo_level = rust.debuginfo_level;
1408-
debuginfo_level_rustc = rust.debuginfo_level_rustc;
1409-
debuginfo_level_std = rust.debuginfo_level_std;
1410-
debuginfo_level_tools = rust.debuginfo_level_tools;
1411-
debuginfo_level_tests = rust.debuginfo_level_tests;
1412-
1413-
config.rust_split_debuginfo = rust
1414-
.split_debuginfo
1454+
debug = debug_toml;
1455+
debug_assertions = debug_assertions_toml;
1456+
debug_assertions_std = debug_assertions_std_toml;
1457+
overflow_checks = overflow_checks_toml;
1458+
overflow_checks_std = overflow_checks_std_toml;
1459+
debug_logging = debug_logging_toml;
1460+
debuginfo_level = debuginfo_level_toml;
1461+
debuginfo_level_rustc = debuginfo_level_rustc_toml;
1462+
debuginfo_level_std = debuginfo_level_std_toml;
1463+
debuginfo_level_tools = debuginfo_level_tools_toml;
1464+
debuginfo_level_tests = debuginfo_level_tests_toml;
1465+
1466+
config.rust_split_debuginfo = split_debuginfo
14151467
.as_deref()
14161468
.map(SplitDebuginfo::from_str)
14171469
.map(|v| v.expect("invalid value for rust.split_debuginfo"))
14181470
.unwrap_or(SplitDebuginfo::default_for_platform(&config.build.triple));
1419-
optimize = rust.optimize;
1420-
omit_git_hash = rust.omit_git_hash;
1421-
config.rust_new_symbol_mangling = rust.new_symbol_mangling;
1422-
set(&mut config.rust_optimize_tests, rust.optimize_tests);
1423-
set(&mut config.codegen_tests, rust.codegen_tests);
1424-
set(&mut config.rust_rpath, rust.rpath);
1425-
set(&mut config.jemalloc, rust.jemalloc);
1426-
set(&mut config.test_compare_mode, rust.test_compare_mode);
1427-
set(&mut config.backtrace, rust.backtrace);
1428-
config.description = rust.description;
1429-
set(&mut config.rust_dist_src, rust.dist_src);
1430-
set(&mut config.verbose_tests, rust.verbose_tests);
1471+
optimize = optimize_toml;
1472+
omit_git_hash = omit_git_hash_toml;
1473+
config.rust_new_symbol_mangling = new_symbol_mangling;
1474+
set(&mut config.rust_optimize_tests, optimize_tests);
1475+
set(&mut config.codegen_tests, codegen_tests);
1476+
set(&mut config.rust_rpath, rpath);
1477+
set(&mut config.jemalloc, jemalloc);
1478+
set(&mut config.test_compare_mode, test_compare_mode);
1479+
set(&mut config.backtrace, backtrace);
1480+
config.description = description;
1481+
set(&mut config.rust_dist_src, dist_src);
1482+
set(&mut config.verbose_tests, verbose_tests);
14311483
// in the case "false" is set explicitly, do not overwrite the command line args
1432-
if let Some(true) = rust.incremental {
1484+
if let Some(true) = incremental {
14331485
config.incremental = true;
14341486
}
1435-
set(&mut config.use_lld, rust.use_lld);
1436-
set(&mut config.lld_enabled, rust.lld);
1437-
set(&mut config.llvm_tools_enabled, rust.llvm_tools);
1438-
config.rustc_parallel = rust
1439-
.parallel_compiler
1440-
.unwrap_or(config.channel == "dev" || config.channel == "nightly");
1441-
config.rustc_default_linker = rust.default_linker;
1442-
config.musl_root = rust.musl_root.map(PathBuf::from);
1443-
config.save_toolstates = rust.save_toolstates.map(PathBuf::from);
1487+
set(&mut config.use_lld, use_lld);
1488+
set(&mut config.lld_enabled, lld);
1489+
set(&mut config.llvm_tools_enabled, llvm_tools);
1490+
config.rustc_parallel =
1491+
parallel_compiler.unwrap_or(config.channel == "dev" || config.channel == "nightly");
1492+
config.rustc_default_linker = default_linker;
1493+
config.musl_root = musl_root.map(PathBuf::from);
1494+
config.save_toolstates = save_toolstates.map(PathBuf::from);
14441495
set(
14451496
&mut config.deny_warnings,
14461497
match flags.warnings {
14471498
Warnings::Deny => Some(true),
14481499
Warnings::Warn => Some(false),
1449-
Warnings::Default => rust.deny_warnings,
1500+
Warnings::Default => deny_warnings,
14501501
},
14511502
);
1452-
set(&mut config.backtrace_on_ice, rust.backtrace_on_ice);
1453-
set(&mut config.rust_verify_llvm_ir, rust.verify_llvm_ir);
1454-
config.rust_thin_lto_import_instr_limit = rust.thin_lto_import_instr_limit;
1455-
set(&mut config.rust_remap_debuginfo, rust.remap_debuginfo);
1456-
set(&mut config.control_flow_guard, rust.control_flow_guard);
1457-
set(&mut config.ehcont_guard, rust.ehcont_guard);
1458-
config.llvm_libunwind_default = rust
1459-
.llvm_libunwind
1460-
.map(|v| v.parse().expect("failed to parse rust.llvm-libunwind"));
1461-
1462-
if let Some(ref backends) = rust.codegen_backends {
1503+
set(&mut config.backtrace_on_ice, backtrace_on_ice);
1504+
set(&mut config.rust_verify_llvm_ir, verify_llvm_ir);
1505+
config.rust_thin_lto_import_instr_limit = thin_lto_import_instr_limit;
1506+
set(&mut config.rust_remap_debuginfo, remap_debuginfo);
1507+
set(&mut config.control_flow_guard, control_flow_guard);
1508+
set(&mut config.ehcont_guard, ehcont_guard);
1509+
config.llvm_libunwind_default =
1510+
llvm_libunwind.map(|v| v.parse().expect("failed to parse rust.llvm-libunwind"));
1511+
1512+
if let Some(ref backends) = codegen_backends {
14631513
let available_backends = vec!["llvm", "cranelift", "gcc"];
14641514

14651515
config.rust_codegen_backends = backends.iter().map(|s| {
@@ -1477,16 +1527,13 @@ impl Config {
14771527
}).collect();
14781528
}
14791529

1480-
config.rust_codegen_units = rust.codegen_units.map(threads_from_config);
1481-
config.rust_codegen_units_std = rust.codegen_units_std.map(threads_from_config);
1482-
config.rust_profile_use = flags.rust_profile_use.or(rust.profile_use);
1483-
config.rust_profile_generate = flags.rust_profile_generate.or(rust.profile_generate);
1484-
config.rust_lto = rust
1485-
.lto
1486-
.as_deref()
1487-
.map(|value| RustcLto::from_str(value).unwrap())
1488-
.unwrap_or_default();
1489-
config.rust_validate_mir_opts = rust.validate_mir_opts;
1530+
config.rust_codegen_units = codegen_units.map(threads_from_config);
1531+
config.rust_codegen_units_std = codegen_units_std.map(threads_from_config);
1532+
config.rust_profile_use = flags.rust_profile_use.or(profile_use);
1533+
config.rust_profile_generate = flags.rust_profile_generate.or(profile_generate);
1534+
config.rust_lto =
1535+
lto.as_deref().map(|value| RustcLto::from_str(value).unwrap()).unwrap_or_default();
1536+
config.rust_validate_mir_opts = validate_mir_opts;
14901537
} else {
14911538
config.rust_profile_use = flags.rust_profile_use;
14921539
config.rust_profile_generate = flags.rust_profile_generate;

0 commit comments

Comments
 (0)