]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add `#[track_caller]` as known attribute
authorbeamandala <mandalapubhavesh@gmail.com>
Thu, 20 Mar 2025 22:34:48 +0000 (17:34 -0500)
committerCohenArthur <arthur.cohen@embecosm.com>
Mon, 14 Apr 2025 09:32:06 +0000 (09:32 +0000)
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
gcc/rust/util/rust-attribute-values.h
gcc/rust/util/rust-attributes.cc
gcc/testsuite/rust/compile/track_caller.rs [new file with mode: 0644]

index 1231e9fbb703d27a39f65d9b825b22be2a21b825..d5b6dec4a71f2aac0a32d74ad82d944ea176b37a 100644 (file)
@@ -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
index 75dc9e141109b23877aa3ad196dcc2f73df61da2..409f6fb7ccb610581c032a3b307b516dad3c0250 100644 (file)
@@ -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
index 079e17793db6fd1bd14b0d02648b0e1caefe85e3..28d99f1d0a05404cfbd64d8992a072d25b5de882 100644 (file)
@@ -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 (file)
index 0000000..fd1d842
--- /dev/null
@@ -0,0 +1,6 @@
+#[track_caller]
+fn foo() {}
+
+fn main() {
+    foo();
+}