ayzhao created this revision. Herald added subscribers: frasercrmck, luismarques, apazos, sameer.abuasal, s.egerton, Jim, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, niosHD, sabuasal, simoncook, johnrusso, rbar, asb, hiraditya, arichardson. Herald added a project: All. ayzhao requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, pcwang-thead, MaskRay. Herald added projects: clang, LLVM.
When targeting Windows, the path separator used when targeting Windows depends on the build environment when Clang _itself_ is built. This leads to inconsistencies in Chrome builds where Clang running on non-Windows environments uses the forward slash (/) path separator while Clang running on Windows builds uses the backslash (\) path separator. To fix this, we make Clang use forward slashes whenever it is targeting Windows. We chose to use forward slashes instead of backslashes in builds targeting Windows because according to the C standard, backslashes in \#include directives result in undefined behavior[1]. We may change this decision though depending on the review. [0]: https://crbug.com/1310767 [1]: https://stackoverflow.com/a/5790259 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D122766 Files: clang/lib/AST/Expr.cpp clang/lib/Lex/PPMacroExpansion.cpp clang/test/Preprocessor/file_test_windows.c llvm/lib/Target/RISCV/RISCVISelLowering.cpp Index: llvm/lib/Target/RISCV/RISCVISelLowering.cpp =================================================================== --- llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -493,10 +493,12 @@ ISD::VP_MERGE, ISD::VP_SELECT, ISD::VP_FPTOSI}; static const unsigned FloatingPointVPOps[] = { - ISD::VP_FADD, ISD::VP_FSUB, ISD::VP_FMUL, - ISD::VP_FDIV, ISD::VP_FNEG, ISD::VP_FMA, - ISD::VP_REDUCE_FADD, ISD::VP_REDUCE_SEQ_FADD, ISD::VP_REDUCE_FMIN, - ISD::VP_REDUCE_FMAX, ISD::VP_MERGE, ISD::VP_SELECT, + ISD::VP_FADD, ISD::VP_FSUB, + ISD::VP_FMUL, ISD::VP_FDIV, + ISD::VP_FNEG, ISD::VP_FMA, + ISD::VP_REDUCE_FADD, ISD::VP_REDUCE_SEQ_FADD, + ISD::VP_REDUCE_FMIN, ISD::VP_REDUCE_FMAX, + ISD::VP_MERGE, ISD::VP_SELECT, ISD::VP_SITOFP}; if (!Subtarget.is64Bit()) { Index: clang/test/Preprocessor/file_test_windows.c =================================================================== --- clang/test/Preprocessor/file_test_windows.c +++ clang/test/Preprocessor/file_test_windows.c @@ -8,19 +8,19 @@ filename: __FILE__ #include "Inputs/include-file-test/file_test.h" -// CHECK: filename: "A:\\UNLIKELY_PATH\\empty\\file_test_windows.c" -// CHECK: filename: "A:\\UNLIKELY_PATH\\empty/Inputs/include-file-test/file_test.h" -// CHECK: basefile: "A:\\UNLIKELY_PATH\\empty\\file_test_windows.c" +// CHECK: filename: "A:/UNLIKELY_PATH/empty/file_test_windows.c" +// CHECK: filename: "A:/UNLIKELY_PATH/empty/Inputs/include-file-test/file_test.h" +// CHECK: basefile: "A:/UNLIKELY_PATH/empty/file_test_windows.c" // CHECK-NOT: filename: -// CHECK-EVIL: filename: "A:\\UNLIKELY_PATH=empty\\file_test_windows.c" -// CHECK-EVIL: filename: "A:\\UNLIKELY_PATH=empty/Inputs/include-file-test/file_test.h" -// CHECK-EVIL: basefile: "A:\\UNLIKELY_PATH=empty\\file_test_windows.c" +// CHECK-EVIL: filename: "A:/UNLIKELY_PATH=empty/file_test_windows.c" +// CHECK-EVIL: filename: "A:/UNLIKELY_PATH=empty/Inputs/include-file-test/file_test.h" +// CHECK-EVIL: basefile: "A:/UNLIKELY_PATH=empty/file_test_windows.c" // CHECK-EVIL-NOT: filename: -// CHECK-CASE: filename: "A:\\UNLIKELY_PATH_BASE\\file_test_windows.c" -// CHECK-CASE: filename: "A:\\UNLIKELY_PATH_INC\\include-file-test/file_test.h" -// CHECK-CASE: basefile: "A:\\UNLIKELY_PATH_BASE\\file_test_windows.c" +// CHECK-CASE: filename: "A:/UNLIKELY_PATH_BASE/file_test_windows.c" +// CHECK-CASE: filename: "A:/UNLIKELY_PATH_INC/include-file-test/file_test.h" +// CHECK-CASE: basefile: "A:/UNLIKELY_PATH_BASE/file_test_windows.c" // CHECK-CASE-NOT: filename: // CHECK-REMOVE: filename: "file_test_windows.c" Index: clang/lib/Lex/PPMacroExpansion.cpp =================================================================== --- clang/lib/Lex/PPMacroExpansion.cpp +++ clang/lib/Lex/PPMacroExpansion.cpp @@ -1512,6 +1512,10 @@ FN += PLoc.getFilename(); } getLangOpts().remapPathPrefix(FN); + if (getTargetInfo().getTriple().isOSWindows()) { + llvm::sys::path::make_preferred(FN, + llvm::sys::path::Style::windows_slash); + } Lexer::Stringify(FN); OS << '"' << FN << '"'; } Index: clang/lib/AST/Expr.cpp =================================================================== --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2191,6 +2191,10 @@ case SourceLocExpr::File: { SmallString<256> Path(PLoc.getFilename()); Ctx.getLangOpts().remapPathPrefix(Path); + if (Ctx.getTargetInfo().getTriple().isOSWindows()) { + llvm::sys::path::make_preferred(Path, + llvm::sys::path::Style::windows_slash); + } return MakeStringLiteral(Path); } case SourceLocExpr::Function: { @@ -2224,6 +2228,10 @@ if (Name == "_M_file_name") { SmallString<256> Path(PLoc.getFilename()); Ctx.getLangOpts().remapPathPrefix(Path); + if (Ctx.getTargetInfo().getTriple().isOSWindows()) { + llvm::sys::path::make_preferred( + Path, llvm::sys::path::Style::windows_slash); + } Value.getStructField(F->getFieldIndex()) = MakeStringLiteral(Path); } else if (Name == "_M_function_name") { // Note: this emits the PrettyFunction name -- different than what
Index: llvm/lib/Target/RISCV/RISCVISelLowering.cpp =================================================================== --- llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -493,10 +493,12 @@ ISD::VP_MERGE, ISD::VP_SELECT, ISD::VP_FPTOSI}; static const unsigned FloatingPointVPOps[] = { - ISD::VP_FADD, ISD::VP_FSUB, ISD::VP_FMUL, - ISD::VP_FDIV, ISD::VP_FNEG, ISD::VP_FMA, - ISD::VP_REDUCE_FADD, ISD::VP_REDUCE_SEQ_FADD, ISD::VP_REDUCE_FMIN, - ISD::VP_REDUCE_FMAX, ISD::VP_MERGE, ISD::VP_SELECT, + ISD::VP_FADD, ISD::VP_FSUB, + ISD::VP_FMUL, ISD::VP_FDIV, + ISD::VP_FNEG, ISD::VP_FMA, + ISD::VP_REDUCE_FADD, ISD::VP_REDUCE_SEQ_FADD, + ISD::VP_REDUCE_FMIN, ISD::VP_REDUCE_FMAX, + ISD::VP_MERGE, ISD::VP_SELECT, ISD::VP_SITOFP}; if (!Subtarget.is64Bit()) { Index: clang/test/Preprocessor/file_test_windows.c =================================================================== --- clang/test/Preprocessor/file_test_windows.c +++ clang/test/Preprocessor/file_test_windows.c @@ -8,19 +8,19 @@ filename: __FILE__ #include "Inputs/include-file-test/file_test.h" -// CHECK: filename: "A:\\UNLIKELY_PATH\\empty\\file_test_windows.c" -// CHECK: filename: "A:\\UNLIKELY_PATH\\empty/Inputs/include-file-test/file_test.h" -// CHECK: basefile: "A:\\UNLIKELY_PATH\\empty\\file_test_windows.c" +// CHECK: filename: "A:/UNLIKELY_PATH/empty/file_test_windows.c" +// CHECK: filename: "A:/UNLIKELY_PATH/empty/Inputs/include-file-test/file_test.h" +// CHECK: basefile: "A:/UNLIKELY_PATH/empty/file_test_windows.c" // CHECK-NOT: filename: -// CHECK-EVIL: filename: "A:\\UNLIKELY_PATH=empty\\file_test_windows.c" -// CHECK-EVIL: filename: "A:\\UNLIKELY_PATH=empty/Inputs/include-file-test/file_test.h" -// CHECK-EVIL: basefile: "A:\\UNLIKELY_PATH=empty\\file_test_windows.c" +// CHECK-EVIL: filename: "A:/UNLIKELY_PATH=empty/file_test_windows.c" +// CHECK-EVIL: filename: "A:/UNLIKELY_PATH=empty/Inputs/include-file-test/file_test.h" +// CHECK-EVIL: basefile: "A:/UNLIKELY_PATH=empty/file_test_windows.c" // CHECK-EVIL-NOT: filename: -// CHECK-CASE: filename: "A:\\UNLIKELY_PATH_BASE\\file_test_windows.c" -// CHECK-CASE: filename: "A:\\UNLIKELY_PATH_INC\\include-file-test/file_test.h" -// CHECK-CASE: basefile: "A:\\UNLIKELY_PATH_BASE\\file_test_windows.c" +// CHECK-CASE: filename: "A:/UNLIKELY_PATH_BASE/file_test_windows.c" +// CHECK-CASE: filename: "A:/UNLIKELY_PATH_INC/include-file-test/file_test.h" +// CHECK-CASE: basefile: "A:/UNLIKELY_PATH_BASE/file_test_windows.c" // CHECK-CASE-NOT: filename: // CHECK-REMOVE: filename: "file_test_windows.c" Index: clang/lib/Lex/PPMacroExpansion.cpp =================================================================== --- clang/lib/Lex/PPMacroExpansion.cpp +++ clang/lib/Lex/PPMacroExpansion.cpp @@ -1512,6 +1512,10 @@ FN += PLoc.getFilename(); } getLangOpts().remapPathPrefix(FN); + if (getTargetInfo().getTriple().isOSWindows()) { + llvm::sys::path::make_preferred(FN, + llvm::sys::path::Style::windows_slash); + } Lexer::Stringify(FN); OS << '"' << FN << '"'; } Index: clang/lib/AST/Expr.cpp =================================================================== --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2191,6 +2191,10 @@ case SourceLocExpr::File: { SmallString<256> Path(PLoc.getFilename()); Ctx.getLangOpts().remapPathPrefix(Path); + if (Ctx.getTargetInfo().getTriple().isOSWindows()) { + llvm::sys::path::make_preferred(Path, + llvm::sys::path::Style::windows_slash); + } return MakeStringLiteral(Path); } case SourceLocExpr::Function: { @@ -2224,6 +2228,10 @@ if (Name == "_M_file_name") { SmallString<256> Path(PLoc.getFilename()); Ctx.getLangOpts().remapPathPrefix(Path); + if (Ctx.getTargetInfo().getTriple().isOSWindows()) { + llvm::sys::path::make_preferred( + Path, llvm::sys::path::Style::windows_slash); + } Value.getStructField(F->getFieldIndex()) = MakeStringLiteral(Path); } else if (Name == "_M_function_name") { // Note: this emits the PrettyFunction name -- different than what
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits