diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-08-04 19:47:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-04 19:47:43 +0000 |
commit | bc65cac0e79c9799fa62635df295e73b14501660 (patch) | |
tree | 4335917d9d8a296193d2564380ef4269686f942b /gcc | |
parent | c788a806195f326a595cd15b96c59e7584927f1a (diff) | |
parent | 8141f618bb5e1669f554868772305d02fff045f2 (diff) | |
download | gcc-bc65cac0e79c9799fa62635df295e73b14501660.zip gcc-bc65cac0e79c9799fa62635df295e73b14501660.tar.gz gcc-bc65cac0e79c9799fa62635df295e73b14501660.tar.bz2 |
Merge #1430
1430: hir: more conformant builtin macro detection r=philberty a=liushuyu
- hir: more conformant builtin macro detection
Fixes #971
Co-authored-by: liushuyu <liushuyu011@gmail.com>
Diffstat (limited to 'gcc')
18 files changed, 35 insertions, 7 deletions
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 6a6deeb..8705fdc 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -18,6 +18,7 @@ #include "rust-hir-map.h" #include "rust-ast-full.h" +#include "rust-diagnostics.h" #include "rust-hir-full.h" #include "rust-macro-builtins.h" #include "rust-mapping-common.h" @@ -818,9 +819,22 @@ Mappings::insert_macro_def (AST::MacroRulesDefinition *macro) {"include", MacroBuiltin::include}, }; - auto builtin = builtin_macros.find (macro->get_rule_name ()); - if (builtin != builtin_macros.end ()) - macro->set_builtin_transcriber (builtin->second); + auto outer_attrs = macro->get_outer_attrs (); + bool should_be_builtin + = std::any_of (outer_attrs.begin (), outer_attrs.end (), + [] (AST::Attribute attr) { + return attr.get_path () == "rustc_builtin_macro"; + }); + if (should_be_builtin) + { + auto builtin = builtin_macros.find (macro->get_rule_name ()); + if (builtin != builtin_macros.end ()) + macro->set_builtin_transcriber (builtin->second); + else + rust_error_at (macro->get_locus (), + "cannot find a built-in macro with name %qs", + macro->get_rule_name ().c_str ()); + } auto it = macroMappings.find (macro->get_node_id ()); rust_assert (it == macroMappings.end ()); diff --git a/gcc/testsuite/rust/compile/builtin_macro_compile_error.rs b/gcc/testsuite/rust/compile/builtin_macro_compile_error.rs index 6f9a8ce..9d22440 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_compile_error.rs +++ b/gcc/testsuite/rust/compile/builtin_macro_compile_error.rs @@ -1,3 +1,4 @@ +#[rustc_builtin_macro] macro_rules! compile_error { () => {{}}; } diff --git a/gcc/testsuite/rust/compile/builtin_macro_concat.rs b/gcc/testsuite/rust/compile/builtin_macro_concat.rs index b37f80f..9b878af 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_concat.rs +++ b/gcc/testsuite/rust/compile/builtin_macro_concat.rs @@ -1,3 +1,4 @@ +#[rustc_builtin_macro] macro_rules! concat { () => {{}}; } diff --git a/gcc/testsuite/rust/compile/builtin_macro_env.rs b/gcc/testsuite/rust/compile/builtin_macro_env.rs index 8c50a7d..289e6db 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_env.rs +++ b/gcc/testsuite/rust/compile/builtin_macro_env.rs @@ -1,3 +1,4 @@ +#[rustc_builtin_macro] macro_rules! env { () => {{}}; } diff --git a/gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs b/gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs index 966c073..38716d3 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs +++ b/gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs @@ -1,3 +1,4 @@ +#[rustc_builtin_macro] macro_rules! include_bytes { () => {{}}; } diff --git a/gcc/testsuite/rust/compile/builtin_macro_include_str.rs b/gcc/testsuite/rust/compile/builtin_macro_include_str.rs index 3e559cb..38f5e3b 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_include_str.rs +++ b/gcc/testsuite/rust/compile/builtin_macro_include_str.rs @@ -1,3 +1,4 @@ +#[rustc_builtin_macro] macro_rules! include_str { () => {{}}; } diff --git a/gcc/testsuite/rust/compile/macro42.rs b/gcc/testsuite/rust/compile/macro42.rs index 29fa651..52d150b 100644 --- a/gcc/testsuite/rust/compile/macro42.rs +++ b/gcc/testsuite/rust/compile/macro42.rs @@ -1,4 +1,5 @@ // { dg-additional-options "-w -frust-cfg=A" } +#[rustc_builtin_macro] macro_rules! cfg { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_cfg.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_cfg.rs index 9fa5222..fad2dae 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_cfg.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_cfg.rs @@ -1,5 +1,6 @@ // { dg-additional-options "-w -frust-cfg=A" } // { dg-output "A\n" } +#[rustc_builtin_macro] macro_rules! cfg { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_concat.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_concat.rs index 555d49c..9b33924 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_concat.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_concat.rs @@ -1,4 +1,5 @@ // { dg-output "\ntest10btrue2.15\ntest10bfalse2.151\n" } +#[rustc_builtin_macro] macro_rules! concat { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_env.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_env.rs index 211ddfc..a5c80b2 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_env.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_env.rs @@ -1,6 +1,6 @@ // { dg-output "VALUE\nVALUE\n" } // { dg-set-compiler-env-var ENV_MACRO_TEST "VALUE" } - +#[rustc_builtin_macro] macro_rules! env { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs index 49da093..087f022 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs @@ -1,5 +1,5 @@ // { dg-output "104\n33\n1\n" } - +#[rustc_builtin_macro] macro_rules! include_bytes { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs index 334b9c6..6f9871d 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs @@ -1,5 +1,5 @@ // { dg-output "hello, include!\n" } - +#[rustc_builtin_macro] macro_rules! include_str { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_line.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_line.rs index 6153bf5..02541ed 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macro_line.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macro_line.rs @@ -1,4 +1,4 @@ -// { dg-output "17\n20\n" } +// { dg-output "18\n21\n" } extern "C" { fn printf(fmt: *const i8, ...); } @@ -9,6 +9,7 @@ fn print(s: u32) { } } +#[rustc_builtin_macro] macro_rules! line { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macros1.rs b/gcc/testsuite/rust/execute/torture/builtin_macros1.rs index 6f52c37..5976478 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macros1.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macros1.rs @@ -1,4 +1,5 @@ // { dg-output "rust/execute/torture/builtin_macros1.rs" } +#[rustc_builtin_macro] macro_rules! file { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/builtin_macros3.rs b/gcc/testsuite/rust/execute/torture/builtin_macros3.rs index 6c0facb..24555cb 100644 --- a/gcc/testsuite/rust/execute/torture/builtin_macros3.rs +++ b/gcc/testsuite/rust/execute/torture/builtin_macros3.rs @@ -1,4 +1,5 @@ // { dg-output "14\n42\n" } +#[rustc_builtin_macro] macro_rules! column { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/macros29.rs b/gcc/testsuite/rust/execute/torture/macros29.rs index 506d660..306979b 100644 --- a/gcc/testsuite/rust/execute/torture/macros29.rs +++ b/gcc/testsuite/rust/execute/torture/macros29.rs @@ -1,4 +1,5 @@ // { dg-output "1\n" } +#[rustc_builtin_macro] macro_rules! concat { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/macros30.rs b/gcc/testsuite/rust/execute/torture/macros30.rs index 8f54b05..ab36f5e 100644 --- a/gcc/testsuite/rust/execute/torture/macros30.rs +++ b/gcc/testsuite/rust/execute/torture/macros30.rs @@ -1,4 +1,5 @@ // { dg-output "1\n" } +#[rustc_builtin_macro] macro_rules! concat { () => {{}}; } diff --git a/gcc/testsuite/rust/execute/torture/macros31.rs b/gcc/testsuite/rust/execute/torture/macros31.rs index 6ad6d7e..483f897 100644 --- a/gcc/testsuite/rust/execute/torture/macros31.rs +++ b/gcc/testsuite/rust/execute/torture/macros31.rs @@ -1,5 +1,6 @@ // { dg-additional-options "-w -frust-cfg=A" } // { dg-output "A\nB\n" } +#[rustc_builtin_macro] macro_rules! cfg { () => {{}}; } |