summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-06-13 17:17:32 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-06-13 17:17:32 +0000
commit90706dd4244d4c0b8296c9aa7511181055e85cfb (patch)
tree7ead144d2bd6e0cf2793b3eecc95f9209a614a7a
parent7f20dfb7466678c196dc1bd6b76e5a4d7a3e52c1 (diff)
downloadbcm5719-llvm-90706dd4244d4c0b8296c9aa7511181055e85cfb.tar.gz
bcm5719-llvm-90706dd4244d4c0b8296c9aa7511181055e85cfb.zip
cpp11-migrate: Add headers to file override information
File override structures now contain per-source overrides for headers. For now, modified headers are written to disk when the Migrator is done. This is only temporary behaviour since we can expect headers to be changed by migrating multiple source files. The changes need to be merged after all migrations are complete. llvm-svn: 183917
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp6
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/FileOverrides.h9
-rw-r--r--clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp13
3 files changed, 28 insertions, 0 deletions
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
index 0f7e5214ff1..1c3320780bb 100644
--- a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
+++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
@@ -7,4 +7,10 @@ void SourceOverrides::applyOverrides(clang::SourceManager &SM,
"Main source file override should exist!");
SM.overrideFileContents(FM.getFile(MainFileName),
llvm::MemoryBuffer::getMemBuffer(MainFileOverride));
+
+ for (HeaderOverrides::const_iterator I = Headers.begin(),
+ E = Headers.end(); I != E; ++I)
+ SM.overrideFileContents(
+ FM.getFile(I->second.FileName),
+ llvm::MemoryBuffer::getMemBuffer(I->second.FileOverride));
}
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
index d33cddf4c50..03d70ebb13a 100644
--- a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
+++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
@@ -24,6 +24,14 @@ class SourceManager;
class FileManager;
} // namespace clang
+/// \brief Container for storing override information for a single headers.
+struct HeaderOverride {
+ std::string FileName;
+ std::string FileOverride;
+};
+
+/// \brief Container mapping header file names to override information.
+typedef std::map<std::string, HeaderOverride> HeaderOverrides;
/// \brief Container storing the file content overrides for a source file.
struct SourceOverrides {
@@ -36,6 +44,7 @@ struct SourceOverrides {
std::string MainFileName;
std::string MainFileOverride;
+ HeaderOverrides Headers;
};
/// \brief Maps source file names to content override information.
diff --git a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
index 26c2ac4bfa2..15f5aa12f5c 100644
--- a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
+++ b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp
@@ -179,6 +179,19 @@ int main(int argc, const char **argv) {
llvm::raw_fd_ostream FileStream(I->first.c_str(), ErrorInfo,
llvm::raw_fd_ostream::F_Binary);
FileStream << I->second.MainFileOverride;
+
+ // FIXME: The Migrator shouldn't be responsible for writing headers
+ // to disk. Instead, it should write replacement info and another tool
+ // should take all replacement info for a header from possibly many other
+ // migration processes and merge it into a final form. For now, the
+ // updated header is written to disk for testing purposes.
+ for (HeaderOverrides::const_iterator HeaderI = I->second.Headers.begin(),
+ HeaderE = I->second.Headers.end();
+ HeaderI != HeaderE; ++HeaderI) {
+ llvm::raw_fd_ostream HeaderStream(I->first.c_str(), ErrorInfo,
+ llvm::raw_fd_ostream::F_Binary);
+ HeaderStream << HeaderI->second.FileOverride;
+ }
}
// Report execution times.
OpenPOWER on IntegriCloud