diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-12-15 09:15:41 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-15 09:15:41 +0000 |
commit | a9d19200f2a7334404f69849cae5a4723db965e0 (patch) | |
tree | 5ec64260764ce740d65186e707b5d3b42ab0af94 /crates | |
parent | 95f3dcd90972543dd03b4eb4c15dbb2ec5ebda9d (diff) | |
parent | 090a59970df049bcb3d8c232b6ea6d77101c9853 (diff) |
Merge #6889
6889: Resolve `macro-error` diagnostics on asm & llvm_asm r=matklad a=lf-
We currently stub these out as returning unit.
This fixes spurious RA `macro-error` diagnostics introduced somewhere around 0.2.400 in the following:
```rust
unsafe { asm!(""); llvm_asm!(""); }
```
I'd ideally like to write a unit test for this, but I'm not familiar with where the tests for `hir_expand` are.
Thanks to @edwin0cheng for help on resolving this issue.
Co-authored-by: lf- <[email protected]>
Diffstat (limited to 'crates')
-rw-r--r-- | crates/hir_expand/src/builtin_macro.rs | 15 | ||||
-rw-r--r-- | crates/hir_expand/src/name.rs | 2 |
2 files changed, 17 insertions, 0 deletions
diff --git a/crates/hir_expand/src/builtin_macro.rs b/crates/hir_expand/src/builtin_macro.rs index 8db8c7d0c..b1b432ded 100644 --- a/crates/hir_expand/src/builtin_macro.rs +++ b/crates/hir_expand/src/builtin_macro.rs | |||
@@ -95,6 +95,8 @@ register_builtin! { | |||
95 | // format_args_nl only differs in that it adds a newline in the end, | 95 | // format_args_nl only differs in that it adds a newline in the end, |
96 | // so we use the same stub expansion for now | 96 | // so we use the same stub expansion for now |
97 | (format_args_nl, FormatArgsNl) => format_args_expand, | 97 | (format_args_nl, FormatArgsNl) => format_args_expand, |
98 | (llvm_asm, LlvmAsm) => asm_expand, | ||
99 | (asm, Asm) => asm_expand, | ||
98 | 100 | ||
99 | EAGER: | 101 | EAGER: |
100 | (compile_error, CompileError) => compile_error_expand, | 102 | (compile_error, CompileError) => compile_error_expand, |
@@ -271,6 +273,19 @@ fn format_args_expand( | |||
271 | ExpandResult::ok(expanded) | 273 | ExpandResult::ok(expanded) |
272 | } | 274 | } |
273 | 275 | ||
276 | fn asm_expand( | ||
277 | _db: &dyn AstDatabase, | ||
278 | _id: LazyMacroId, | ||
279 | _tt: &tt::Subtree, | ||
280 | ) -> ExpandResult<tt::Subtree> { | ||
281 | // both asm and llvm_asm don't return anything, so we can expand them to nothing, | ||
282 | // for now | ||
283 | let expanded = quote! { | ||
284 | () | ||
285 | }; | ||
286 | ExpandResult::ok(expanded) | ||
287 | } | ||
288 | |||
274 | fn unquote_str(lit: &tt::Literal) -> Option<String> { | 289 | fn unquote_str(lit: &tt::Literal) -> Option<String> { |
275 | let lit = ast::make::tokens::literal(&lit.to_string()); | 290 | let lit = ast::make::tokens::literal(&lit.to_string()); |
276 | let token = ast::String::cast(lit)?; | 291 | let token = ast::String::cast(lit)?; |
diff --git a/crates/hir_expand/src/name.rs b/crates/hir_expand/src/name.rs index 6ec5ca0a9..69d8e6803 100644 --- a/crates/hir_expand/src/name.rs +++ b/crates/hir_expand/src/name.rs | |||
@@ -199,6 +199,8 @@ pub mod known { | |||
199 | format_args_nl, | 199 | format_args_nl, |
200 | env, | 200 | env, |
201 | option_env, | 201 | option_env, |
202 | llvm_asm, | ||
203 | asm, | ||
202 | // Builtin derives | 204 | // Builtin derives |
203 | Copy, | 205 | Copy, |
204 | Clone, | 206 | Clone, |