Auto merge of #143157 - matthiaskrgr:rollup-90rtm3a, r=matthiaskrgr
Rollup of 9 pull requests Successful merges: - rust-lang/rust#123476 (std::net: adding `unix_socket_exclbind` feature for solaris/illumos.) - rust-lang/rust#142708 (Do not include NUL-terminator in computed length) - rust-lang/rust#142963 (Skip unnecessary components in x64 try builds) - rust-lang/rust#142987 (rustdoc: show attributes on enum variants) - rust-lang/rust#143031 (Add windows-gnullvm hosts to the manifest) - rust-lang/rust#143082 (update internal `send_signal` comment) - rust-lang/rust#143110 (Use tidy to sort `sym::*` items) - rust-lang/rust#143111 (BTreeSet: remove duplicated code by reusing `from_sorted_iter`) - rust-lang/rust#143114 (Minor Documentation Improvements) r? `@ghost` `@rustbot` modify labels: rollup try-job: dist-i586-gnu-i586-i686-musl
This commit is contained in:
@@ -21,13 +21,14 @@ fn alloc_caller_location<'tcx>(
|
|||||||
assert!(!filename.as_str().as_bytes().contains(&0));
|
assert!(!filename.as_str().as_bytes().contains(&0));
|
||||||
|
|
||||||
let loc_details = ecx.tcx.sess.opts.unstable_opts.location_detail;
|
let loc_details = ecx.tcx.sess.opts.unstable_opts.location_detail;
|
||||||
let file_wide_ptr = {
|
let filename = {
|
||||||
let filename = if loc_details.file { filename.as_str() } else { "<redacted>" };
|
let filename = if loc_details.file { filename.as_str() } else { "<redacted>" };
|
||||||
let filename_with_nul = filename.to_owned() + "\0";
|
let filename_with_nul = filename.to_owned() + "\0";
|
||||||
// This can fail if rustc runs out of memory right here. Trying to emit an error would be
|
// This can fail if rustc runs out of memory right here. Trying to emit an error would be
|
||||||
// pointless, since that would require allocating more memory than these short strings.
|
// pointless, since that would require allocating more memory than these short strings.
|
||||||
let file_ptr = ecx.allocate_bytes_dedup(filename_with_nul.as_bytes()).unwrap();
|
let file_ptr = ecx.allocate_bytes_dedup(filename_with_nul.as_bytes()).unwrap();
|
||||||
Immediate::new_slice(file_ptr.into(), filename_with_nul.len().try_into().unwrap(), ecx)
|
let file_len = u64::try_from(filename.len()).unwrap();
|
||||||
|
Immediate::new_slice(file_ptr.into(), file_len, ecx)
|
||||||
};
|
};
|
||||||
let line = if loc_details.line { Scalar::from_u32(line) } else { Scalar::from_u32(0) };
|
let line = if loc_details.line { Scalar::from_u32(line) } else { Scalar::from_u32(0) };
|
||||||
let col = if loc_details.column { Scalar::from_u32(col) } else { Scalar::from_u32(0) };
|
let col = if loc_details.column { Scalar::from_u32(col) } else { Scalar::from_u32(0) };
|
||||||
@@ -41,11 +42,8 @@ fn alloc_caller_location<'tcx>(
|
|||||||
let location = ecx.allocate(loc_layout, MemoryKind::CallerLocation).unwrap();
|
let location = ecx.allocate(loc_layout, MemoryKind::CallerLocation).unwrap();
|
||||||
|
|
||||||
// Initialize fields.
|
// Initialize fields.
|
||||||
ecx.write_immediate(
|
ecx.write_immediate(filename, &ecx.project_field(&location, FieldIdx::from_u32(0)).unwrap())
|
||||||
file_wide_ptr,
|
.expect("writing to memory we just allocated cannot fail");
|
||||||
&ecx.project_field(&location, FieldIdx::from_u32(0)).unwrap(),
|
|
||||||
)
|
|
||||||
.expect("writing to memory we just allocated cannot fail");
|
|
||||||
ecx.write_scalar(line, &ecx.project_field(&location, FieldIdx::from_u32(1)).unwrap())
|
ecx.write_scalar(line, &ecx.project_field(&location, FieldIdx::from_u32(1)).unwrap())
|
||||||
.expect("writing to memory we just allocated cannot fail");
|
.expect("writing to memory we just allocated cannot fail");
|
||||||
ecx.write_scalar(col, &ecx.project_field(&location, FieldIdx::from_u32(2)).unwrap())
|
ecx.write_scalar(col, &ecx.project_field(&location, FieldIdx::from_u32(2)).unwrap())
|
||||||
|
|||||||
@@ -190,17 +190,6 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) {
|
|||||||
let mut symbols_stream = quote! {};
|
let mut symbols_stream = quote! {};
|
||||||
let mut prefill_stream = quote! {};
|
let mut prefill_stream = quote! {};
|
||||||
let mut entries = Entries::with_capacity(input.keywords.len() + input.symbols.len() + 10);
|
let mut entries = Entries::with_capacity(input.keywords.len() + input.symbols.len() + 10);
|
||||||
let mut prev_key: Option<(Span, String)> = None;
|
|
||||||
|
|
||||||
let mut check_order = |span: Span, s: &str, errors: &mut Errors| {
|
|
||||||
if let Some((prev_span, ref prev_str)) = prev_key {
|
|
||||||
if s < prev_str {
|
|
||||||
errors.error(span, format!("Symbol `{s}` must precede `{prev_str}`"));
|
|
||||||
errors.error(prev_span, format!("location of previous symbol `{prev_str}`"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
prev_key = Some((span, s.to_string()));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Generate the listed keywords.
|
// Generate the listed keywords.
|
||||||
for keyword in input.keywords.iter() {
|
for keyword in input.keywords.iter() {
|
||||||
@@ -219,7 +208,6 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) {
|
|||||||
// Generate the listed symbols.
|
// Generate the listed symbols.
|
||||||
for symbol in input.symbols.iter() {
|
for symbol in input.symbols.iter() {
|
||||||
let name = &symbol.name;
|
let name = &symbol.name;
|
||||||
check_order(symbol.name.span(), &name.to_string(), &mut errors);
|
|
||||||
|
|
||||||
let value = match &symbol.value {
|
let value = match &symbol.value {
|
||||||
Value::SameAsName => name.to_string(),
|
Value::SameAsName => name.to_string(),
|
||||||
|
|||||||
@@ -84,18 +84,3 @@ fn check_dup_symbol_and_keyword() {
|
|||||||
};
|
};
|
||||||
test_symbols_macro(input, &["Symbol `splat` is duplicated", "location of previous definition"]);
|
test_symbols_macro(input, &["Symbol `splat` is duplicated", "location of previous definition"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn check_symbol_order() {
|
|
||||||
let input = quote! {
|
|
||||||
Keywords {}
|
|
||||||
Symbols {
|
|
||||||
zebra,
|
|
||||||
aardvark,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
test_symbols_macro(
|
|
||||||
input,
|
|
||||||
&["Symbol `aardvark` must precede `zebra`", "location of previous symbol `zebra`"],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -150,14 +150,10 @@ symbols! {
|
|||||||
// As well as the symbols listed, there are symbols for the strings
|
// As well as the symbols listed, there are symbols for the strings
|
||||||
// "0", "1", ..., "9", which are accessible via `sym::integer`.
|
// "0", "1", ..., "9", which are accessible via `sym::integer`.
|
||||||
//
|
//
|
||||||
// The proc macro will abort if symbols are not in alphabetical order (as
|
|
||||||
// defined by `impl Ord for str`) or if any symbols are duplicated. Vim
|
|
||||||
// users can sort the list by selecting it and executing the command
|
|
||||||
// `:'<,'>!LC_ALL=C sort`.
|
|
||||||
//
|
|
||||||
// There is currently no checking that all symbols are used; that would be
|
// There is currently no checking that all symbols are used; that would be
|
||||||
// nice to have.
|
// nice to have.
|
||||||
Symbols {
|
Symbols {
|
||||||
|
// tidy-alphabetical-start
|
||||||
Abi,
|
Abi,
|
||||||
AcqRel,
|
AcqRel,
|
||||||
Acquire,
|
Acquire,
|
||||||
@@ -175,18 +171,18 @@ symbols! {
|
|||||||
AsyncGenPending,
|
AsyncGenPending,
|
||||||
AsyncGenReady,
|
AsyncGenReady,
|
||||||
AtomicBool,
|
AtomicBool,
|
||||||
AtomicI128,
|
AtomicI8,
|
||||||
AtomicI16,
|
AtomicI16,
|
||||||
AtomicI32,
|
AtomicI32,
|
||||||
AtomicI64,
|
AtomicI64,
|
||||||
AtomicI8,
|
AtomicI128,
|
||||||
AtomicIsize,
|
AtomicIsize,
|
||||||
AtomicPtr,
|
AtomicPtr,
|
||||||
AtomicU128,
|
AtomicU8,
|
||||||
AtomicU16,
|
AtomicU16,
|
||||||
AtomicU32,
|
AtomicU32,
|
||||||
AtomicU64,
|
AtomicU64,
|
||||||
AtomicU8,
|
AtomicU128,
|
||||||
AtomicUsize,
|
AtomicUsize,
|
||||||
BTreeEntry,
|
BTreeEntry,
|
||||||
BTreeMap,
|
BTreeMap,
|
||||||
@@ -607,10 +603,10 @@ symbols! {
|
|||||||
catch_unwind,
|
catch_unwind,
|
||||||
cause,
|
cause,
|
||||||
cdylib,
|
cdylib,
|
||||||
ceilf128,
|
|
||||||
ceilf16,
|
ceilf16,
|
||||||
ceilf32,
|
ceilf32,
|
||||||
ceilf64,
|
ceilf64,
|
||||||
|
ceilf128,
|
||||||
cfg,
|
cfg,
|
||||||
cfg_accessible,
|
cfg_accessible,
|
||||||
cfg_attr,
|
cfg_attr,
|
||||||
@@ -747,10 +743,10 @@ symbols! {
|
|||||||
copy,
|
copy,
|
||||||
copy_closures,
|
copy_closures,
|
||||||
copy_nonoverlapping,
|
copy_nonoverlapping,
|
||||||
copysignf128,
|
|
||||||
copysignf16,
|
copysignf16,
|
||||||
copysignf32,
|
copysignf32,
|
||||||
copysignf64,
|
copysignf64,
|
||||||
|
copysignf128,
|
||||||
core,
|
core,
|
||||||
core_panic,
|
core_panic,
|
||||||
core_panic_2015_macro,
|
core_panic_2015_macro,
|
||||||
@@ -763,10 +759,10 @@ symbols! {
|
|||||||
coroutine_state,
|
coroutine_state,
|
||||||
coroutine_yield,
|
coroutine_yield,
|
||||||
coroutines,
|
coroutines,
|
||||||
cosf128,
|
|
||||||
cosf16,
|
cosf16,
|
||||||
cosf32,
|
cosf32,
|
||||||
cosf64,
|
cosf64,
|
||||||
|
cosf128,
|
||||||
count,
|
count,
|
||||||
coverage,
|
coverage,
|
||||||
coverage_attribute,
|
coverage_attribute,
|
||||||
@@ -874,8 +870,8 @@ symbols! {
|
|||||||
dotdot_in_tuple_patterns,
|
dotdot_in_tuple_patterns,
|
||||||
dotdoteq_in_patterns,
|
dotdoteq_in_patterns,
|
||||||
dreg,
|
dreg,
|
||||||
dreg_low16,
|
|
||||||
dreg_low8,
|
dreg_low8,
|
||||||
|
dreg_low16,
|
||||||
drop,
|
drop,
|
||||||
drop_in_place,
|
drop_in_place,
|
||||||
drop_types_in_const,
|
drop_types_in_const,
|
||||||
@@ -928,16 +924,16 @@ symbols! {
|
|||||||
exhaustive_integer_patterns,
|
exhaustive_integer_patterns,
|
||||||
exhaustive_patterns,
|
exhaustive_patterns,
|
||||||
existential_type,
|
existential_type,
|
||||||
exp2f128,
|
|
||||||
exp2f16,
|
exp2f16,
|
||||||
exp2f32,
|
exp2f32,
|
||||||
exp2f64,
|
exp2f64,
|
||||||
|
exp2f128,
|
||||||
expect,
|
expect,
|
||||||
expected,
|
expected,
|
||||||
expf128,
|
|
||||||
expf16,
|
expf16,
|
||||||
expf32,
|
expf32,
|
||||||
expf64,
|
expf64,
|
||||||
|
expf128,
|
||||||
explicit_extern_abis,
|
explicit_extern_abis,
|
||||||
explicit_generic_args_with_impl_trait,
|
explicit_generic_args_with_impl_trait,
|
||||||
explicit_tail_calls,
|
explicit_tail_calls,
|
||||||
@@ -958,9 +954,6 @@ symbols! {
|
|||||||
external,
|
external,
|
||||||
external_doc,
|
external_doc,
|
||||||
f,
|
f,
|
||||||
f128,
|
|
||||||
f128_epsilon,
|
|
||||||
f128_nan,
|
|
||||||
f16,
|
f16,
|
||||||
f16_epsilon,
|
f16_epsilon,
|
||||||
f16_nan,
|
f16_nan,
|
||||||
@@ -999,10 +992,13 @@ symbols! {
|
|||||||
f64_legacy_const_neg_infinity,
|
f64_legacy_const_neg_infinity,
|
||||||
f64_legacy_const_radix,
|
f64_legacy_const_radix,
|
||||||
f64_nan,
|
f64_nan,
|
||||||
fabsf128,
|
f128,
|
||||||
|
f128_epsilon,
|
||||||
|
f128_nan,
|
||||||
fabsf16,
|
fabsf16,
|
||||||
fabsf32,
|
fabsf32,
|
||||||
fabsf64,
|
fabsf64,
|
||||||
|
fabsf128,
|
||||||
fadd_algebraic,
|
fadd_algebraic,
|
||||||
fadd_fast,
|
fadd_fast,
|
||||||
fake_variadic,
|
fake_variadic,
|
||||||
@@ -1024,22 +1020,22 @@ symbols! {
|
|||||||
flags,
|
flags,
|
||||||
float,
|
float,
|
||||||
float_to_int_unchecked,
|
float_to_int_unchecked,
|
||||||
floorf128,
|
|
||||||
floorf16,
|
floorf16,
|
||||||
floorf32,
|
floorf32,
|
||||||
floorf64,
|
floorf64,
|
||||||
fmaf128,
|
floorf128,
|
||||||
fmaf16,
|
fmaf16,
|
||||||
fmaf32,
|
fmaf32,
|
||||||
fmaf64,
|
fmaf64,
|
||||||
|
fmaf128,
|
||||||
fmt,
|
fmt,
|
||||||
fmt_debug,
|
fmt_debug,
|
||||||
fmul_algebraic,
|
fmul_algebraic,
|
||||||
fmul_fast,
|
fmul_fast,
|
||||||
fmuladdf128,
|
|
||||||
fmuladdf16,
|
fmuladdf16,
|
||||||
fmuladdf32,
|
fmuladdf32,
|
||||||
fmuladdf64,
|
fmuladdf64,
|
||||||
|
fmuladdf128,
|
||||||
fn_align,
|
fn_align,
|
||||||
fn_body,
|
fn_body,
|
||||||
fn_delegation,
|
fn_delegation,
|
||||||
@@ -1140,13 +1136,12 @@ symbols! {
|
|||||||
html_root_url,
|
html_root_url,
|
||||||
hwaddress,
|
hwaddress,
|
||||||
i,
|
i,
|
||||||
i128,
|
i8,
|
||||||
i128_legacy_const_max,
|
i8_legacy_const_max,
|
||||||
i128_legacy_const_min,
|
i8_legacy_const_min,
|
||||||
i128_legacy_fn_max_value,
|
i8_legacy_fn_max_value,
|
||||||
i128_legacy_fn_min_value,
|
i8_legacy_fn_min_value,
|
||||||
i128_legacy_mod,
|
i8_legacy_mod,
|
||||||
i128_type,
|
|
||||||
i16,
|
i16,
|
||||||
i16_legacy_const_max,
|
i16_legacy_const_max,
|
||||||
i16_legacy_const_min,
|
i16_legacy_const_min,
|
||||||
@@ -1165,12 +1160,13 @@ symbols! {
|
|||||||
i64_legacy_fn_max_value,
|
i64_legacy_fn_max_value,
|
||||||
i64_legacy_fn_min_value,
|
i64_legacy_fn_min_value,
|
||||||
i64_legacy_mod,
|
i64_legacy_mod,
|
||||||
i8,
|
i128,
|
||||||
i8_legacy_const_max,
|
i128_legacy_const_max,
|
||||||
i8_legacy_const_min,
|
i128_legacy_const_min,
|
||||||
i8_legacy_fn_max_value,
|
i128_legacy_fn_max_value,
|
||||||
i8_legacy_fn_min_value,
|
i128_legacy_fn_min_value,
|
||||||
i8_legacy_mod,
|
i128_legacy_mod,
|
||||||
|
i128_type,
|
||||||
ident,
|
ident,
|
||||||
if_let,
|
if_let,
|
||||||
if_let_guard,
|
if_let_guard,
|
||||||
@@ -1292,19 +1288,19 @@ symbols! {
|
|||||||
loaded_from_disk,
|
loaded_from_disk,
|
||||||
local,
|
local,
|
||||||
local_inner_macros,
|
local_inner_macros,
|
||||||
log10f128,
|
|
||||||
log10f16,
|
|
||||||
log10f32,
|
|
||||||
log10f64,
|
|
||||||
log2f128,
|
|
||||||
log2f16,
|
log2f16,
|
||||||
log2f32,
|
log2f32,
|
||||||
log2f64,
|
log2f64,
|
||||||
|
log2f128,
|
||||||
|
log10f16,
|
||||||
|
log10f32,
|
||||||
|
log10f64,
|
||||||
|
log10f128,
|
||||||
log_syntax,
|
log_syntax,
|
||||||
logf128,
|
|
||||||
logf16,
|
logf16,
|
||||||
logf32,
|
logf32,
|
||||||
logf64,
|
logf64,
|
||||||
|
logf128,
|
||||||
loongarch_target_feature,
|
loongarch_target_feature,
|
||||||
loop_break_value,
|
loop_break_value,
|
||||||
loop_match,
|
loop_match,
|
||||||
@@ -1334,14 +1330,14 @@ symbols! {
|
|||||||
match_beginning_vert,
|
match_beginning_vert,
|
||||||
match_default_bindings,
|
match_default_bindings,
|
||||||
matches_macro,
|
matches_macro,
|
||||||
maximumf128,
|
|
||||||
maximumf16,
|
maximumf16,
|
||||||
maximumf32,
|
maximumf32,
|
||||||
maximumf64,
|
maximumf64,
|
||||||
maxnumf128,
|
maximumf128,
|
||||||
maxnumf16,
|
maxnumf16,
|
||||||
maxnumf32,
|
maxnumf32,
|
||||||
maxnumf64,
|
maxnumf64,
|
||||||
|
maxnumf128,
|
||||||
may_dangle,
|
may_dangle,
|
||||||
may_unwind,
|
may_unwind,
|
||||||
maybe_uninit,
|
maybe_uninit,
|
||||||
@@ -1372,14 +1368,14 @@ symbols! {
|
|||||||
min_generic_const_args,
|
min_generic_const_args,
|
||||||
min_specialization,
|
min_specialization,
|
||||||
min_type_alias_impl_trait,
|
min_type_alias_impl_trait,
|
||||||
minimumf128,
|
|
||||||
minimumf16,
|
minimumf16,
|
||||||
minimumf32,
|
minimumf32,
|
||||||
minimumf64,
|
minimumf64,
|
||||||
minnumf128,
|
minimumf128,
|
||||||
minnumf16,
|
minnumf16,
|
||||||
minnumf32,
|
minnumf32,
|
||||||
minnumf64,
|
minnumf64,
|
||||||
|
minnumf128,
|
||||||
mips_target_feature,
|
mips_target_feature,
|
||||||
mir_assume,
|
mir_assume,
|
||||||
mir_basic_block,
|
mir_basic_block,
|
||||||
@@ -1634,14 +1630,14 @@ symbols! {
|
|||||||
post_dash_lto: "post-lto",
|
post_dash_lto: "post-lto",
|
||||||
postfix_match,
|
postfix_match,
|
||||||
powerpc_target_feature,
|
powerpc_target_feature,
|
||||||
powf128,
|
|
||||||
powf16,
|
powf16,
|
||||||
powf32,
|
powf32,
|
||||||
powf64,
|
powf64,
|
||||||
powif128,
|
powf128,
|
||||||
powif16,
|
powif16,
|
||||||
powif32,
|
powif32,
|
||||||
powif64,
|
powif64,
|
||||||
|
powif128,
|
||||||
pre_dash_lto: "pre-lto",
|
pre_dash_lto: "pre-lto",
|
||||||
precise_capturing,
|
precise_capturing,
|
||||||
precise_capturing_in_traits,
|
precise_capturing_in_traits,
|
||||||
@@ -1786,14 +1782,14 @@ symbols! {
|
|||||||
ropi_rwpi: "ropi-rwpi",
|
ropi_rwpi: "ropi-rwpi",
|
||||||
rotate_left,
|
rotate_left,
|
||||||
rotate_right,
|
rotate_right,
|
||||||
round_ties_even_f128,
|
|
||||||
round_ties_even_f16,
|
round_ties_even_f16,
|
||||||
round_ties_even_f32,
|
round_ties_even_f32,
|
||||||
round_ties_even_f64,
|
round_ties_even_f64,
|
||||||
roundf128,
|
round_ties_even_f128,
|
||||||
roundf16,
|
roundf16,
|
||||||
roundf32,
|
roundf32,
|
||||||
roundf64,
|
roundf64,
|
||||||
|
roundf128,
|
||||||
rt,
|
rt,
|
||||||
rtm_target_feature,
|
rtm_target_feature,
|
||||||
rust,
|
rust,
|
||||||
@@ -1973,8 +1969,8 @@ symbols! {
|
|||||||
simd_fexp2,
|
simd_fexp2,
|
||||||
simd_ffi,
|
simd_ffi,
|
||||||
simd_flog,
|
simd_flog,
|
||||||
simd_flog10,
|
|
||||||
simd_flog2,
|
simd_flog2,
|
||||||
|
simd_flog10,
|
||||||
simd_floor,
|
simd_floor,
|
||||||
simd_fma,
|
simd_fma,
|
||||||
simd_fmax,
|
simd_fmax,
|
||||||
@@ -2022,10 +2018,10 @@ symbols! {
|
|||||||
simd_with_exposed_provenance,
|
simd_with_exposed_provenance,
|
||||||
simd_xor,
|
simd_xor,
|
||||||
since,
|
since,
|
||||||
sinf128,
|
|
||||||
sinf16,
|
sinf16,
|
||||||
sinf32,
|
sinf32,
|
||||||
sinf64,
|
sinf64,
|
||||||
|
sinf128,
|
||||||
size,
|
size,
|
||||||
size_of,
|
size_of,
|
||||||
size_of_val,
|
size_of_val,
|
||||||
@@ -2047,10 +2043,10 @@ symbols! {
|
|||||||
specialization,
|
specialization,
|
||||||
speed,
|
speed,
|
||||||
spotlight,
|
spotlight,
|
||||||
sqrtf128,
|
|
||||||
sqrtf16,
|
sqrtf16,
|
||||||
sqrtf32,
|
sqrtf32,
|
||||||
sqrtf64,
|
sqrtf64,
|
||||||
|
sqrtf128,
|
||||||
sreg,
|
sreg,
|
||||||
sreg_low16,
|
sreg_low16,
|
||||||
sse,
|
sse,
|
||||||
@@ -2128,10 +2124,10 @@ symbols! {
|
|||||||
target_has_atomic,
|
target_has_atomic,
|
||||||
target_has_atomic_equal_alignment,
|
target_has_atomic_equal_alignment,
|
||||||
target_has_atomic_load_store,
|
target_has_atomic_load_store,
|
||||||
target_has_reliable_f128,
|
|
||||||
target_has_reliable_f128_math,
|
|
||||||
target_has_reliable_f16,
|
target_has_reliable_f16,
|
||||||
target_has_reliable_f16_math,
|
target_has_reliable_f16_math,
|
||||||
|
target_has_reliable_f128,
|
||||||
|
target_has_reliable_f128_math,
|
||||||
target_os,
|
target_os,
|
||||||
target_pointer_width,
|
target_pointer_width,
|
||||||
target_thread_local,
|
target_thread_local,
|
||||||
@@ -2174,10 +2170,10 @@ symbols! {
|
|||||||
transparent_enums,
|
transparent_enums,
|
||||||
transparent_unions,
|
transparent_unions,
|
||||||
trivial_bounds,
|
trivial_bounds,
|
||||||
truncf128,
|
|
||||||
truncf16,
|
truncf16,
|
||||||
truncf32,
|
truncf32,
|
||||||
truncf64,
|
truncf64,
|
||||||
|
truncf128,
|
||||||
try_blocks,
|
try_blocks,
|
||||||
try_capture,
|
try_capture,
|
||||||
try_from,
|
try_from,
|
||||||
@@ -2206,12 +2202,12 @@ symbols! {
|
|||||||
type_name,
|
type_name,
|
||||||
type_privacy_lints,
|
type_privacy_lints,
|
||||||
typed_swap_nonoverlapping,
|
typed_swap_nonoverlapping,
|
||||||
u128,
|
u8,
|
||||||
u128_legacy_const_max,
|
u8_legacy_const_max,
|
||||||
u128_legacy_const_min,
|
u8_legacy_const_min,
|
||||||
u128_legacy_fn_max_value,
|
u8_legacy_fn_max_value,
|
||||||
u128_legacy_fn_min_value,
|
u8_legacy_fn_min_value,
|
||||||
u128_legacy_mod,
|
u8_legacy_mod,
|
||||||
u16,
|
u16,
|
||||||
u16_legacy_const_max,
|
u16_legacy_const_max,
|
||||||
u16_legacy_const_min,
|
u16_legacy_const_min,
|
||||||
@@ -2230,12 +2226,12 @@ symbols! {
|
|||||||
u64_legacy_fn_max_value,
|
u64_legacy_fn_max_value,
|
||||||
u64_legacy_fn_min_value,
|
u64_legacy_fn_min_value,
|
||||||
u64_legacy_mod,
|
u64_legacy_mod,
|
||||||
u8,
|
u128,
|
||||||
u8_legacy_const_max,
|
u128_legacy_const_max,
|
||||||
u8_legacy_const_min,
|
u128_legacy_const_min,
|
||||||
u8_legacy_fn_max_value,
|
u128_legacy_fn_max_value,
|
||||||
u8_legacy_fn_min_value,
|
u128_legacy_fn_min_value,
|
||||||
u8_legacy_mod,
|
u128_legacy_mod,
|
||||||
ub_checks,
|
ub_checks,
|
||||||
unaligned_volatile_load,
|
unaligned_volatile_load,
|
||||||
unaligned_volatile_store,
|
unaligned_volatile_store,
|
||||||
@@ -2388,6 +2384,7 @@ symbols! {
|
|||||||
zfh,
|
zfh,
|
||||||
zfhmin,
|
zfhmin,
|
||||||
zmm_reg,
|
zmm_reg,
|
||||||
|
// tidy-alphabetical-end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1517,9 +1517,7 @@ impl<T: Ord, const N: usize> From<[T; N]> for BTreeSet<T> {
|
|||||||
|
|
||||||
// use stable sort to preserve the insertion order.
|
// use stable sort to preserve the insertion order.
|
||||||
arr.sort();
|
arr.sort();
|
||||||
let iter = IntoIterator::into_iter(arr).map(|k| (k, SetValZST::default()));
|
BTreeSet::from_sorted_iter(IntoIterator::into_iter(arr), Global)
|
||||||
let map = BTreeMap::bulk_build_from_sorted_iter(iter, Global);
|
|
||||||
BTreeSet { map }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
use crate::ffi::CStr;
|
use crate::ffi::CStr;
|
||||||
use crate::fmt;
|
use crate::fmt;
|
||||||
|
use crate::marker::PhantomData;
|
||||||
|
use crate::ptr::NonNull;
|
||||||
|
|
||||||
/// A struct containing information about the location of a panic.
|
/// A struct containing information about the location of a panic.
|
||||||
///
|
///
|
||||||
@@ -33,14 +35,13 @@ use crate::fmt;
|
|||||||
#[derive(Copy, Clone, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
#[derive(Copy, Clone, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
||||||
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
||||||
pub struct Location<'a> {
|
pub struct Location<'a> {
|
||||||
// Note: this filename will have exactly one nul byte at its end, but otherwise
|
// A raw pointer is used rather than a reference because the pointer is valid for one more byte
|
||||||
// it must never contain interior nul bytes. This is relied on for the conversion
|
// than the length stored in this pointer; the additional byte is the NUL-terminator used by
|
||||||
// to `CStr` below.
|
// `Location::file_with_nul`.
|
||||||
//
|
filename: NonNull<str>,
|
||||||
// The prefix of the string without the trailing nul byte will be a regular UTF8 `str`.
|
|
||||||
file_bytes_with_nul: &'a [u8],
|
|
||||||
line: u32,
|
line: u32,
|
||||||
col: u32,
|
col: u32,
|
||||||
|
_filename: PhantomData<&'a str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
||||||
@@ -143,10 +144,8 @@ impl<'a> Location<'a> {
|
|||||||
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
||||||
#[rustc_const_stable(feature = "const_location_fields", since = "1.79.0")]
|
#[rustc_const_stable(feature = "const_location_fields", since = "1.79.0")]
|
||||||
pub const fn file(&self) -> &str {
|
pub const fn file(&self) -> &str {
|
||||||
let str_len = self.file_bytes_with_nul.len() - 1;
|
// SAFETY: The filename is valid.
|
||||||
// SAFETY: `file_bytes_with_nul` without the trailing nul byte is guaranteed to be
|
unsafe { self.filename.as_ref() }
|
||||||
// valid UTF8.
|
|
||||||
unsafe { crate::str::from_raw_parts(self.file_bytes_with_nul.as_ptr(), str_len) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the name of the source file as a nul-terminated `CStr`.
|
/// Returns the name of the source file as a nul-terminated `CStr`.
|
||||||
@@ -157,9 +156,17 @@ impl<'a> Location<'a> {
|
|||||||
#[unstable(feature = "file_with_nul", issue = "141727")]
|
#[unstable(feature = "file_with_nul", issue = "141727")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub const fn file_with_nul(&self) -> &CStr {
|
pub const fn file_with_nul(&self) -> &CStr {
|
||||||
// SAFETY: `file_bytes_with_nul` is guaranteed to have a trailing nul byte and no
|
let filename = self.filename.as_ptr();
|
||||||
// interior nul bytes.
|
|
||||||
unsafe { CStr::from_bytes_with_nul_unchecked(self.file_bytes_with_nul) }
|
// SAFETY: The filename is valid for `filename_len+1` bytes, so this addition can't
|
||||||
|
// overflow.
|
||||||
|
let cstr_len = unsafe { crate::mem::size_of_val_raw(filename).unchecked_add(1) };
|
||||||
|
|
||||||
|
// SAFETY: The filename is valid for `filename_len+1` bytes.
|
||||||
|
let slice = unsafe { crate::slice::from_raw_parts(filename.cast(), cstr_len) };
|
||||||
|
|
||||||
|
// SAFETY: The filename is guaranteed to have a trailing nul byte and no interior nul bytes.
|
||||||
|
unsafe { CStr::from_bytes_with_nul_unchecked(slice) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the line number from which the panic originated.
|
/// Returns the line number from which the panic originated.
|
||||||
@@ -220,3 +227,8 @@ impl fmt::Display for Location<'_> {
|
|||||||
write!(formatter, "{}:{}:{}", self.file(), self.line, self.col)
|
write!(formatter, "{}:{}:{}", self.file(), self.line, self.col)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
||||||
|
unsafe impl Send for Location<'_> {}
|
||||||
|
#[stable(feature = "panic_hooks", since = "1.10.0")]
|
||||||
|
unsafe impl Sync for Location<'_> {}
|
||||||
|
|||||||
@@ -3,4 +3,5 @@
|
|||||||
#![stable(feature = "raw_ext", since = "1.1.0")]
|
#![stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
|
||||||
pub mod fs;
|
pub mod fs;
|
||||||
|
pub mod net;
|
||||||
pub mod raw;
|
pub mod raw;
|
||||||
|
|||||||
50
library/std/src/os/illumos/net.rs
Normal file
50
library/std/src/os/illumos/net.rs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
//! illumos-specific networking functionality.
|
||||||
|
|
||||||
|
#![unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
|
||||||
|
use crate::io;
|
||||||
|
use crate::os::unix::net;
|
||||||
|
use crate::sealed::Sealed;
|
||||||
|
use crate::sys_common::AsInner;
|
||||||
|
|
||||||
|
/// illumos-specific functionality for `AF_UNIX` sockets [`UnixDatagram`]
|
||||||
|
/// and [`UnixStream`].
|
||||||
|
///
|
||||||
|
/// [`UnixDatagram`]: net::UnixDatagram
|
||||||
|
/// [`UnixStream`]: net::UnixStream
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
pub trait UnixSocketExt: Sealed {
|
||||||
|
/// Enables exclusive binding on the socket.
|
||||||
|
///
|
||||||
|
/// If true and if the socket had been set with `SO_REUSEADDR`,
|
||||||
|
/// it neutralises its effect.
|
||||||
|
/// See [`man 3 tcp`](https://docs.oracle.com/cd/E88353_01/html/E37843/setsockopt-3c.html)
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
fn so_exclbind(&self, excl: bool) -> io::Result<()>;
|
||||||
|
|
||||||
|
/// Get the bind exclusivity bind state of the socket.
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
fn exclbind(&self) -> io::Result<bool>;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
impl UnixSocketExt for net::UnixDatagram {
|
||||||
|
fn exclbind(&self) -> io::Result<bool> {
|
||||||
|
self.as_inner().exclbind()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn so_exclbind(&self, excl: bool) -> io::Result<()> {
|
||||||
|
self.as_inner().set_exclbind(excl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
impl UnixSocketExt for net::UnixStream {
|
||||||
|
fn exclbind(&self) -> io::Result<bool> {
|
||||||
|
self.as_inner().exclbind()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn so_exclbind(&self, excl: bool) -> io::Result<()> {
|
||||||
|
self.as_inner().set_exclbind(excl)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,4 +3,5 @@
|
|||||||
#![stable(feature = "raw_ext", since = "1.1.0")]
|
#![stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
|
||||||
pub mod fs;
|
pub mod fs;
|
||||||
|
pub mod net;
|
||||||
pub mod raw;
|
pub mod raw;
|
||||||
|
|||||||
50
library/std/src/os/solaris/net.rs
Normal file
50
library/std/src/os/solaris/net.rs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
//! solaris-specific networking functionality.
|
||||||
|
|
||||||
|
#![unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
|
||||||
|
use crate::io;
|
||||||
|
use crate::os::unix::net;
|
||||||
|
use crate::sealed::Sealed;
|
||||||
|
use crate::sys_common::AsInner;
|
||||||
|
|
||||||
|
/// solaris-specific functionality for `AF_UNIX` sockets [`UnixDatagram`]
|
||||||
|
/// and [`UnixStream`].
|
||||||
|
///
|
||||||
|
/// [`UnixDatagram`]: net::UnixDatagram
|
||||||
|
/// [`UnixStream`]: net::UnixStream
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
pub trait UnixSocketExt: Sealed {
|
||||||
|
/// Enables exclusive binding on the socket.
|
||||||
|
///
|
||||||
|
/// If true and if the socket had been set with `SO_REUSEADDR`,
|
||||||
|
/// it neutralises its effect.
|
||||||
|
/// See [`man 3 tcp`](https://docs.oracle.com/cd/E88353_01/html/E37843/setsockopt-3c.html)
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
fn so_exclbind(&self, excl: bool) -> io::Result<()>;
|
||||||
|
|
||||||
|
/// Get the bind exclusivity bind state of the socket.
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
fn exclbind(&self) -> io::Result<bool>;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
impl UnixSocketExt for net::UnixDatagram {
|
||||||
|
fn exclbind(&self) -> io::Result<bool> {
|
||||||
|
self.as_inner().exclbind()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn so_exclbind(&self, excl: bool) -> io::Result<()> {
|
||||||
|
self.as_inner().set_exclbind(excl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[unstable(feature = "unix_socket_exclbind", issue = "123481")]
|
||||||
|
impl UnixSocketExt for net::UnixStream {
|
||||||
|
fn exclbind(&self) -> io::Result<bool> {
|
||||||
|
self.as_inner().exclbind()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn so_exclbind(&self, excl: bool) -> io::Result<()> {
|
||||||
|
self.as_inner().set_exclbind(excl)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -522,6 +522,21 @@ impl Socket {
|
|||||||
Ok(name)
|
Ok(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(target_os = "solaris", target_os = "illumos"))]
|
||||||
|
pub fn set_exclbind(&self, excl: bool) -> io::Result<()> {
|
||||||
|
// not yet on libc crate
|
||||||
|
const SO_EXCLBIND: i32 = 0x1015;
|
||||||
|
setsockopt(self, libc::SOL_SOCKET, SO_EXCLBIND, excl)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(target_os = "solaris", target_os = "illumos"))]
|
||||||
|
pub fn exclbind(&self) -> io::Result<bool> {
|
||||||
|
// not yet on libc crate
|
||||||
|
const SO_EXCLBIND: i32 = 0x1015;
|
||||||
|
let raw: c_int = getsockopt(self, libc::SOL_SOCKET, SO_EXCLBIND)?;
|
||||||
|
Ok(raw != 0)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(any(target_os = "android", target_os = "linux",))]
|
#[cfg(any(target_os = "android", target_os = "linux",))]
|
||||||
pub fn set_passcred(&self, passcred: bool) -> io::Result<()> {
|
pub fn set_passcred(&self, passcred: bool) -> io::Result<()> {
|
||||||
setsockopt(self, libc::SOL_SOCKET, libc::SO_PASSCRED, passcred as libc::c_int)
|
setsockopt(self, libc::SOL_SOCKET, libc::SO_PASSCRED, passcred as libc::c_int)
|
||||||
|
|||||||
@@ -968,8 +968,8 @@ impl Process {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn send_signal(&self, signal: i32) -> io::Result<()> {
|
pub(crate) fn send_signal(&self, signal: i32) -> io::Result<()> {
|
||||||
// If we've already waited on this process then the pid can be recycled
|
// If we've already waited on this process then the pid can be recycled and
|
||||||
// and used for another process, and we probably shouldn't be signaling
|
// used for another process, and we probably shouldn't be sending signals to
|
||||||
// random processes, so return Ok because the process has exited already.
|
// random processes, so return Ok because the process has exited already.
|
||||||
if self.status.is_some() {
|
if self.status.is_some() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
|||||||
@@ -151,8 +151,8 @@ impl Process {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_signal(&self, signal: i32) -> io::Result<()> {
|
pub fn send_signal(&self, signal: i32) -> io::Result<()> {
|
||||||
// If we've already waited on this process then the pid can be recycled
|
// If we've already waited on this process then the pid can be recycled and
|
||||||
// and used for another process, and we probably shouldn't be killing
|
// used for another process, and we probably shouldn't be sending signals to
|
||||||
// random processes, so return Ok because the process has exited already.
|
// random processes, so return Ok because the process has exited already.
|
||||||
if self.status.is_some() {
|
if self.status.is_some() {
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -10,4 +10,7 @@ python3 ../x.py build --set rust.debug=true opt-dist
|
|||||||
build-manifest bootstrap
|
build-manifest bootstrap
|
||||||
|
|
||||||
# Use GCC for building GCC, as it seems to behave badly when built with Clang
|
# Use GCC for building GCC, as it seems to behave badly when built with Clang
|
||||||
CC=/rustroot/bin/cc CXX=/rustroot/bin/c++ python3 ../x.py dist gcc
|
# Only build GCC on full builds, not try builds
|
||||||
|
if [ "${DIST_TRY_BUILD:-0}" == "0" ]; then
|
||||||
|
CC=/rustroot/bin/cc CXX=/rustroot/bin/c++ python3 ../x.py dist gcc
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1703,6 +1703,7 @@ fn render_enum_fields(
|
|||||||
if v.is_stripped() {
|
if v.is_stripped() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
write!(w, "{}", render_attributes_in_pre(v, TAB, cx))?;
|
||||||
w.write_str(TAB)?;
|
w.write_str(TAB)?;
|
||||||
match v.kind {
|
match v.kind {
|
||||||
clean::VariantItem(ref var) => match var.kind {
|
clean::VariantItem(ref var) => match var.kind {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use crate::versions::{PkgType, Versions};
|
|||||||
|
|
||||||
static HOSTS: &[&str] = &[
|
static HOSTS: &[&str] = &[
|
||||||
"aarch64-apple-darwin",
|
"aarch64-apple-darwin",
|
||||||
|
"aarch64-pc-windows-gnullvm",
|
||||||
"aarch64-pc-windows-msvc",
|
"aarch64-pc-windows-msvc",
|
||||||
"aarch64-unknown-linux-gnu",
|
"aarch64-unknown-linux-gnu",
|
||||||
"aarch64-unknown-linux-musl",
|
"aarch64-unknown-linux-musl",
|
||||||
@@ -44,6 +45,7 @@ static HOSTS: &[&str] = &[
|
|||||||
"x86_64-apple-darwin",
|
"x86_64-apple-darwin",
|
||||||
"x86_64-pc-solaris",
|
"x86_64-pc-solaris",
|
||||||
"x86_64-pc-windows-gnu",
|
"x86_64-pc-windows-gnu",
|
||||||
|
"x86_64-pc-windows-gnullvm",
|
||||||
"x86_64-pc-windows-msvc",
|
"x86_64-pc-windows-msvc",
|
||||||
"x86_64-unknown-freebsd",
|
"x86_64-unknown-freebsd",
|
||||||
"x86_64-unknown-illumos",
|
"x86_64-unknown-illumos",
|
||||||
@@ -470,7 +472,7 @@ impl Builder {
|
|||||||
}
|
}
|
||||||
// so is rust-mingw if it's available for the target
|
// so is rust-mingw if it's available for the target
|
||||||
PkgType::RustMingw => {
|
PkgType::RustMingw => {
|
||||||
if host.contains("pc-windows-gnu") {
|
if host.ends_with("pc-windows-gnu") {
|
||||||
components.push(host_component(pkg));
|
components.push(host_component(pkg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -592,7 +592,7 @@ Definite bugs found:
|
|||||||
* [Occasional memory leak in `std::mpsc` channels](https://github.com/rust-lang/rust/issues/121582) (original code in [crossbeam](https://github.com/crossbeam-rs/crossbeam/pull/1084))
|
* [Occasional memory leak in `std::mpsc` channels](https://github.com/rust-lang/rust/issues/121582) (original code in [crossbeam](https://github.com/crossbeam-rs/crossbeam/pull/1084))
|
||||||
* [Weak-memory-induced memory leak in Windows thread-local storage](https://github.com/rust-lang/rust/pull/124281)
|
* [Weak-memory-induced memory leak in Windows thread-local storage](https://github.com/rust-lang/rust/pull/124281)
|
||||||
* [A bug in the new `RwLock::downgrade` implementation](https://rust-lang.zulipchat.com/#narrow/channel/269128-miri/topic/Miri.20error.20library.20test) (caught by Miri before it landed in the Rust repo)
|
* [A bug in the new `RwLock::downgrade` implementation](https://rust-lang.zulipchat.com/#narrow/channel/269128-miri/topic/Miri.20error.20library.20test) (caught by Miri before it landed in the Rust repo)
|
||||||
* [Mockall reading unintialized memory when mocking `std::io::Read::read`, even if all expectations are satisfied](https://github.com/asomers/mockall/issues/647) (caught by Miri running Tokio's test suite)
|
* [Mockall reading uninitialized memory when mocking `std::io::Read::read`, even if all expectations are satisfied](https://github.com/asomers/mockall/issues/647) (caught by Miri running Tokio's test suite)
|
||||||
* [`ReentrantLock` not correctly dealing with reuse of addresses for TLS storage of different threads](https://github.com/rust-lang/rust/pull/141248)
|
* [`ReentrantLock` not correctly dealing with reuse of addresses for TLS storage of different threads](https://github.com/rust-lang/rust/pull/141248)
|
||||||
|
|
||||||
Violations of [Stacked Borrows] found that are likely bugs (but Stacked Borrows is currently just an experiment):
|
Violations of [Stacked Borrows] found that are likely bugs (but Stacked Borrows is currently just an experiment):
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ fn direct_raw(x: *const (i32, i32)) -> *const i32 {
|
|||||||
|
|
||||||
// Ensure that if a raw pointer is created via an intermediate
|
// Ensure that if a raw pointer is created via an intermediate
|
||||||
// reference, we catch that. (Just in case someone decides to
|
// reference, we catch that. (Just in case someone decides to
|
||||||
// desugar this differenly or so.)
|
// desugar this differently or so.)
|
||||||
fn via_ref(x: *const (i32, i32)) -> *const i32 {
|
fn via_ref(x: *const (i32, i32)) -> *const i32 {
|
||||||
unsafe { &(*x).0 as *const i32 } //~ERROR: dangling pointer
|
unsafe { &(*x).0 as *const i32 } //~ERROR: dangling pointer
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,12 @@ impl Bootstrap {
|
|||||||
let metrics_path = env.build_root().join("build").join("metrics.json");
|
let metrics_path = env.build_root().join("build").join("metrics.json");
|
||||||
let args = dist_args.iter().map(|arg| arg.as_str()).collect::<Vec<_>>();
|
let args = dist_args.iter().map(|arg| arg.as_str()).collect::<Vec<_>>();
|
||||||
let cmd = cmd(&args).env("RUST_BACKTRACE", "full");
|
let cmd = cmd(&args).env("RUST_BACKTRACE", "full");
|
||||||
let cmd = add_shared_x_flags(env, cmd);
|
let mut cmd = add_shared_x_flags(env, cmd);
|
||||||
|
if env.is_fast_try_build() {
|
||||||
|
// We set build.extended=false for fast try builds, but we still need Cargo
|
||||||
|
cmd = cmd.arg("cargo");
|
||||||
|
}
|
||||||
|
|
||||||
Self { cmd, metrics_path }
|
Self { cmd, metrics_path }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,5 +194,18 @@ impl Bootstrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn add_shared_x_flags(env: &Environment, cmd: CmdBuilder) -> CmdBuilder {
|
fn add_shared_x_flags(env: &Environment, cmd: CmdBuilder) -> CmdBuilder {
|
||||||
if env.is_fast_try_build() { cmd.arg("--set").arg("rust.deny-warnings=false") } else { cmd }
|
if env.is_fast_try_build() {
|
||||||
|
// Skip things that cannot be skipped through `x ... --skip`
|
||||||
|
cmd.arg("--set")
|
||||||
|
.arg("rust.llvm-bitcode-linker=false")
|
||||||
|
// Skip wasm-component-ld. This also skips cargo, which we need to re-enable for dist
|
||||||
|
.arg("--set")
|
||||||
|
.arg("build.extended=false")
|
||||||
|
.arg("--set")
|
||||||
|
.arg("rust.codegen-backends=['llvm']")
|
||||||
|
.arg("--set")
|
||||||
|
.arg("rust.deny-warnings=false")
|
||||||
|
} else {
|
||||||
|
cmd
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -407,13 +407,18 @@ fn main() -> anyhow::Result<()> {
|
|||||||
for target in [
|
for target in [
|
||||||
"rust-docs",
|
"rust-docs",
|
||||||
"rustc-docs",
|
"rustc-docs",
|
||||||
|
"rustc-dev",
|
||||||
|
"rust-dev",
|
||||||
"rust-docs-json",
|
"rust-docs-json",
|
||||||
"rust-analyzer",
|
"rust-analyzer",
|
||||||
"rustc-src",
|
"rustc-src",
|
||||||
|
"extended",
|
||||||
"clippy",
|
"clippy",
|
||||||
"miri",
|
"miri",
|
||||||
"rustfmt",
|
"rustfmt",
|
||||||
"gcc",
|
"gcc",
|
||||||
|
"generate-copyright",
|
||||||
|
"bootstrap",
|
||||||
] {
|
] {
|
||||||
build_args.extend(["--skip".to_string(), target.to_string()]);
|
build_args.extend(["--skip".to_string(), target.to_string()]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ pub fn finish_all(tests: &[TestInfo], total_elapsed: Duration, cfg: &Config) ->
|
|||||||
match result {
|
match result {
|
||||||
Ok(FinishedAll) => (),
|
Ok(FinishedAll) => (),
|
||||||
Err(EarlyExit::Timeout) => {
|
Err(EarlyExit::Timeout) => {
|
||||||
println!(" exited early; exceded {:?} timeout", cfg.timeout)
|
println!(" exited early; exceeded {:?} timeout", cfg.timeout)
|
||||||
}
|
}
|
||||||
Err(EarlyExit::MaxFailures) => {
|
Err(EarlyExit::MaxFailures) => {
|
||||||
println!(" exited early; exceeded {:?} max failures", cfg.max_failures)
|
println!(" exited early; exceeded {:?} max failures", cfg.max_failures)
|
||||||
|
|||||||
17
tests/rustdoc/enum/enum-variant-non_exhaustive.rs
Normal file
17
tests/rustdoc/enum/enum-variant-non_exhaustive.rs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
// regression test for https://github.com/rust-lang/rust/issues/142599
|
||||||
|
|
||||||
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
|
//@ snapshot type-code 'foo/enum.Type.html' '//pre[@class="rust item-decl"]/code'
|
||||||
|
pub enum Type {
|
||||||
|
#[non_exhaustive]
|
||||||
|
// attribute that should not be shown
|
||||||
|
#[warn(unsafe_code)]
|
||||||
|
Variant,
|
||||||
|
}
|
||||||
|
|
||||||
|
// we would love to use the `following-sibling::` axis
|
||||||
|
// (along with an `h2[@id="aliased-type"]` query),
|
||||||
|
// but unfortunately python doesn't implement that.
|
||||||
|
//@ snapshot type-alias-code 'foo/type.TypeAlias.html' '//pre[@class="rust item-decl"][2]/code'
|
||||||
|
pub type TypeAlias = Type;
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<code>pub enum TypeAlias {
|
||||||
|
#[non_exhaustive]
|
||||||
|
Variant,
|
||||||
|
}</code>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<code>pub enum Type {
|
||||||
|
#[non_exhaustive]
|
||||||
|
Variant,
|
||||||
|
}</code>
|
||||||
Reference in New Issue
Block a user