summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
diff options
context:
space:
mode:
authorTareq A. Siraj <tareq.a.siraj@intel.com>2013-08-13 14:58:50 +0000
committerTareq A. Siraj <tareq.a.siraj@intel.com>2013-08-13 14:58:50 +0000
commit3baabf396876af59f80a06b6ce5cfac8c2c9afda (patch)
tree2cf08348e4f268a6a79e14940c6681001b10dfd2 /clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
parentf77718ad1d2b20c834126ce7884755f97a93eb50 (diff)
downloadbcm5719-llvm-3baabf396876af59f80a06b6ce5cfac8c2c9afda.tar.gz
bcm5719-llvm-3baabf396876af59f80a06b6ce5cfac8c2c9afda.zip
cpp11-migrate: Write header replacements to disk
Another attempt to commit r187204 after windows related problems has been fixed. Note that changes to this patch reflect the current behavior of cpp11-migrate. Header replacements are now written to disk in YAML format for an external tool to merge. A unique file will be created in the same directory as the header with all replacements that came from a source file that included the header file. The YAML file will have: - Name of the header file - Name of the source file that included the header file - Transform ID that generated the replacement - Offset - Length - Replacement text Any tool reading these replacements should read them using the HeaderChangeDocument struct. Differential Revision: http://llvm-reviews.chandlerc.com/D1369 llvm-svn: 188274
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp')
-rw-r--r--clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
index 10370f959e2..4c0744fde70 100644
--- a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
+++ b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
@@ -325,13 +325,40 @@ int main(int argc, const char **argv) {
for (HeaderOverrides::const_iterator HeaderI = Overrides.headers_begin(),
HeaderE = Overrides.headers_end();
HeaderI != HeaderE; ++HeaderI) {
- assert(!HeaderI->second.FileOverride.empty() &&
+ assert(!HeaderI->second.getContentOverride().empty() &&
"A header override should not be empty");
std::string ErrorInfo;
std::string HeaderFileName = HeaderI->getKey();
llvm::raw_fd_ostream HeaderStream(HeaderFileName.c_str(), ErrorInfo,
llvm::sys::fs::F_Binary);
- HeaderStream << HeaderI->second.FileOverride;
+ if (!ErrorInfo.empty()) {
+ llvm::errs() << "Error opening file: " << ErrorInfo << "\n";
+ continue;
+ }
+ HeaderStream << HeaderI->second.getContentOverride();
+
+ // Replacements for header files need to be written in a YAML file for
+ // every transform and will be merged together with an external tool.
+ llvm::SmallString<128> ReplacementsHeaderName;
+ llvm::SmallString<64> Error;
+ bool Result = generateReplacementsFileName(I->getKey(), HeaderFileName,
+ ReplacementsHeaderName, Error);
+ if (!Result) {
+ llvm::errs() << "Failed to generate replacements filename:" << Error
+ << "\n";
+ continue;
+ }
+
+ llvm::raw_fd_ostream ReplacementsFile(ReplacementsHeaderName.c_str(),
+ ErrorInfo,
+ llvm::sys::fs::F_Binary);
+ if (!ErrorInfo.empty()) {
+ llvm::errs() << "Error opening file: " << ErrorInfo << "\n";
+ continue;
+ }
+ llvm::yaml::Output YAML(ReplacementsFile);
+ YAML << const_cast<HeaderChangeDocument &>(
+ HeaderI->getValue().getHeaderChangeDoc());
}
}
OpenPOWER on IntegriCloud