diff --git a/src/lib.rs b/src/lib.rs index e3a2b98b0..527d1d67d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1311,6 +1311,13 @@ impl Build { if self.cuda && self.files.len() > 1 { cmd.arg("--device-c"); } + if compiler.family == (ToolFamily::Msvc { clang_cl: true }) { + // #513: For `clang-cl`, separate flags/options from the input file. + // When cross-compiling macOS -> Windows, this avoids interpreting + // common `/Users/...` paths as the `/U` flag and triggering + // `-Wslash-u-filename` warning. + cmd.arg("--"); + } cmd.arg(&obj.src); if cfg!(target_os = "macos") { self.fix_env_for_apple_os(&mut cmd)?; diff --git a/tests/test.rs b/tests/test.rs index 3c9b4dc49..35ef87577 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -343,6 +343,14 @@ fn gnu_static() { test.cmd(0).must_have("-static").must_not_have("-shared"); } +#[test] +fn gnu_no_dash_dash() { + let test = Test::gnu(); + test.gcc().file("foo.c").compile("foo"); + + test.cmd(0).must_not_have("--"); +} + #[test] fn msvc_smoke() { reset_env(); @@ -411,3 +419,11 @@ fn msvc_no_static_crt() { test.cmd(0).must_have("-MD"); } + +#[test] +fn msvc_no_dash_dash() { + let test = Test::msvc(); + test.gcc().file("foo.c").compile("foo"); + + test.cmd(0).must_not_have("--"); +}