diff options
| author | bors <bors@rust-lang.org> | 2020-11-19 17:27:24 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-11-19 17:27:24 +0000 |
| commit | fe982319aa0aa5bbfc2795791a753832292bd2ba (patch) | |
| tree | 52a8b4b61b22ae931beab41f42b2db7fb7608a1c /compiler/rustc_parse/src/parser | |
| parent | 3d3c8c5e0d534cdd794f1b3359089eba031d492c (diff) | |
| parent | b5fffdc12be138ddf5fbd0f20d31026597d86d4e (diff) | |
| download | rust-fe982319aa0aa5bbfc2795791a753832292bd2ba.tar.gz rust-fe982319aa0aa5bbfc2795791a753832292bd2ba.zip | |
Auto merge of #79200 - Dylan-DPC:rollup-su689pq, r=Dylan-DPC
Rollup of 14 pull requests Successful merges: - #78961 (Make bad "rust-call" arguments no longer ICE) - #79082 (Improve the diagnostic for when an `fn` contains qualifiers inside an `extern` block.) - #79090 (libary: Forward compiler-builtins "asm" and "mangled-names" feature) - #79094 (Add //ignore-macos to pretty-std-collections.rs) - #79101 (Don't special case constant operands when lowering intrinsics) - #79102 (Add two regression tests) - #79110 (Remove redundant notes in E0275) - #79116 (compiletest: Fix a warning in debuginfo tests on windows-gnu) - #79117 (add optimization fuel checks to some mir passes) - #79147 (Highlight MIR as Rust on GitHub) - #79149 (Move capture lowering from THIR to MIR) - #79155 (fix handling the default config for profiler and sanitizers) - #79156 (Allow using `download-ci-llvm` from directories other than the root) - #79164 (Permit standalone generic parameters as const generic arguments in macros) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_parse/src/parser')
| -rw-r--r-- | compiler/rustc_parse/src/parser/diagnostics.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_parse/src/parser/path.rs | 8 |
2 files changed, 15 insertions, 3 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index cd3b8db2303..350a372a684 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -1808,9 +1808,13 @@ impl<'a> Parser<'a> { return Ok(false); // Don't continue. } - /// Handle a generic const argument that had not been enclosed in braces, and suggest enclosing - /// it braces. In this situation, unlike in `handle_ambiguous_unbraced_const_arg`, this is - /// almost certainly a const argument, so we always offer a suggestion. + /// Attempt to parse a generic const argument that has not been enclosed in braces. + /// There are a limited number of expressions that are permitted without being encoded + /// in braces: + /// - Literals. + /// - Single-segment paths (i.e. standalone generic const parameters). + /// All other expressions that can be parsed will emit an error suggesting the expression be + /// wrapped in braces. pub fn handle_unambiguous_unbraced_const_arg(&mut self) -> PResult<'a, P<Expr>> { let start = self.token.span; let expr = self.parse_expr_res(Restrictions::CONST_EXPR, None).map_err(|mut err| { diff --git a/compiler/rustc_parse/src/parser/path.rs b/compiler/rustc_parse/src/parser/path.rs index 79e73749038..d64fd59b0a6 100644 --- a/compiler/rustc_parse/src/parser/path.rs +++ b/compiler/rustc_parse/src/parser/path.rs @@ -489,6 +489,7 @@ impl<'a> Parser<'a> { /// - An expression surrounded in `{}`. /// - A literal. /// - A numeric literal prefixed by `-`. + /// - A single-segment path. pub(super) fn expr_is_valid_const_arg(&self, expr: &P<rustc_ast::Expr>) -> bool { match &expr.kind { ast::ExprKind::Block(_, _) | ast::ExprKind::Lit(_) => true, @@ -496,6 +497,13 @@ impl<'a> Parser<'a> { ast::ExprKind::Lit(_) => true, _ => false, }, + // We can only resolve single-segment paths at the moment, because multi-segment paths + // require type-checking: see `visit_generic_arg` in `src/librustc_resolve/late.rs`. + ast::ExprKind::Path(None, path) + if path.segments.len() == 1 && path.segments[0].args.is_none() => + { + true + } _ => false, } } |
