diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-06-27 08:07:14 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-27 08:07:14 +0000 |
commit | 80a14bd8138553596fd8cf93fcafcb1429d8b30e (patch) | |
tree | a914a378e9882ff9d8109f97a1819a2c7c1403bd /gcc | |
parent | 5bab921fc018bfaae00d2739e5c4e5912673823a (diff) | |
parent | 40ad6b290af7d4e2e4d4a35a759d1b21d60423f5 (diff) | |
download | gcc-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>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.cc | 16 | ||||
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.h | 3 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 1 | ||||
-rw-r--r-- | gcc/testsuite/rust/execute/torture/builtin_macro_line.rs | 22 |
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 +} |