From 9dc534e9b1a04b3e610b03a978da0195cc75f540 Mon Sep 17 00:00:00 2001 From: rchaser53 Date: Wed, 18 Dec 2019 22:07:30 +0900 Subject: [PATCH 1/2] avoid to insert same path --- src/modules.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/modules.rs b/src/modules.rs index 0c35cc2d073..f22435a10db 100644 --- a/src/modules.rs +++ b/src/modules.rs @@ -264,12 +264,19 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> { path, directory_ownership, .. - }) => Ok(if mods_outside_ast.is_empty() { - SubModKind::External(path, directory_ownership) - } else { - mods_outside_ast.push((path, directory_ownership, sub_mod.clone())); - SubModKind::MultiExternal(mods_outside_ast) - }), + }) => { + if mods_outside_ast.is_empty() { + Ok(SubModKind::External(path, directory_ownership)) + } else { + let should_insert = !mods_outside_ast + .iter() + .any(|(outside_path, _, _)| outside_path == &path); + if should_insert { + mods_outside_ast.push((path, directory_ownership, sub_mod.clone())); + } + Ok(SubModKind::MultiExternal(mods_outside_ast)) + } + } Err(_) if !mods_outside_ast.is_empty() => { Ok(SubModKind::MultiExternal(mods_outside_ast)) } From b6648f1b0cd77efa277a9a3a72fdb3b64f049615 Mon Sep 17 00:00:00 2001 From: rchaser53 Date: Wed, 18 Dec 2019 22:11:00 +0900 Subject: [PATCH 2/2] add test --- tests/config/issue-3956.toml | 5 +++++ tests/target/issue-3956/graphics.rs | 2 ++ tests/target/issue-3956/graphics_emu.rs | 2 ++ tests/target/issue-3956/lib.rs | 4 ++++ 4 files changed, 13 insertions(+) create mode 100644 tests/config/issue-3956.toml create mode 100644 tests/target/issue-3956/graphics.rs create mode 100644 tests/target/issue-3956/graphics_emu.rs create mode 100644 tests/target/issue-3956/lib.rs diff --git a/tests/config/issue-3956.toml b/tests/config/issue-3956.toml new file mode 100644 index 00000000000..7669890586b --- /dev/null +++ b/tests/config/issue-3956.toml @@ -0,0 +1,5 @@ +ignore = [ + "tests/**/issue-3956/graphics.rs", + "tests/**/issue-3956/graphics_emu.rs" +] +recursive = true diff --git a/tests/target/issue-3956/graphics.rs b/tests/target/issue-3956/graphics.rs new file mode 100644 index 00000000000..ea98ccf2349 --- /dev/null +++ b/tests/target/issue-3956/graphics.rs @@ -0,0 +1,2 @@ +// rustfmt-config: issue-3956.toml +pub struct A; diff --git a/tests/target/issue-3956/graphics_emu.rs b/tests/target/issue-3956/graphics_emu.rs new file mode 100644 index 00000000000..88e41b515dc --- /dev/null +++ b/tests/target/issue-3956/graphics_emu.rs @@ -0,0 +1,2 @@ +// rustfmt-config: issue-3956.toml +pub struct B; diff --git a/tests/target/issue-3956/lib.rs b/tests/target/issue-3956/lib.rs new file mode 100644 index 00000000000..b0a26c9f0ba --- /dev/null +++ b/tests/target/issue-3956/lib.rs @@ -0,0 +1,4 @@ +// rustfmt-config: issue-3956.toml +#[cfg_attr(windows, path = "graphics.rs")] +#[cfg_attr(not(windows), path = "graphics_emu.rs")] +mod graphics;