aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-06-27 08:07:14 +0000
committerGitHub <noreply@github.com>2022-06-27 08:07:14 +0000
commit80a14bd8138553596fd8cf93fcafcb1429d8b30e (patch)
treea914a378e9882ff9d8109f97a1819a2c7c1403bd
parent5bab921fc018bfaae00d2739e5c4e5912673823a (diff)
parent40ad6b290af7d4e2e4d4a35a759d1b21d60423f5 (diff)
downloadgcc-80a14bd8138553596fd8cf93fcafcb1429d8b30e.zip
gcc-80a14bd8138553596fd8cf93fcafcb1429d8b30e.tar.gz
gcc-80a14bd8138553596fd8cf93fcafcb1429d8b30e.tar.bz2
Merge #1339
1339: Add `line!` macro r=CohenArthur a=graphman65 Co-authored-by: Sebastien Lacoste <dev@graphman.fr>
-rw-r--r--gcc/rust/expand/rust-macro-builtins.cc16
-rw-r--r--gcc/rust/expand/rust-macro-builtins.h3
-rw-r--r--gcc/rust/util/rust-hir-map.cc1
-rw-r--r--gcc/testsuite/rust/execute/torture/builtin_macro_line.rs22
4 files changed, 40 insertions, 2 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc
index fb30241..2b175fc 100644
--- a/gcc/rust/expand/rust-macro-builtins.cc
+++ b/gcc/rust/expand/rust-macro-builtins.cc
@@ -164,13 +164,12 @@ MacroBuiltin::file (Location invoc_locus, AST::MacroInvocData &invoc)
return AST::ASTFragment ({file_str});
}
+
AST::ASTFragment
MacroBuiltin::column (Location invoc_locus, AST::MacroInvocData &invoc)
{
auto current_column
= Session::get_instance ().linemap->location_to_column (invoc_locus);
- // auto column_no
- // = AST::SingleASTNode (make_string (invoc_locus, current_column));
auto column_no = AST::SingleASTNode (std::unique_ptr<AST::Expr> (
new AST::LiteralExpr (std::to_string (current_column), AST::Literal::INT,
@@ -468,4 +467,17 @@ MacroBuiltin::include (Location invoc_locus, AST::MacroInvocData &invoc)
return AST::ASTFragment (nodes);
}
+AST::ASTFragment
+MacroBuiltin::line (Location invoc_locus, AST::MacroInvocData &invoc)
+{
+ auto current_line
+ = Session::get_instance ().linemap->location_to_line (invoc_locus);
+
+ auto line_no = AST::SingleASTNode (std::unique_ptr<AST::Expr> (
+ new AST::LiteralExpr (std::to_string (current_line), AST::Literal::INT,
+ PrimitiveCoreType::CORETYPE_U32, {}, invoc_locus)));
+
+ return AST::ASTFragment ({line_no});
+}
+
} // namespace Rust
diff --git a/gcc/rust/expand/rust-macro-builtins.h b/gcc/rust/expand/rust-macro-builtins.h
index f1d10df..91f3727 100644
--- a/gcc/rust/expand/rust-macro-builtins.h
+++ b/gcc/rust/expand/rust-macro-builtins.h
@@ -98,6 +98,9 @@ public:
static AST::ASTFragment include (Location invoc_locus,
AST::MacroInvocData &invoc);
+
+ static AST::ASTFragment line (Location invoc_locus,
+ AST::MacroInvocData &invoc);
};
} // namespace Rust
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index c21b681..8b3be5c 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -831,6 +831,7 @@ Mappings::insert_macro_def (AST::MacroRulesDefinition *macro)
builtin_macros = {
{"assert", MacroBuiltin::assert},
{"file", MacroBuiltin::file},
+ {"line", MacroBuiltin::line},
{"column", MacroBuiltin::column},
{"include_bytes", MacroBuiltin::include_bytes},
{"include_str", MacroBuiltin::include_str},
diff --git a/gcc/testsuite/rust/execute/torture/builtin_macro_line.rs b/gcc/testsuite/rust/execute/torture/builtin_macro_line.rs
new file mode 100644
index 0000000..873054d
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/builtin_macro_line.rs
@@ -0,0 +1,22 @@
+// { dg-output "15\n18\n" }
+extern "C" {
+ fn printf(fmt: *const i8, ...);
+}
+
+fn print(s: u32) {
+ printf("%u\n\0" as *const str as *const i8, s);
+}
+
+macro_rules! line {
+ () => {{}};
+}
+
+fn main() -> i32 {
+ let a = line!();
+ print(a);
+
+ let b = line!();
+ print(b);
+
+ 0
+}