diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2025-02-09 03:02:58 -0500 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2025-02-25 15:30:19 +0000 |
commit | b1e30683d9ba61181b68d21489a616f5f86d9263 (patch) | |
tree | 2fb41f9d477ee995cbf70bb554ea5e4b6d45f719 /gcc/rust/util | |
parent | 9075c9918f3cad3c4e9834d8609214ec557550aa (diff) | |
download | gcc-b1e30683d9ba61181b68d21489a616f5f86d9263.zip gcc-b1e30683d9ba61181b68d21489a616f5f86d9263.tar.gz gcc-b1e30683d9ba61181b68d21489a616f5f86d9263.tar.bz2 |
nr2.0: Handle lang item type path segments
gcc/rust/ChangeLog:
* resolve/rust-forever-stack.hxx
(ForeverStack::find_starting_point): Stop when hitting a lang
item segment.
(ForeverStack::resolve_segments): Resolve lang item segments.
(ForeverStacl::resolve_path): Handle single segment lang item
paths and add comment.
* util/rust-unwrap-segment.cc
(unwrap_segment_get_lang_item): Add.
* util/rust-unwrap-segment.h
(unwrap_segment_get_lang_item): Add.
gcc/testsuite/ChangeLog:
* rust/compile/nr2/exclude: Remove entries.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc/rust/util')
-rw-r--r-- | gcc/rust/util/rust-unwrap-segment.cc | 20 | ||||
-rw-r--r-- | gcc/rust/util/rust-unwrap-segment.h | 19 |
2 files changed, 39 insertions, 0 deletions
diff --git a/gcc/rust/util/rust-unwrap-segment.cc b/gcc/rust/util/rust-unwrap-segment.cc index 38ff273..083a0e5 100644 --- a/gcc/rust/util/rust-unwrap-segment.cc +++ b/gcc/rust/util/rust-unwrap-segment.cc @@ -38,4 +38,24 @@ unwrap_segment_node_id (const AST::PathExprSegment &seg) return seg.get_node_id (); } +tl::optional<LangItem::Kind> +unwrap_segment_get_lang_item (const AST::TypePathSegment &seg) +{ + if (seg.is_lang_item ()) + return seg.get_lang_item (); + return tl::nullopt; +} + +tl::optional<LangItem::Kind> +unwrap_segment_get_lang_item (const AST::SimplePathSegment &seg) +{ + return tl::nullopt; +} + +tl::optional<LangItem::Kind> +unwrap_segment_get_lang_item (const AST::PathExprSegment &seg) +{ + return tl::nullopt; +} + } // namespace Rust diff --git a/gcc/rust/util/rust-unwrap-segment.h b/gcc/rust/util/rust-unwrap-segment.h index 4a3838a..bebdc3a 100644 --- a/gcc/rust/util/rust-unwrap-segment.h +++ b/gcc/rust/util/rust-unwrap-segment.h @@ -99,4 +99,23 @@ unwrap_segment_node_id (const std::unique_ptr<T> &ptr) return unwrap_segment_node_id (*ptr); } +/** + * Used to check if a path segment is associated with a lang item + */ +tl::optional<LangItem::Kind> +unwrap_segment_get_lang_item (const AST::TypePathSegment &seg); + +tl::optional<LangItem::Kind> +unwrap_segment_get_lang_item (const AST::SimplePathSegment &seg); + +tl::optional<LangItem::Kind> +unwrap_segment_get_lang_item (const AST::PathExprSegment &seg); + +template <class T> +tl::optional<LangItem::Kind> +unwrap_segment_get_lang_item (const std::unique_ptr<T> &ptr) +{ + return unwrap_segment_get_lang_item (*ptr); +} + } // namespace Rust |