[PATCH] D95497: Frontend: Respect -working-directory when checking if output files can be written
This revision was automatically updated to reflect the committed changes. Closed by commit rG493766e06847: Frontend: Respect -working-directory when checking if output files can be… (authored by steven_wu). 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> AbsPath; + if (OutputPath != "-" && !llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional 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> AbsPath; + if (OutputPath != "-" && !llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional OSFile; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D95497: Frontend: Respect -working-directory when checking if output files can be written
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> AbsPath; + if (OutputPath != "-" && !llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional 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> AbsPath; + if (OutputPath != "-" && !llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional OSFile; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D95497: Frontend: Respect -working-directory when checking if output files can be written
steven_wu requested changes to this revision. steven_wu added a comment. This revision now requires changes to proceed. Actually, we need to fix the case when output is '-'. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D95497/new/ https://reviews.llvm.org/D95497 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D95497: Frontend: Respect -working-directory when checking if output files can be written
steven_wu accepted this revision. steven_wu added a comment. This revision is now accepted and ready to land. LGTM. I will commit this if no objection. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D95497/new/ https://reviews.llvm.org/D95497 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D95497: Frontend: Respect -working-directory when checking if output files can be written
dexonsmith updated this revision to Diff 323422. dexonsmith added a comment. ping / rebase 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,9 @@ // 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 Index: clang/lib/Frontend/CompilerInstance.cpp === --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -661,11 +661,7 @@ if (OF.TempFilename.empty()) continue; -// If '-working-directory' was passed, the output filename should be -// relative to that. -SmallString<128> NewOutFile(OF.Filename); -FileMgr->FixupRelativePath(NewOutFile); -std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, NewOutFile); +std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, OF.Filename); if (!EC) continue; getDiagnostics().Report(diag::err_unable_to_rename_temp) @@ -730,6 +726,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> AbsPath; + if (!llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional OSFile; Index: clang/test/Frontend/output-paths.c === --- clang/test/Frontend/output-paths.c +++ clang/test/Frontend/output-paths.c @@ -2,3 +2,9 @@ // 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 Index: clang/lib/Frontend/CompilerInstance.cpp === --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -661,11 +661,7 @@ if (OF.TempFilename.empty()) continue; -// If '-working-directory' was passed, the output filename should be -// relative to that. -SmallString<128> NewOutFile(OF.Filename); -FileMgr->FixupRelativePath(NewOutFile); -std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, NewOutFile); +std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, OF.Filename); if (!EC) continue; getDiagnostics().Report(diag::err_unable_to_rename_temp) @@ -730,6 +726,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> AbsPath; + if (!llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional OSFile; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D95497: Frontend: Respect -working-directory when checking if output files can be written
dexonsmith created this revision. dexonsmith added a reviewer: erik.pilkington. Herald added a subscriber: ributzka. dexonsmith requested review of this revision. Herald added a project: clang. Call `FixupRelativePath` when opening output files to ensure that `-working-directory` is used when checking up front for write failures, not just when finalizing the files at the end. This also moves the temporary file into the same directory as the output file. Repository: rG LLVM Github Monorepo 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,9 @@ // RUN: FileCheck -check-prefix=OUTPUTFAIL -input-file=%t %s // OUTPUTFAIL: error: unable to open output file '{{.*}}doesnotexist{{.}}somename': '{{[nN]}}o such file or directory' + +// 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 Index: clang/lib/Frontend/CompilerInstance.cpp === --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -661,11 +661,7 @@ if (OF.TempFilename.empty()) continue; -// If '-working-directory' was passed, the output filename should be -// relative to that. -SmallString<128> NewOutFile(OF.Filename); -FileMgr->FixupRelativePath(NewOutFile); -std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, NewOutFile); +std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, OF.Filename); if (!EC) continue; getDiagnostics().Report(diag::err_unable_to_rename_temp) @@ -730,6 +726,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> AbsPath; + if (!llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional OSFile; Index: clang/test/Frontend/output-paths.c === --- clang/test/Frontend/output-paths.c +++ clang/test/Frontend/output-paths.c @@ -2,3 +2,9 @@ // RUN: FileCheck -check-prefix=OUTPUTFAIL -input-file=%t %s // OUTPUTFAIL: error: unable to open output file '{{.*}}doesnotexist{{.}}somename': '{{[nN]}}o such file or directory' + +// 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 Index: clang/lib/Frontend/CompilerInstance.cpp === --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -661,11 +661,7 @@ if (OF.TempFilename.empty()) continue; -// If '-working-directory' was passed, the output filename should be -// relative to that. -SmallString<128> NewOutFile(OF.Filename); -FileMgr->FixupRelativePath(NewOutFile); -std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, NewOutFile); +std::error_code EC = llvm::sys::fs::rename(OF.TempFilename, OF.Filename); if (!EC) continue; getDiagnostics().Report(diag::err_unable_to_rename_temp) @@ -730,6 +726,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> AbsPath; + if (!llvm::sys::path::is_absolute(OutputPath)) { +AbsPath.emplace(OutputPath); +FileMgr->FixupRelativePath(*AbsPath); +OutputPath = *AbsPath; + } + std::unique_ptr OS; Optional OSFile; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits