steven_wu updated this revision to Diff 458823. steven_wu edited the summary of this revision. steven_wu added a comment.
Rebase patch and fix the problem when the input is '-' Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D95497/new/ https://reviews.llvm.org/D95497 Files: clang/lib/Frontend/CompilerInstance.cpp clang/test/Frontend/output-paths.c Index: clang/test/Frontend/output-paths.c =================================================================== --- clang/test/Frontend/output-paths.c +++ clang/test/Frontend/output-paths.c @@ -2,3 +2,12 @@ // RUN: FileCheck -check-prefix=OUTPUTFAIL -DMSG=%errc_ENOENT -input-file=%t %s // OUTPUTFAIL: error: unable to open output file '{{.*}}doesnotexist{{.}}somename': '[[MSG]]' + +// Check that -working-directory is respected when diagnosing output failures. +// +// RUN: rm -rf %t.d && mkdir -p %t.d/%basename_t-inner.d +// RUN: %clang_cc1 -emit-llvm -working-directory %t.d -E -o %basename_t-inner.d/somename %s -verify +// expected-no-diagnostics + +// RUN: %clang_cc1 -working-directory %t.d -E %s -o - | FileCheck %s +// CHECK: # 1 Index: clang/lib/Frontend/CompilerInstance.cpp =================================================================== --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -781,12 +781,7 @@ continue; } - // If '-working-directory' was passed, the output filename should be - // relative to that. - SmallString<128> NewOutFile(OF.Filename); - FileMgr->FixupRelativePath(NewOutFile); - - llvm::Error E = OF.File->keep(NewOutFile); + llvm::Error E = OF.File->keep(OF.Filename); if (!E) continue; @@ -849,6 +844,15 @@ assert((!CreateMissingDirectories || UseTemporary) && "CreateMissingDirectories is only allowed when using temporary files"); + // If '-working-directory' was passed, the output filename should be + // relative to that. + Optional<SmallString<128>> AbsPath; + if (OutputPath != "-" && !llvm::sys::path::is_absolute(OutputPath)) { + AbsPath.emplace(OutputPath); + FileMgr->FixupRelativePath(*AbsPath); + OutputPath = *AbsPath; + } + std::unique_ptr<llvm::raw_fd_ostream> OS; Optional<StringRef> OSFile;
Index: clang/test/Frontend/output-paths.c =================================================================== --- clang/test/Frontend/output-paths.c +++ clang/test/Frontend/output-paths.c @@ -2,3 +2,12 @@ // RUN: FileCheck -check-prefix=OUTPUTFAIL -DMSG=%errc_ENOENT -input-file=%t %s // OUTPUTFAIL: error: unable to open output file '{{.*}}doesnotexist{{.}}somename': '[[MSG]]' + +// Check that -working-directory is respected when diagnosing output failures. +// +// RUN: rm -rf %t.d && mkdir -p %t.d/%basename_t-inner.d +// RUN: %clang_cc1 -emit-llvm -working-directory %t.d -E -o %basename_t-inner.d/somename %s -verify +// expected-no-diagnostics + +// RUN: %clang_cc1 -working-directory %t.d -E %s -o - | FileCheck %s +// CHECK: # 1 Index: clang/lib/Frontend/CompilerInstance.cpp =================================================================== --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -781,12 +781,7 @@ continue; } - // If '-working-directory' was passed, the output filename should be - // relative to that. - SmallString<128> NewOutFile(OF.Filename); - FileMgr->FixupRelativePath(NewOutFile); - - llvm::Error E = OF.File->keep(NewOutFile); + llvm::Error E = OF.File->keep(OF.Filename); if (!E) continue; @@ -849,6 +844,15 @@ assert((!CreateMissingDirectories || UseTemporary) && "CreateMissingDirectories is only allowed when using temporary files"); + // If '-working-directory' was passed, the output filename should be + // relative to that. + Optional<SmallString<128>> AbsPath; + if (OutputPath != "-" && !llvm::sys::path::is_absolute(OutputPath)) { + AbsPath.emplace(OutputPath); + FileMgr->FixupRelativePath(*AbsPath); + OutputPath = *AbsPath; + } + std::unique_ptr<llvm::raw_fd_ostream> OS; Optional<StringRef> OSFile;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits