https://gcc.gnu.org/g:34c516efbb8dce4bffe09045e6b941806744d1fd

commit r15-9450-g34c516efbb8dce4bffe09045e6b941806744d1fd
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Fri Apr 4 14:20:04 2025 +0200

    gccrs: attributes: Add missing attributes used in `core`
    
    gcc/rust/ChangeLog:
    
            * util/rust-attribute-values.h: Add missing attributes.
            * util/rust-attributes.cc: Likewise.
            * util/rust-attributes.h (enum CompilerPass): Mention adding 
something for const
            functions.

Diff:
---
 gcc/rust/util/rust-attribute-values.h | 24 ++++++++++++++++++++++++
 gcc/rust/util/rust-attributes.cc      | 20 +++++++++++++++++++-
 gcc/rust/util/rust-attributes.h       |  2 ++
 3 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/gcc/rust/util/rust-attribute-values.h 
b/gcc/rust/util/rust-attribute-values.h
index d579fa298013..50ccb4ab6dc0 100644
--- a/gcc/rust/util/rust-attribute-values.h
+++ b/gcc/rust/util/rust-attribute-values.h
@@ -40,12 +40,14 @@ public:
   static constexpr auto &NO_MANGLE = "no_mangle";
   static constexpr auto &REPR = "repr";
   static constexpr auto &RUSTC_BUILTIN_MACRO = "rustc_builtin_macro";
+  static constexpr auto &RUSTC_MACRO_TRANSPARENCY = "rustc_macro_transparency";
   static constexpr auto &PATH = "path";
   static constexpr auto &MACRO_USE = "macro_use";
   static constexpr auto &MACRO_EXPORT = "macro_export";
   static constexpr auto &PROC_MACRO = "proc_macro";
   static constexpr auto &PROC_MACRO_DERIVE = "proc_macro_derive";
   static constexpr auto &PROC_MACRO_ATTRIBUTE = "proc_macro_attribute";
+
   static constexpr auto &TARGET_FEATURE = "target_feature";
   // From now on, these are reserved by the compiler and gated through
   // #![feature(rustc_attrs)]
@@ -54,11 +56,33 @@ public:
     = "rustc_inherit_overflow_checks";
   static constexpr auto &STABLE = "stable";
   static constexpr auto &UNSTABLE = "unstable";
+
+  static constexpr auto &RUSTC_PROMOTABLE = "rustc_promotable";
   static constexpr auto &RUSTC_CONST_STABLE = "rustc_const_stable";
   static constexpr auto &RUSTC_CONST_UNSTABLE = "rustc_const_unstable";
+
+  static constexpr auto &RUSTC_SPECIALIZATION_TRAIT
+    = "rustc_specialization_trait";
+  static constexpr auto &RUSTC_UNSAFE_SPECIALIZATION_MARKER
+    = "rustc_unsafe_specialization_marker";
+  static constexpr auto &RUSTC_RESERVATION_IMPL = "rustc_reservation_impl";
+  static constexpr auto &RUSTC_PAREN_SUGAR = "rustc_paren_sugar";
+  static constexpr auto &RUSTC_NONNULL_OPTIMIZATION_GUARANTEED
+    = "rustc_nonnull_optimization_guaranteed";
+
+  static constexpr auto &RUSTC_LAYOUT_SCALAR_VALID_RANGE_START
+    = "rustc_layout_scalar_valid_range_start";
+
   static constexpr auto &MAY_DANGLE = "may_dangle";
   static constexpr auto &PRELUDE_IMPORT = "prelude_import";
   static constexpr auto &TRACK_CALLER = "track_caller";
+
+  static constexpr auto &RUSTC_DIAGNOSTIC_ITEM = "rustc_diagnostic_item";
+  static constexpr auto &RUSTC_ON_UNIMPLEMENTED = "rustc_on_unimplemented";
+
+  static constexpr auto &FUNDAMENTAL = "fundamental";
+
+  static constexpr auto &NON_EXHAUSTIVE = "non_exhaustive";
 };
 } // namespace Values
 } // namespace Rust
diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc
index df0fe1b0bcac..7ddb476bbe6f 100644
--- a/gcc/rust/util/rust-attributes.cc
+++ b/gcc/rust/util/rust-attributes.cc
@@ -57,6 +57,7 @@ static const BuiltinAttrDefinition __definitions[]
      {Attrs::NO_MANGLE, CODE_GENERATION},
      {Attrs::REPR, CODE_GENERATION},
      {Attrs::RUSTC_BUILTIN_MACRO, EXPANSION},
+     {Attrs::RUSTC_MACRO_TRANSPARENCY, EXPANSION},
      {Attrs::PATH, EXPANSION},
      {Attrs::MACRO_USE, NAME_RESOLUTION},
      {Attrs::MACRO_EXPORT, NAME_RESOLUTION},
@@ -72,11 +73,28 @@ static const BuiltinAttrDefinition __definitions[]
      {Attrs::RUSTC_INHERIT_OVERFLOW_CHECKS, CODE_GENERATION},
      {Attrs::STABLE, STATIC_ANALYSIS},
      {Attrs::UNSTABLE, STATIC_ANALYSIS},
+
      // assuming we keep these for static analysis
+     {Attrs::RUSTC_PROMOTABLE, CODE_GENERATION},
      {Attrs::RUSTC_CONST_STABLE, STATIC_ANALYSIS},
      {Attrs::RUSTC_CONST_UNSTABLE, STATIC_ANALYSIS},
      {Attrs::PRELUDE_IMPORT, NAME_RESOLUTION},
-     {Attrs::TRACK_CALLER, CODE_GENERATION}};
+     {Attrs::TRACK_CALLER, CODE_GENERATION},
+     {Attrs::RUSTC_SPECIALIZATION_TRAIT, TYPE_CHECK},
+     {Attrs::RUSTC_UNSAFE_SPECIALIZATION_MARKER, TYPE_CHECK},
+     {Attrs::RUSTC_RESERVATION_IMPL, TYPE_CHECK},
+     {Attrs::RUSTC_PAREN_SUGAR, TYPE_CHECK},
+     {Attrs::RUSTC_NONNULL_OPTIMIZATION_GUARANTEED, TYPE_CHECK},
+
+     {Attrs::RUSTC_LAYOUT_SCALAR_VALID_RANGE_START, CODE_GENERATION},
+
+     {Attrs::PRELUDE_IMPORT, NAME_RESOLUTION},
+
+     {Attrs::RUSTC_DIAGNOSTIC_ITEM, STATIC_ANALYSIS},
+     {Attrs::RUSTC_ON_UNIMPLEMENTED, STATIC_ANALYSIS},
+
+     {Attrs::FUNDAMENTAL, TYPE_CHECK},
+     {Attrs::NON_EXHAUSTIVE, TYPE_CHECK}};
 
 BuiltinAttributeMappings *
 BuiltinAttributeMappings::get ()
diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h
index c928c8eb9d26..7e7cd2c3c633 100644
--- a/gcc/rust/util/rust-attributes.h
+++ b/gcc/rust/util/rust-attributes.h
@@ -41,6 +41,8 @@ enum CompilerPass
   TYPE_CHECK,
   STATIC_ANALYSIS,
   CODE_GENERATION
+
+  // Do we need to add something here for const fns?
 };
 
 struct BuiltinAttrDefinition

Reply via email to