Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 8 pull requests #86757

Merged
merged 22 commits into from
Jul 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2caaa07
the foundation owns rust trademarks
liigo May 20, 2021
9c65f9f
this section is just about trademarks, not governance
liigo May 26, 2021
4e08bb5
Fix typo and improve documentation for E0632
FabianWolff May 23, 2021
69c8573
Bless UI tests
FabianWolff Jun 29, 2021
2586e96
Check node kind to avoid ICE in `check_expr_return()`
FabianWolff Jun 29, 2021
fe822fe
copy rust-lld as ld in dist
sledgehammervampire Jun 13, 2021
11fd857
Emit explanatory note for functions in trait and impl items as well
FabianWolff Jun 30, 2021
7b62d28
Enforce search typed queries
GuillaumeGomez Jun 30, 2021
855923c
Add test to ensure that the typed queries are not including other types
GuillaumeGomez Jun 30, 2021
3b9453b
use is_const_fn_raw when encoding constness
fee1-dead Jun 30, 2021
c424510
Add tests for cross-crate usage of `impl const`
fee1-dead Jun 30, 2021
0c26783
Match on `hir::TraitFn::Provided` instead of using `maybe_body_owned_by`
FabianWolff Jun 30, 2021
7c9445d
alloc: `RawVec<T, A>::shrink` can be in `no_global_oom_handling`.
ojeda Jun 30, 2021
2a60f09
Add suggestion for missing compile flag group
camsteffen Jun 27, 2021
7c06191
Rollup merge of #85504 - liigo:patch-13, r=Mark-Simulacrum
JohnTitor Jun 30, 2021
1823b3f
Rollup merge of #85520 - FabianWolff:issue-85475, r=jackh726
JohnTitor Jun 30, 2021
56ddef8
Rollup merge of #86680 - camsteffen:dbg-opt-error, r=petrochenkov
JohnTitor Jun 30, 2021
dfe05c0
Rollup merge of #86728 - FabianWolff:issue-86721, r=LeSeulArtichaut
JohnTitor Jun 30, 2021
e52a0ec
Rollup merge of #86740 - 1000teslas:issue-71519-fix, r=petrochenkov
JohnTitor Jun 30, 2021
f458d8f
Rollup merge of #86746 - GuillaumeGomez:query-type-filter, r=notriddle
JohnTitor Jun 30, 2021
7714a9a
Rollup merge of #86750 - fee1-dead:impl-const-test, r=jonas-schievink
JohnTitor Jun 30, 2021
9e007e7
Rollup merge of #86755 - ojeda:shrink, r=Mark-Simulacrum
JohnTitor Jun 30, 2021
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
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,15 +272,14 @@ See [LICENSE-APACHE](LICENSE-APACHE), [LICENSE-MIT](LICENSE-MIT), and
## Trademark
The Rust programming language is an open source, community project governed
by a core team. It is also sponsored by the Mozilla Foundation (“Mozilla”),
which owns and protects the Rust and Cargo trademarks and logos
(the “Rust Trademarks”).
[The Rust Foundation][rust-foundation] owns and protects the Rust and Cargo
trademarks and logos (the “Rust Trademarks”).
If you want to use these names or brands, please read the [media guide][media-guide].
Third-party logos may be subject to third-party copyrights and trademarks. See
[Licenses][policies-licenses] for details.
[rust-foundation]: https://foundation.rust-lang.org/
[media-guide]: https://www.rust-lang.org/policies/media-guide
[policies-licenses]: https://www.rust-lang.org/policies/licenses
17 changes: 13 additions & 4 deletions compiler/rustc_driver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use rustc_middle::middle::cstore::MetadataLoader;
use rustc_save_analysis as save;
use rustc_save_analysis::DumpHandler;
use rustc_serialize::json::{self, ToJson};
use rustc_session::config::nightly_options;
use rustc_session::config::{nightly_options, CG_OPTIONS, DB_OPTIONS};
use rustc_session::config::{ErrorOutputType, Input, OutputType, PrintRequest, TrimmedDefPaths};
use rustc_session::getopts;
use rustc_session::lint::{Lint, LintId};
Expand Down Expand Up @@ -1017,9 +1017,18 @@ pub fn handle_options(args: &[String]) -> Option<getopts::Matches> {
for option in config::rustc_optgroups() {
(option.apply)(&mut options);
}
let matches = options
.parse(args)
.unwrap_or_else(|f| early_error(ErrorOutputType::default(), &f.to_string()));
let matches = options.parse(args).unwrap_or_else(|e| {
let msg = match e {
getopts::Fail::UnrecognizedOption(ref opt) => CG_OPTIONS
.iter()
.map(|&(name, ..)| ('C', name))
.chain(DB_OPTIONS.iter().map(|&(name, ..)| ('Z', name)))
.find(|&(_, name)| *opt == name.replace("_", "-"))
.map(|(flag, _)| format!("{}. Did you mean `-{} {}`?", e, flag, opt)),
_ => None,
};
early_error(ErrorOutputType::default(), &msg.unwrap_or_else(|| e.to_string()));
});

// For all options we just parsed, we check a few aspects:
//
Expand Down
3 changes: 1 addition & 2 deletions compiler/rustc_error_codes/src/error_codes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ E0626: include_str!("./error_codes/E0626.md"),
E0627: include_str!("./error_codes/E0627.md"),
E0628: include_str!("./error_codes/E0628.md"),
E0631: include_str!("./error_codes/E0631.md"),
E0632: include_str!("./error_codes/E0632.md"),
E0633: include_str!("./error_codes/E0633.md"),
E0634: include_str!("./error_codes/E0634.md"),
E0635: include_str!("./error_codes/E0635.md"),
Expand Down Expand Up @@ -623,8 +624,6 @@ E0783: include_str!("./error_codes/E0783.md"),
// E0629, // missing 'feature' (rustc_const_unstable)
// E0630, // rustc_const_unstable attribute must be paired with stable/unstable
// attribute
E0632, // cannot provide explicit generic arguments when `impl Trait` is
// used in argument position
E0640, // infer outlives requirements
// E0645, // trait aliases not finished
E0667, // `impl Trait` in projections
Expand Down
25 changes: 25 additions & 0 deletions compiler/rustc_error_codes/src/error_codes/E0632.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
An explicit generic argument was provided when calling a function that
uses `impl Trait` in argument position.

Erroneous code example:

```compile_fail,E0632
fn foo<T: Copy>(a: T, b: impl Clone) {}
foo::<i32>(0i32, "abc".to_string());
```

Either all generic arguments should be inferred at the call site, or
the function definition should use an explicit generic type parameter
instead of `impl Trait`. Example:

```
fn foo<T: Copy>(a: T, b: impl Clone) {}
fn bar<T: Copy, U: Clone>(a: T, b: U) {}
foo(0i32, "abc".to_string());
bar::<i32, String>(0i32, "abc".to_string());
bar::<_, _>(0i32, "abc".to_string());
bar(0i32, "abc".to_string());
```
2 changes: 1 addition & 1 deletion compiler/rustc_lint/src/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1084,7 +1084,7 @@ declare_lint! {
///
/// ### Explanation
///
/// An function with generics must have its symbol mangled to accommodate
/// A function with generics must have its symbol mangled to accommodate
/// the generic parameter. The [`no_mangle` attribute] has no effect in
/// this situation, and should be removed.
///
Expand Down
7 changes: 6 additions & 1 deletion compiler/rustc_metadata/src/rmeta/encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,12 @@ impl EncodeContext<'a, 'tcx> {
let fn_data = if let hir::ImplItemKind::Fn(ref sig, body) = ast_item.kind {
FnData {
asyncness: sig.header.asyncness,
constness: sig.header.constness,
// Can be inside `impl const Trait`, so using sig.header.constness is not reliable
constness: if self.tcx.is_const_fn_raw(def_id) {
hir::Constness::Const
} else {
hir::Constness::NotConst
},
param_names: self.encode_fn_param_names_for_body(body),
}
} else {
Expand Down
20 changes: 17 additions & 3 deletions compiler/rustc_typeck/src/check/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -682,9 +682,23 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
};

let encl_item_id = self.tcx.hir().get_parent_item(expr.hir_id);
let encl_item = self.tcx.hir().expect_item(encl_item_id);

if let hir::ItemKind::Fn(..) = encl_item.kind {
if let Some(hir::Node::Item(hir::Item {
kind: hir::ItemKind::Fn(..),
span: encl_fn_span,
..
}))
| Some(hir::Node::TraitItem(hir::TraitItem {
kind: hir::TraitItemKind::Fn(_, hir::TraitFn::Provided(_)),
span: encl_fn_span,
..
}))
| Some(hir::Node::ImplItem(hir::ImplItem {
kind: hir::ImplItemKind::Fn(..),
span: encl_fn_span,
..
})) = self.tcx.hir().find(encl_item_id)
{
// We are inside a function body, so reporting "return statement
// outside of function body" needs an explanation.

Expand All @@ -698,7 +712,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let encl_body = self.tcx.hir().body(encl_body_id);

err.encl_body_span = Some(encl_body.value.span);
err.encl_fn_span = Some(encl_item.span);
err.encl_fn_span = Some(*encl_fn_span);
}

self.tcx.sess.emit_err(err);
Expand Down
1 change: 0 additions & 1 deletion library/alloc/src/raw_vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,6 @@ impl<T, A: Allocator> RawVec<T, A> {
Ok(())
}

#[cfg(not(no_global_oom_handling))]
fn shrink(&mut self, amount: usize) -> Result<(), TryReserveError> {
assert!(amount <= self.capacity(), "Tried to shrink to a larger capacity");

Expand Down
6 changes: 3 additions & 3 deletions src/bootstrap/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -400,12 +400,12 @@ impl Step for Rustc {

// Copy over lld if it's there
if builder.config.lld_enabled {
let exe = exe("rust-lld", compiler.host);
builder.copy(&src_dir.join(&exe), &dst_dir.join(&exe));
let rust_lld = exe("rust-lld", compiler.host);
builder.copy(&src_dir.join(&rust_lld), &dst_dir.join(&rust_lld));
// for `-Z gcc-ld=lld`
let gcc_lld_dir = dst_dir.join("gcc-ld");
t!(fs::create_dir(&gcc_lld_dir));
builder.copy(&src_dir.join(&exe), &gcc_lld_dir.join(&exe));
builder.copy(&src_dir.join(&rust_lld), &gcc_lld_dir.join(exe("ld", compiler.host)));
}

// Copy over llvm-dwp if it's there
Expand Down
3 changes: 2 additions & 1 deletion src/librustdoc/html/static/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,8 @@ window.initSearch = function(rawSearchIndex) {
results_returned[fullId].lev =
Math.min(results_returned[fullId].lev, returned);
}
if (index !== -1 || lev <= MAX_LEV_DISTANCE) {
if (typePassesFilter(typeFilter, ty.ty) &&
(index !== -1 || lev <= MAX_LEV_DISTANCE)) {
if (index !== -1 && paths.length < 2) {
lev = 0;
}
Expand Down
12 changes: 12 additions & 0 deletions src/test/rustdoc-js-std/typed-query.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// exact-check

const QUERY = 'macro:print';

const EXPECTED = {
'others': [
{ 'path': 'std', 'name': 'print' },
{ 'path': 'std', 'name': 'eprint' },
{ 'path': 'std', 'name': 'println' },
{ 'path': 'std', 'name': 'eprintln' },
],
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ LL | assert_eq!(f::<4usize>(Usizable), 20usize);

error: aborting due to previous error

For more information about this error, try `rustc --explain E0632`.
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ LL | assert_eq!(f::<4usize>(Usizable), 20usize);

error: aborting due to previous error

For more information about this error, try `rustc --explain E0632`.
1 change: 1 addition & 0 deletions src/test/ui/impl-trait/issues/universal-issue-48703.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ LL | foo::<String>('a');

error: aborting due to previous error

For more information about this error, try `rustc --explain E0632`.
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ LL | evt.handle_event::<TestEvent, fn(TestEvent)>(|_evt| {

error: aborting due to previous error

For more information about this error, try `rustc --explain E0632`.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// compile-flags: --llvm-args
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
error: Unrecognized option: 'llvm-args'. Did you mean `-C llvm-args`?

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// compile-flags: --unpretty=hir
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
error: Unrecognized option: 'unpretty'. Did you mean `-Z unpretty`?

19 changes: 19 additions & 0 deletions src/test/ui/return/issue-86188-return-not-in-fn-body.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,25 @@ const C: [(); 42] = {
}]
};

struct S {}
trait Tr {
fn foo();
fn bar() {
//~^ NOTE: ...not the enclosing function body
[(); return];
//~^ ERROR: return statement outside of function body [E0572]
//~| NOTE: the return is part of this body...
}
}
impl Tr for S {
fn foo() {
//~^ NOTE: ...not the enclosing function body
[(); return];
//~^ ERROR: return statement outside of function body [E0572]
//~| NOTE: the return is part of this body...
}
}

fn main() {
//~^ NOTE: ...not the enclosing function body
[(); return || {
Expand Down
28 changes: 26 additions & 2 deletions src/test/ui/return/issue-86188-return-not-in-fn-body.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,31 @@ LL | | }]
| |_____^

error[E0572]: return statement outside of function body
--> $DIR/issue-86188-return-not-in-fn-body.rs:17:10
--> $DIR/issue-86188-return-not-in-fn-body.rs:20:14
|
LL | / fn bar() {
LL | |
LL | | [(); return];
| | ^^^^^^ the return is part of this body...
LL | |
LL | |
LL | | }
| |_____- ...not the enclosing function body

error[E0572]: return statement outside of function body
--> $DIR/issue-86188-return-not-in-fn-body.rs:28:14
|
LL | / fn foo() {
LL | |
LL | | [(); return];
| | ^^^^^^ the return is part of this body...
LL | |
LL | |
LL | | }
| |_____- ...not the enclosing function body

error[E0572]: return statement outside of function body
--> $DIR/issue-86188-return-not-in-fn-body.rs:36:10
|
LL | / fn main() {
LL | |
Expand All @@ -23,6 +47,6 @@ LL | || }];
LL | | }
| |_- ...not the enclosing function body

error: aborting due to 2 previous errors
error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0572`.
22 changes: 22 additions & 0 deletions src/test/ui/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#![feature(const_trait_impl)]
#![allow(incomplete_features)]

pub trait MyTrait {
fn func(self);
}

pub struct NonConst;

impl MyTrait for NonConst {
fn func(self) {

}
}

pub struct Const;

impl const MyTrait for Const {
fn func(self) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// aux-build: cross-crate.rs
extern crate cross_crate;

use cross_crate::*;

fn non_const_context() {
NonConst.func();
Const.func();
}

const fn const_context() {
NonConst.func();
//~^ ERROR: calls in constant functions are limited to constant functions, tuple structs and tuple variants
Const.func();
//~^ ERROR: calls in constant functions are limited to constant functions, tuple structs and tuple variants
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants
--> $DIR/cross-crate-feature-disabled.rs:12:5
|
LL | NonConst.func();
| ^^^^^^^^^^^^^^^

error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants
--> $DIR/cross-crate-feature-disabled.rs:14:5
|
LL | Const.func();
| ^^^^^^^^^^^^

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0015`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#![feature(const_trait_impl)]
#![allow(incomplete_features)]

// aux-build: cross-crate.rs
extern crate cross_crate;

use cross_crate::*;

fn non_const_context() {
NonConst.func();
Const.func();
}

const fn const_context() {
NonConst.func();
//~^ ERROR: calls in constant functions are limited to constant functions, tuple structs and tuple variants
Const.func();
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants
--> $DIR/cross-crate-feature-enabled.rs:15:5
|
LL | NonConst.func();
| ^^^^^^^^^^^^^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0015`.
1 change: 1 addition & 0 deletions src/test/ui/synthetic-param.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ LL | Bar::<i8>::func::<u8>(42);

error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0632`.
9 changes: 9 additions & 0 deletions src/test/ui/typeck/issue-86721-return-expr-ice.rev1.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0572]: return statement outside of function body
--> $DIR/issue-86721-return-expr-ice.rs:9:22
|
LL | const U: usize = return;
| ^^^^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0572`.
Loading