aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/util
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2025-02-09 03:02:58 -0500
committerCohenArthur <arthur.cohen@embecosm.com>2025-02-25 15:30:19 +0000
commitb1e30683d9ba61181b68d21489a616f5f86d9263 (patch)
tree2fb41f9d477ee995cbf70bb554ea5e4b6d45f719 /gcc/rust/util
parent9075c9918f3cad3c4e9834d8609214ec557550aa (diff)
downloadgcc-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.cc20
-rw-r--r--gcc/rust/util/rust-unwrap-segment.h19
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