File tree 2 files changed +21
-1
lines changed
2 files changed +21
-1
lines changed Original file line number Diff line number Diff line change @@ -2112,10 +2112,12 @@ fn get_all_import_attributes<'hir>(
2112
2112
) {
2113
2113
let hir_map = tcx. hir ( ) ;
2114
2114
let mut visitor = OneLevelVisitor :: new ( hir_map, target_def_id) ;
2115
+ let mut visited = FxHashSet :: default ( ) ;
2115
2116
// If the item is an import and has at least a path with two parts, we go into it.
2116
2117
while let hir:: ItemKind :: Use ( path, _) = item. kind &&
2117
2118
path. segments . len ( ) > 1 &&
2118
- let hir:: def:: Res :: Def ( _, def_id) = path. segments [ path. segments . len ( ) - 2 ] . res
2119
+ let hir:: def:: Res :: Def ( _, def_id) = path. segments [ path. segments . len ( ) - 2 ] . res &&
2120
+ visited. insert ( def_id)
2119
2121
{
2120
2122
if let Some ( hir:: Node :: Item ( parent_item) ) = hir_map. get_if_local ( def_id) {
2121
2123
// We add the attributes from this import into the list.
Original file line number Diff line number Diff line change
1
+ // This is a regression test for <https://github.com/rust-lang/rust/issues/107350>.
2
+ // It shouldn't loop indefinitely.
3
+
4
+ #![ crate_name = "foo" ]
5
+
6
+ // @has 'foo/oops/enum.OhNo.html'
7
+
8
+ pub mod oops {
9
+ pub use crate :: oops:: OhNo ;
10
+
11
+ mod inner {
12
+ pub enum OhNo {
13
+ Item = 1 ,
14
+ }
15
+ }
16
+
17
+ pub use self :: inner:: * ;
18
+ }
You can’t perform that action at this time.
0 commit comments