[COMMITTED,15/19] gccrs: Add `#[track_caller]` as known attribute

Message ID 20250414163138.506753-16-arthur.cohen@embecosm.com
State Committed
Commit e84f76dc584192826700ebb89f726984b0788259
Headers
Series [COMMITTED,01/19] rust: Use FLOAT_TYPE_P instead of manual checking |

Commit Message

Arthur Cohen April 14, 2025, 4:31 p.m. UTC
  From: beamandala <mandalapubhavesh@gmail.com>

gcc/rust/ChangeLog:

	* expand/rust-macro-builtins.cc (MacroBuiltin::builtin_transcribers):
	Add entry for track_caller.
	* util/rust-attribute-values.h: add `TRACK_CALLER` attribute.
	* util/rust-attributes.cc: add `track_caller` attribute definition.

gcc/testsuite/ChangeLog:

	* rust/compile/track_caller.rs: New test.

Signed-off-by: Bhavesh Mandalapu <mandalapubhavesh@gmail.com>
---
 gcc/rust/expand/rust-macro-builtins.cc     | 1 +
 gcc/rust/util/rust-attribute-values.h      | 1 +
 gcc/rust/util/rust-attributes.cc           | 3 ++-
 gcc/testsuite/rust/compile/track_caller.rs | 6 ++++++
 4 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/rust/compile/track_caller.rs
  

Patch

diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc
index 39c4c46b8e0..a1388fb1dfb 100644
--- a/gcc/rust/expand/rust-macro-builtins.cc
+++ b/gcc/rust/expand/rust-macro-builtins.cc
@@ -137,6 +137,7 @@  std::unordered_map<std::string, AST::MacroTranscriberFunc>
     {"cfg_accessible", MacroBuiltin::sorry},
     {"rustc_const_stable", MacroBuiltin::sorry},
     {"rustc_const_unstable", MacroBuiltin::sorry},
+    {"track_caller", MacroBuiltin::sorry},
     /* Derive builtins do not need a real transcriber, but still need one. It
        should however never be called since builtin derive macros get expanded
        differently, and benefit from knowing on what kind of items they are
diff --git a/gcc/rust/util/rust-attribute-values.h b/gcc/rust/util/rust-attribute-values.h
index 9ef5cc52e81..d579fa29801 100644
--- a/gcc/rust/util/rust-attribute-values.h
+++ b/gcc/rust/util/rust-attribute-values.h
@@ -58,6 +58,7 @@  public:
   static constexpr auto &RUSTC_CONST_UNSTABLE = "rustc_const_unstable";
   static constexpr auto &MAY_DANGLE = "may_dangle";
   static constexpr auto &PRELUDE_IMPORT = "prelude_import";
+  static constexpr auto &TRACK_CALLER = "track_caller";
 };
 } // namespace Values
 } // namespace Rust
diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc
index 03452c75bd8..df0fe1b0bca 100644
--- a/gcc/rust/util/rust-attributes.cc
+++ b/gcc/rust/util/rust-attributes.cc
@@ -75,7 +75,8 @@  static const BuiltinAttrDefinition __definitions[]
      // assuming we keep these for static analysis
      {Attrs::RUSTC_CONST_STABLE, STATIC_ANALYSIS},
      {Attrs::RUSTC_CONST_UNSTABLE, STATIC_ANALYSIS},
-     {Attrs::PRELUDE_IMPORT, NAME_RESOLUTION}};
+     {Attrs::PRELUDE_IMPORT, NAME_RESOLUTION},
+     {Attrs::TRACK_CALLER, CODE_GENERATION}};
 
 BuiltinAttributeMappings *
 BuiltinAttributeMappings::get ()
diff --git a/gcc/testsuite/rust/compile/track_caller.rs b/gcc/testsuite/rust/compile/track_caller.rs
new file mode 100644
index 00000000000..fd1d8429588
--- /dev/null
+++ b/gcc/testsuite/rust/compile/track_caller.rs
@@ -0,0 +1,6 @@ 
+#[track_caller]
+fn foo() {}
+
+fn main() {
+    foo();
+}