Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
66 changes: 35 additions & 31 deletions compiler/rustc_borrowck/src/universal_regions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -543,38 +543,9 @@ impl<'cx, 'tcx> UniversalRegionsBuilder<'cx, 'tcx> {
&indices,
);

let (unnormalized_output_ty, mut unnormalized_input_tys) =
let (unnormalized_output_ty, unnormalized_input_tys) =
inputs_and_output.split_last().unwrap();

// C-variadic fns also have a `VaList` input that's not listed in the signature
// (as it's created inside the body itself, not passed in from outside).
if let DefiningTy::FnDef(def_id, _) = defining_ty {
if self.infcx.tcx.fn_sig(def_id).skip_binder().c_variadic() {
let va_list_did = self
.infcx
.tcx
.require_lang_item(LangItem::VaList, self.infcx.tcx.def_span(self.mir_def));

let reg_vid = self
.infcx
.next_nll_region_var(NllRegionVariableOrigin::FreeRegion, || {
RegionCtxt::Free(sym::c_dash_variadic)
})
.as_var();

let region = ty::Region::new_var(self.infcx.tcx, reg_vid);
let va_list_ty = self
.infcx
.tcx
.type_of(va_list_did)
.instantiate(self.infcx.tcx, &[region.into()]);

unnormalized_input_tys = self.infcx.tcx.mk_type_list_from_iter(
unnormalized_input_tys.iter().copied().chain(iter::once(va_list_ty)),
);
}
}

