aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-08-04 19:47:43 +0000
committerGitHub <noreply@github.com>2022-08-04 19:47:43 +0000
commitbc65cac0e79c9799fa62635df295e73b14501660 (patch)
tree4335917d9d8a296193d2564380ef4269686f942b
parentc788a806195f326a595cd15b96c59e7584927f1a (diff)
parent8141f618bb5e1669f554868772305d02fff045f2 (diff)
downloadgcc-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>
-rw-r--r--gcc/rust/util/rust-hir-map.cc20
-rw-r--r--gcc/testsuite/rust/compile/builtin_macro_compile_error.rs1
-rw-r--r--gcc/testsuite/rust/compile/builtin_macro_concat.rs1
-rw-r--r--gcc/testsuite/rust/compile/builtin_macro_env.rs1
-rw-r--r--gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs1
-rw-r--r--gcc/testsuite/rust/compile/builtin_macro_include_str.rs1
-rw-r--r--gcc/testsuite/rust/compile/macro42.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macro_cfg.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macro_concat.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macro_env.rs2
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs2
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs2
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macro_line.rs3
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macros1.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macros3.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/macros29.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/macros30.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/macros31.rs1
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 {
() => {{}};
}