https://gcc.gnu.org/g:ecb649973a3b176f6a723c2f3d78c23ee121163d

commit ecb649973a3b176f6a723c2f3d78c23ee121163d
Author: beamandala <mandalapubhav...@gmail.com>
Date:   Thu Mar 20 17:34:48 2025 -0500

    Add `#[track_caller]` as known attribute
    
    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 <mandalapubhav...@gmail.com>

Diff:
---
 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(-)

diff --git a/gcc/rust/expand/rust-macro-builtins.cc 
b/gcc/rust/expand/rust-macro-builtins.cc
index 1231e9fbb703..d5b6dec4a71f 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 75dc9e141109..409f6fb7ccb6 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 079e17793db6..28d99f1d0a05 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 000000000000..fd1d84295887
--- /dev/null
+++ b/gcc/testsuite/rust/compile/track_caller.rs
@@ -0,0 +1,6 @@
+#[track_caller]
+fn foo() {}
+
+fn main() {
+    foo();
+}

Reply via email to