let fr_fn_body = self
.infcx
.next_nll_region_var(NllRegionVariableOrigin::FreeRegion, || {
Expand Down Expand Up @@ -816,7 +787,40 @@ impl<'cx, 'tcx> UniversalRegionsBuilder<'cx, 'tcx> {
DefiningTy::FnDef(def_id, _) => {
let sig = tcx.fn_sig(def_id).instantiate_identity();
let sig = indices.fold_to_region_vids(tcx, sig);
sig.inputs_and_output()
let inputs_and_output = sig.inputs_and_output();

// C-variadic fns also have a `VaList` input that's not listed in the signature
// (as it's created inside the body itself, not passed in from outside).
if self.infcx.tcx.fn_sig(def_id).skip_binder().c_variadic() {
let va_list_did = self
.infcx
.tcx
.require_lang_item(LangItem::VaList, self.infcx.tcx.def_span(self.mir_def));

let reg_vid = self
.infcx
.next_nll_region_var(NllRegionVariableOrigin::FreeRegion, || {
RegionCtxt::Free(sym::c_dash_variadic)
})
.as_var();

let region = ty::Region::new_var(self.infcx.tcx, reg_vid);
let va_list_ty = self
.infcx
.tcx
.type_of(va_list_did)
.instantiate(self.infcx.tcx, &[region.into()]);

// The signature needs to follow the order [input_tys, va_list_ty, output_ty]
return inputs_and_output.map_bound(|tys| {
let (output_ty, input_tys) = tys.split_last().unwrap();
tcx.mk_type_list_from_iter(
input_tys.iter().copied().chain([va_list_ty, *output_ty]),
)
});
}

inputs_and_output
}

DefiningTy::Const(def_id, _) => {
Expand Down
2 changes: 1 addition & 1 deletion src/doc/reference
Submodule reference updated 70 files
+1 −1 .cargo/config.toml
+4 −14 .github/workflows/main.yml
+2 −2 .gitignore
+161 −140 Cargo.lock
+8 −0 Cargo.toml
+2 −2 book.toml
+3 −3 docs/authoring.md
+0 −1 mdbook-spec/.gitignore
+0 −13 mdbook-spec/CHANGELOG.md
+0 −5 mdbook-spec/README.md
+0 −425 mdbook-spec/src/grammar.rs
+0 −236 mdbook-spec/src/grammar/render_markdown.rs
+0 −304 mdbook-spec/src/grammar/render_railroad.rs
+1 −1 src/attributes.md
+5 −15 src/comments.md
+1 −1 src/conditional-compilation.md
+12 −23 src/const_eval.md
+1 −1 src/expressions/await-expr.md
+3 −3 src/expressions/operator-expr.md
+1 −1 src/expressions/path-expr.md
+1 −0 src/glossary.md
+7 −8 src/identifiers.md
+2 −4 src/input-format.md
+2 −2 src/items.md
+2 −2 src/items/associated-items.md
+1 −1 src/items/enumerations.md
+1 −1 src/items/external-blocks.md
+1 −1 src/items/traits.md
+9 −57 src/items/use-declarations.md
+5 −12 src/keywords.md
+107 −4 src/macros-by-example.md
+12 −2 src/macros.md
+555 −1 src/names/name-resolution.md
+12 −2 src/names/namespaces.md
+18 −0 src/procedural-macros.md
+106 −214 src/tokens.md
+222 −44 src/types/closure.md
+1 −2 src/types/function-pointer.md
+3 −6 src/whitespace.md
+0 −1 style-check/.gitignore
+0 −71 style-check/Cargo.lock
+1 −1 theme/reference.css
+6 −0 tools/diagnostics/Cargo.toml
+3 −0 tools/diagnostics/README.md
+51 −0 tools/diagnostics/src/lib.rs
+10 −0 tools/grammar/Cargo.toml
+3 −0 tools/grammar/README.md
+250 −0 tools/grammar/src/lib.rs
+0 −0 tools/grammar/src/parser.rs
+3 −2 tools/mdbook-spec/Cargo.toml
+0 −0 tools/mdbook-spec/LICENSE-APACHE
+0 −0 tools/mdbook-spec/LICENSE-MIT
+3 −0 tools/mdbook-spec/README.md
+0 −0 tools/mdbook-spec/src/admonitions.rs
+188 −0 tools/mdbook-spec/src/grammar.rs
+229 −0 tools/mdbook-spec/src/grammar/render_markdown.rs
+295 −0 tools/mdbook-spec/src/grammar/render_railroad.rs
+4 −53 tools/mdbook-spec/src/lib.rs
+0 −0 tools/mdbook-spec/src/main.rs
+0 −0 tools/mdbook-spec/src/rules.rs
+1 −1 tools/mdbook-spec/src/std_links.rs
+0 −0 tools/mdbook-spec/src/test_links.rs
+2 −2 tools/style-check/Cargo.toml
+3 −0 tools/style-check/README.md
+0 −0 tools/style-check/src/main.rs
+1 −0 tools/xtask/Cargo.toml
+3 −0 tools/xtask/README.md
+20 −12 tools/xtask/src/main.rs
+0 −1 xtask/.gitignore
+0 −7 xtask/Cargo.lock
2 changes: 1 addition & 1 deletion src/doc/rust-by-example
18 changes: 17 additions & 1 deletion src/tools/rustbook/Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,10 @@ dependencies = [
"syn",
]

[[package]]
name = "diagnostics"
version = "0.0.0"

[[package]]
name = "digest"
version = "0.10.7"
Expand Down Expand Up @@ -464,6 +468,16 @@ dependencies = [
"wasip2",
]

[[package]]
name = "grammar"
version = "0.0.0"
dependencies = [
"diagnostics",
"pathdiff",
"regex",
"walkdir",
]

[[package]]
name = "handlebars"
version = "6.3.2"
Expand Down Expand Up @@ -774,9 +788,11 @@ dependencies = [

[[package]]
name = "mdbook-spec"
version = "0.1.2"
version = "0.0.0"
dependencies = [
"anyhow",
"diagnostics",
"grammar",
"mdbook-markdown",
"mdbook-preprocessor",
"once_cell",
Expand Down
2 changes: 1 addition & 1 deletion src/tools/rustbook/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ edition = "2021"
clap = { version = "4.0.32", features = ["cargo"] }
mdbook-driver = { version = "0.5.2", features = ["search"] }
mdbook-i18n-helpers = "0.4.0"
mdbook-spec = { path = "../../doc/reference/mdbook-spec" }
mdbook-spec = { path = "../../doc/reference/tools/mdbook-spec" }
mdbook-trpl = { path = "../../doc/book/packages/mdbook-trpl" }
tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
8 changes: 4 additions & 4 deletions tests/ui/c-variadic/variadic-ffi-4.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ error: lifetime may not live long enough
--> $DIR/variadic-ffi-4.rs:22:5
|
LL | pub unsafe extern "C" fn no_escape4(_: usize, mut ap0: &mut VaList, mut ap1: ...) {
| ------- ------- has type `VaList<'2>`
| ------- ------- has type `VaList<'1>`
| |
| has type `&mut VaList<'1>`
| has type `&mut VaList<'2>`
LL | ap0 = &mut ap1;
| ^^^^^^^^^^^^^^ assignment requires that `'1` must outlive `'2`
|
Expand All @@ -44,9 +44,9 @@ error: lifetime may not live long enough
--> $DIR/variadic-ffi-4.rs:22:5
|
LL | pub unsafe extern "C" fn no_escape4(_: usize, mut ap0: &mut VaList, mut ap1: ...) {
| ------- ------- has type `VaList<'2>`
| ------- ------- has type `VaList<'1>`
| |
| has type `&mut VaList<'1>`
| has type `&mut VaList<'2>`
LL | ap0 = &mut ap1;
| ^^^^^^^^^^^^^^ assignment requires that `'2` must outlive `'1`
|
Expand Down
Loading