Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
7488140
Use nightly sync mode for josh-sync
bjorn3 Sep 15, 2026
d3cc844
Prepare for merging from rust-lang/rust
bjorn3 Sep 18, 2026
1981bfa
Merge ref '330d317121e1' from rust-lang/rust
bjorn3 Sep 18, 2026
0ef25a5
Merge pull request #1702 from Kobzol/josh-sync-script
Kobzol Sep 18, 2026
9204d85
enable `__powitf2`
folkertdev Sep 20, 2026
f952ea0
support `vpclmulqdq`
folkertdev Sep 20, 2026
465eff3
enable `__powitf2` (#1704)
bjorn3 Sep 21, 2026
2d64a2a
Merge pull request #1705 from folkertdev/vpclmulqdq
bjorn3 Sep 21, 2026
ff88d0d
Integrate `stdarch` tests for aarch64
CathalMullan Jun 13, 2026
df476a9
Merge pull request #1667 from CathalMullan/stdarch
bjorn3 Sep 22, 2026
711bae4
Prepare for merging from rust-lang/rust
bjorn3 Sep 22, 2026
a8408af
Merge ref '1303417c416e' from rust-lang/rust
bjorn3 Sep 22, 2026
29ff6f9
Prepare for merging from rust-lang/rust
bjorn3 Sep 23, 2026
fba788a
Merge ref '6bb1652a020e' (nightly-2026-09-23) from rust-lang/rust
bjorn3 Sep 23, 2026
dc39f01
making clamp_magnitude functions const + adding clamp_magnitude to No…
Eleocraft Sep 24, 2026
c614782
Prepare for merging from rust-lang/rust
Sep 24, 2026
6c26e7e
Merge ref '3670d2532bdf' from rust-lang/rust
Sep 24, 2026
ec11203
temporarily disable broken test on freebsd
RalfJung Sep 24, 2026
6cdd4d4
Merge pull request #5343 from rust-lang/rustup-2026-09-24
RalfJung Sep 24, 2026
d6d250c
adding coretests and fixing docs
Eleocraft Sep 24, 2026
76384db
Prepare for merging from rust-lang/rust
Sep 25, 2026
9b17f12
Merge ref '0d38a842626a' from rust-lang/rust
Sep 25, 2026
801c6d7
Merge pull request #5346 from rust-lang/rustup-2026-09-25
oli-obk Sep 25, 2026
79cbf77
run windows-fs tests natively
RalfJung Sep 20, 2026
3f2e9ee
Applying requested changes
Eleocraft Sep 25, 2026
eb7e04d
Disable RA diagnostics due to many false positives
WhySoBad Sep 25, 2026
cc51d68
Merge pull request #5347 from WhySoBad/disable-RA-diagnostics-zed
saethlin Sep 25, 2026
47f1cc5
Add socket2, integrate socket2 sockets in TCP socket shim
WhySoBad Sep 5, 2026
9afae37
avoid re-opening RefCells quite so often
RalfJung Sep 26, 2026
fd41c62
Disable rust-analyzer diagnostics for Helix
YohDeadfall Sep 26, 2026
32b4629
Merge pull request #5308 from WhySoBad/socket2
RalfJung Sep 26, 2026
8c3ae60
Don't build format string suggestions from `concat!` offsets
h-kurashina Sep 26, 2026
32af1b8
Merge pull request #5349 from YohDeadfall/disable-ra-diagnostics-helix
RalfJung Sep 26, 2026
c22ad42
Prepare for merging from rust-lang/rust
Sep 27, 2026
a8837e4
Merge ref 'c23137133458' from rust-lang/rust
Sep 27, 2026
ca44a87
Merge pull request #5350 from rust-lang/rustup-2026-09-27
RalfJung Sep 27, 2026
b1d3d37
Don't assert EINPROGRESS for non-blocking `connect` on TCP sockets
WhySoBad Sep 27, 2026
742e775
Prepare for merging from rust-lang/rust
Sep 28, 2026
fb006eb
Merge ref '22697761c6a0' from rust-lang/rust
Sep 28, 2026
5c42b6d
fmt
Sep 28, 2026
ea5a525
Merge pull request #5353 from rust-lang/rustup-2026-09-28
RalfJung Sep 28, 2026
42f663b
Prepare for merging from rust-lang/rust
bjorn3 Sep 28, 2026
965e5c1
Merge ref 'd080e7dff1b0' (nightly-2026-09-28) from rust-lang/rust
bjorn3 Sep 28, 2026
f9d8355
Simplify rustup.sh a bit
bjorn3 Sep 28, 2026
b9e7e71
nonzero doc: replacing tabs with spaces
Eleocraft Sep 28, 2026
6cf905c
Merge pull request #5348 from WhySoBad/fix-non-blocking-connect-asser…
RalfJung Sep 28, 2026
d10b01c
Use `{IntTy,UintTy}::name` in `Ty::primitive_symbol`
nnethercote Sep 29, 2026
935c565
Factor out repeated `get_normal_item` calls
nnethercote Jul 27, 2026
bc7618a
Add test case for an invalid attribute with nested `cfg_attr`
nnethercote Jul 27, 2026
7af2cce
Remove unused `rustc_middle::ty::cast::IntTy::is_signed`
nnethercote Sep 29, 2026
a4cd051
Prepare for merging from rust-lang/rust
Sep 29, 2026
a3f6598
Merge ref '5d8937173e7c' from rust-lang/rust
Sep 29, 2026
52e0abb
fmt
Sep 29, 2026
3e5b244
Mark duplicate attr messages as not machine applicable
nnethercote Jul 28, 2026
238f30f
Merge pull request #5357 from rust-lang/rustup-2026-09-29
RalfJung Sep 29, 2026
b2c2077
Update expect messages in library/std/src/os/unix/net/ following styl…
literally-user Sep 26, 2026
bc0240c
Don't use the metadata based crate_hash for rustdoc runs
Daniel-B-Smith Sep 28, 2026
588c189
expose Rc::is_unique
malezjaa Sep 29, 2026
0883f59
x86_64: cleanup `reg_component`
folkertdev Sep 29, 2026
7f5fdab
x86 callconv: refactor into separate classify methods
folkertdev Sep 26, 2026
457af24
x86 callconv: put regparam into `Flavor::General`
folkertdev Sep 26, 2026
330b5d1
miri: implement again shims for LLVM intrinsics for `_mm_mulhi_epi16`…
eduardosm Sep 29, 2026
14d09db
cycle handling: mirror old solver
lcnr Sep 29, 2026
8ad444f
Merge pull request #5358 from eduardosm/revert-116609
RalfJung Sep 29, 2026
36358d0
gating f16 and f128 tests behind target_has_reliable
Eleocraft Sep 29, 2026
2eeeb39
Use more default field values in `Resolver`
estebank Sep 29, 2026
728205b
Forbid `Reborrow` impls for types with destructors
Jules-Bertholet Sep 30, 2026
a5e0df2
Remove `rustc_middle::ty::cast::IntTy`
nnethercote Sep 29, 2026
9bdf58f
Move `rustc_middle::ty::cast::CastKind`
nnethercote Sep 29, 2026
f69dfad
Prepare for merging from rust-lang/rust
Sep 30, 2026
2297dad
Merge ref '5c543b0b8c73' from rust-lang/rust
Sep 30, 2026
7c8015d
Merge pull request #5360 from rust-lang/rustup-2026-09-30
RalfJung Sep 30, 2026
257c716
Merge pull request #5336 from RalfJung/win-fs
RalfJung Sep 30, 2026
9970383
Document `Result` case for the `arena_cache` query modifier
nnethercote Sep 1, 2026
424d242
Attribute documentation for cfg_attr
kantnero Aug 3, 2026
63a9c85
fix CI failure
kantnero Aug 3, 2026
1e418da
fix merge conflict
kantnero Aug 3, 2026
52fd615
use cfg_select in a few more places
RalfJung Sep 30, 2026
b02b23f
windows host: use FILE_FLAG_OPEN_REPARSE_POINT to implement O_NOFOLLOW
RalfJung Sep 30, 2026
25fef88
move libc-fs tests back together
RalfJung Sep 30, 2026
c3c4a0a
unix open: reject opening directories
RalfJung Sep 30, 2026
1850727
fix ci
kantnero Sep 30, 2026
7c70e5d
Merge pull request #5361 from RalfJung/win-nofollow
RalfJung Sep 30, 2026
654d664
add regression test
lcnr Sep 30, 2026
b7448a3
add fstatat test
RalfJung Sep 29, 2026
4912ffd
use utils::into_c_string in more places
RalfJung Sep 29, 2026
5196402
organize and extend statx tests
RalfJung Sep 29, 2026
2cf7527
prefix all test files with miri
RalfJung Sep 29, 2026
c6e51b3
implement fstatat and the equivalent parts of statx
RalfJung Sep 30, 2026
f02d1d5
Prepare for merging from rust-lang/rust
bjorn3 Sep 30, 2026
a4aec95
Merge ref '5c543b0b8c73' (nightly-2026-09-30) from rust-lang/rust
bjorn3 Sep 30, 2026
ce32541
Merge pull request #5362 from RalfJung/fstatat
RalfJung Sep 30, 2026
f6e6de6
Fix rustc test suite
bjorn3 Sep 30, 2026
bbf5442
Fix pushes
bjorn3 Sep 30, 2026
5658d6b
update lockfile
RalfJung Sep 30, 2026
57be633
address feedback
kantnero Sep 30, 2026
1161c07
Some refactorings around metadata encoding
aerooneqq Sep 30, 2026
7c35df5
Remove #[linkage = "internal"]
bjorn3 Sep 27, 2026
6d02b77
Remove #[linkage = "external"]
bjorn3 Sep 27, 2026
d731eda
Remove #[linkage = "common"]
bjorn3 Sep 27, 2026
dd0f941
make mips64 `Complex` ABI GCC-compatible
folkertdev Jul 26, 2026
75b3b9d
Rollup merge of #163532 - bjorn3:sync_cg_clif-2026-09-30, r=bjorn3
JonathanBrouwer Sep 30, 2026
ea901e3
Rollup merge of #163534 - RalfJung:miri, r=RalfJung
JonathanBrouwer Sep 30, 2026
ab2394d
Rollup merge of #163279 - Eleocraft:clamp-magnitude-unsigned-limit, r…
JonathanBrouwer Sep 30, 2026
40b91db
Rollup merge of #162900 - aerooneqq:record-tables-through-macros, r=p…
JonathanBrouwer Sep 30, 2026
b96c52f
Rollup merge of #163455 - Daniel-B-Smith:smithdb3/163426, r=bjorn3
JonathanBrouwer Sep 30, 2026
8e3d1d4
Rollup merge of #159798 - kantnero:attribute-documentation, r=mejrs
JonathanBrouwer Sep 30, 2026
e035dd9
Rollup merge of #162921 - folkertdev:complex-mips64, r=beetrees
JonathanBrouwer Sep 30, 2026
7c94ee0
Rollup merge of #163368 - h-kurashina:fix-156101, r=mejrs
JonathanBrouwer Sep 30, 2026
1a2ddea
Rollup merge of #163375 - literally-user:better-expect-messages, r=Ch…
JonathanBrouwer Sep 30, 2026
2cc2b3d
Rollup merge of #163405 - bjorn3:less_linkage_options, r=lqd
JonathanBrouwer Sep 30, 2026
bf67c02
Rollup merge of #163470 - nnethercote:misc-attr-error-stuff, r=Jonath…
JonathanBrouwer Sep 30, 2026
20a581b
Rollup merge of #163489 - malezjaa:expose-rc-is_unique, r=clarfonthey
JonathanBrouwer Sep 30, 2026
3aba8a1
Rollup merge of #163492 - folkertdev:x86-callconv-refactor, r=oli-obk
JonathanBrouwer Sep 30, 2026
244a2a3
Rollup merge of #163496 - lcnr:weaken-cycle-handling, r=jackh726
JonathanBrouwer Sep 30, 2026
b400a2d
Rollup merge of #163509 - estebank:default-more, r=petrochenkov
JonathanBrouwer Sep 30, 2026
e6a4be1
Rollup merge of #163519 - Jules-Bertholet:no-reborrow-destructor, r=m…
JonathanBrouwer Sep 30, 2026
40a139e
Rollup merge of #163520 - nnethercote:cast-cleanups, r=oli-obk
JonathanBrouwer Sep 30, 2026
623f700
Rollup merge of #163524 - nnethercote:arena_cache-Result-doc, r=Zalathar
JonathanBrouwer Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2558,8 +2558,10 @@ dependencies = [
"serde",
"serde_json",
"smallvec",
"socket2",
"tempfile",
"ui_test",
"windows-sys 0.61.2",
]

[[package]]
Expand Down Expand Up @@ -5472,9 +5474,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"

[[package]]
name = "socket2"
version = "0.6.3"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
dependencies = [
"libc",
"windows-sys 0.61.2",
Expand Down
1 change: 0 additions & 1 deletion compiler/rustc_attr_ir/src/data_structures.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,6 @@ impl<ScopeId> StrippedCfgItem<ScopeId> {
#[derive(StableHash, PrintAttribute)]
pub enum Linkage {
AvailableExternally,
Common,
ExternalWeak,
External,
Internal,
Expand Down
1 change: 0 additions & 1 deletion compiler/rustc_attr_ir/src/encode_cross_crate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,6 @@ impl AttributeKind {
Linkage(linkage, _) => match *linkage {
crate::Linkage::Internal => false,
crate::Linkage::AvailableExternally
| crate::Linkage::Common
| crate::Linkage::External
| crate::Linkage::ExternalWeak
| crate::Linkage::LinkOnceAny
Expand Down
31 changes: 16 additions & 15 deletions compiler/rustc_attr_parsing/src/attributes/cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,8 @@ pub fn parse_cfg_attr(
features: Option<&Features>,
lint_node_id: ast::NodeId,
) -> Option<(CfgEntry, Vec<(WithTokens<AttrItem>, Span)>)> {
match &cfg_attr.get_normal_item().args {
let item = cfg_attr.get_normal_item();
match &item.args {
ast::AttrArgs::Delimited(ast::DelimArgs { dspan, delim, tokens }) if !tokens.is_empty() => {
check_cfg_attr_bad_delim(&sess.psess, *dspan, *delim);
match parse_in(&sess.psess, tokens.clone(), "`cfg_attr` input", |p| {
Expand All @@ -316,11 +317,11 @@ pub fn parse_cfg_attr(
Err(e) => {
let suggestions = CFG_ATTR_TEMPLATE.suggestions(
ParsedDescription::Attribute,
cfg_attr.get_normal_item().unsafety,
item.unsafety,
sym::cfg_attr,
);
e.with_span_suggestions(
cfg_attr.get_normal_item().span,
item.span,
"must be of the form",
suggestions,
Applicability::HasPlaceholders,
Expand All @@ -334,25 +335,24 @@ pub fn parse_cfg_attr(
}
}
_ => {
let (span, reason) = if let ast::AttrArgs::Delimited(ast::DelimArgs { dspan, .. }) =
cfg_attr.get_normal_item().args
{
(dspan.entire(), AttributeParseErrorReason::ExpectedAtLeastOneArgument)
} else {
(cfg_attr.get_normal_item().span, AttributeParseErrorReason::ExpectedList)
};
let (span, reason) =
if let ast::AttrArgs::Delimited(ast::DelimArgs { dspan, .. }) = item.args {
(dspan.entire(), AttributeParseErrorReason::ExpectedAtLeastOneArgument)
} else {
(item.span, AttributeParseErrorReason::ExpectedList)
};

sess.dcx().emit_err(AttributeParseError {
span,
inner_span: cfg_attr.get_normal_item().span,
inner_span: item.span,
template: CFG_ATTR_TEMPLATE,
path: AttrPath::from_ast(&cfg_attr.get_normal_item().path, identity),
path: AttrPath::from_ast(&item.path, identity),
description: ParsedDescription::Attribute,
reason,
suggestions: diagnostics::AttributeParseErrorSuggestions::CreatedByTemplate(
CFG_ATTR_TEMPLATE.suggestions(
ParsedDescription::Attribute,
cfg_attr.get_normal_item().unsafety,
item.unsafety,
sym::cfg_attr,
),
),
Expand Down Expand Up @@ -389,13 +389,14 @@ fn parse_cfg_attr_internal<'a>(
)?;
let pred_span = pred_start.with_hi(parser.token.span.hi());

let item = attribute.get_normal_item();
let cfg_predicate = AttributeParser::parse_single_args(
sess,
attribute.span,
attribute.get_normal_item().span,
item.span,
attribute.style,
AttrPath { segments: attribute.path().into_boxed_slice(), span: attribute.span },
Some(attribute.get_normal_item().unsafety),
Some(item.unsafety),
AttributeSafety::Normal,
ParsedDescription::Attribute,
pred_span,
Expand Down
9 changes: 0 additions & 9 deletions compiler/rustc_attr_parsing/src/attributes/link_attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -685,10 +685,7 @@ impl SingleAttributeParser for LinkageParser {
]);
const TEMPLATE: AttributeTemplate = template!(NameValueStr: [
"available_externally",
"common",
"extern_weak",
"external",
"internal",
"linkonce",
"linkonce_odr",
"weak",
Expand All @@ -711,10 +708,7 @@ impl SingleAttributeParser for LinkageParser {
// and don't have to be, LLVM treats them as no-ops.
let linkage = match value {
sym::available_externally => Linkage::AvailableExternally,
sym::common => Linkage::Common,
sym::extern_weak => Linkage::ExternalWeak,
sym::external => Linkage::External,
sym::internal => Linkage::Internal,
sym::linkonce => Linkage::LinkOnceAny,
sym::linkonce_odr => Linkage::LinkOnceODR,
sym::weak => Linkage::WeakAny,
Expand All @@ -725,10 +719,7 @@ impl SingleAttributeParser for LinkageParser {
name_value.value_span,
&[
sym::available_externally,
sym::common,
sym::extern_weak,
sym::external,
sym::internal,
sym::linkonce,
sym::linkonce_odr,
sym::weak,
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_attr_parsing/src/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1235,7 +1235,7 @@ pub(crate) struct UnknownVersionLiteral {
#[diag("multiple `{$name}` attributes")]
pub(crate) struct UnusedMultiple {
#[primary_span]
#[suggestion("remove this attribute", code = "", applicability = "machine-applicable")]
#[suggestion("remove this attribute", code = "", applicability = "unspecified")]
pub this: Span,
#[note("attribute also specified here")]
pub other: Span,
Expand Down Expand Up @@ -2061,7 +2061,7 @@ pub(crate) struct AdditionalCommaSuggestion {
#[derive(Diagnostic)]
#[diag("unused attribute")]
pub(crate) struct UnusedDuplicate {
#[suggestion("remove this attribute", code = "", applicability = "machine-applicable")]
#[suggestion("remove this attribute", code = "", applicability = "unspecified")]
pub this: Span,
#[note("attribute also specified here")]
pub other: Span,
Expand Down
10 changes: 5 additions & 5 deletions compiler/rustc_borrowck/src/type_check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1361,7 +1361,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
let cast_ty_from = CastTy::from_ty(ty_from);
let cast_ty_to = CastTy::from_ty(*ty);
match (cast_ty_from, cast_ty_to) {
(Some(CastTy::Ptr(_) | CastTy::FnPtr), Some(CastTy::Int(_))) => (),
(Some(CastTy::Ptr(_) | CastTy::FnPtr), Some(CastTy::Int)) => (),
_ => {
span_mirbug!(
self,
Expand All @@ -1379,7 +1379,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
let cast_ty_from = CastTy::from_ty(ty_from);
let cast_ty_to = CastTy::from_ty(*ty);
match (cast_ty_from, cast_ty_to) {
(Some(CastTy::Int(_)), Some(CastTy::Ptr(_))) => (),
(Some(CastTy::Int), Some(CastTy::Ptr(_))) => (),
_ => {
span_mirbug!(
self,
Expand All @@ -1396,7 +1396,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
let cast_ty_from = CastTy::from_ty(ty_from);
let cast_ty_to = CastTy::from_ty(*ty);
match (cast_ty_from, cast_ty_to) {
(Some(CastTy::Int(_)), Some(CastTy::Int(_))) => (),
(Some(from), Some(to)) if from.is_int_like() && to.is_int_like() => (),
_ => {
span_mirbug!(
self,
Expand All @@ -1413,7 +1413,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
let cast_ty_from = CastTy::from_ty(ty_from);
let cast_ty_to = CastTy::from_ty(*ty);
match (cast_ty_from, cast_ty_to) {
(Some(CastTy::Int(_)), Some(CastTy::Float)) => (),
(Some(CastTy::Int), Some(CastTy::Float)) => (),
_ => {
span_mirbug!(
self,
Expand All @@ -1430,7 +1430,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
let cast_ty_from = CastTy::from_ty(ty_from);
let cast_ty_to = CastTy::from_ty(*ty);
match (cast_ty_from, cast_ty_to) {
(Some(CastTy::Float), Some(CastTy::Int(_))) => (),
(Some(CastTy::Float), Some(CastTy::Int)) => (),
_ => {
span_mirbug!(
self,
Expand Down
26 changes: 16 additions & 10 deletions compiler/rustc_builtin_macros/src/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,9 @@ fn make_format_args(
parse::Suggestion::UsePositional => {
let captured_arg_span =
fmt_span.from_inner(InnerSpan::new(err.span.start, err.span.end));
if let Ok(arg) = ecx.source_map().span_to_snippet(captured_arg_span) {
if is_source_literal
&& let Ok(arg) = ecx.source_map().span_to_snippet(captured_arg_span)
{
let span = match args.unnamed_args().last() {
Some(arg) => arg.expr.span,
None => fmt_span,
Expand All @@ -360,17 +362,21 @@ fn make_format_args(
}
}
parse::Suggestion::ReorderFormatParameter(span, replacement) => {
let span = fmt_span.from_inner(InnerSpan::new(span.start, span.end));
e.sugg_ =
Some(diagnostics::InvalidFormatStringSuggestion::ReorderFormatParameter {
span,
replacement,
});
if is_source_literal {
let span = fmt_span.from_inner(InnerSpan::new(span.start, span.end));
e.sugg_ =
Some(diagnostics::InvalidFormatStringSuggestion::ReorderFormatParameter {
span,
replacement,
});
}
}
parse::Suggestion::AddMissingColon(span) => {
let span = fmt_span.from_inner(InnerSpan::new(span.start, span.end));
e.sugg_ =
Some(diagnostics::InvalidFormatStringSuggestion::AddMissingColon { span });
if is_source_literal {
let span = fmt_span.from_inner(InnerSpan::new(span.start, span.end));
e.sugg_ =
Some(diagnostics::InvalidFormatStringSuggestion::AddMissingColon { span });
}
}
parse::Suggestion::UseRustDebugPrintingMacro => {
// This targets `println!("{=}", x);` and `println!("{0=}", x);`
Expand Down
Loading
Loading