summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/cpp11-migrate/Transform.cpp
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-02-15 19:38:28 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-02-15 19:38:28 +0000
commitdd4743d18a0b4b0260f0fc30c3726544cd71cb74 (patch)
treeaead9e360df742b0226444b0bf7ce74c997852f8 /clang-tools-extra/cpp11-migrate/Transform.cpp
parent654b12c6a54794ab3d793b63b868921a3822369a (diff)
downloadbcm5719-llvm-dd4743d18a0b4b0260f0fc30c3726544cd71cb74.tar.gz
bcm5719-llvm-dd4743d18a0b4b0260f0fc30c3726544cd71cb74.zip
Propagate changes through no-op transforms
Currently, changes made by previous transforms are not kept if a transform doesn't make any changes itself to a given file. Now file states are propagated properly through transforms that don't make changes. Fixes: PR15281 Author: Jack Yang <jack.yang@intel.com> Reviewer: klimek llvm-svn: 175288
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/Transform.cpp')
-rw-r--r--clang-tools-extra/cpp11-migrate/Transform.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/clang-tools-extra/cpp11-migrate/Transform.cpp b/clang-tools-extra/cpp11-migrate/Transform.cpp
index 65205360839..6d48f4bbbc4 100644
--- a/clang-tools-extra/cpp11-migrate/Transform.cpp
+++ b/clang-tools-extra/cpp11-migrate/Transform.cpp
@@ -7,7 +7,11 @@
using namespace clang;
void collectResults(clang::Rewriter &Rewrite,
+ const FileContentsByPath &InputStates,
FileContentsByPath &Results) {
+ // Copy the contents of InputStates to be modified.
+ Results = InputStates;
+
for (Rewriter::buffer_iterator I = Rewrite.buffer_begin(),
E = Rewrite.buffer_end();
I != E; ++I) {
@@ -16,20 +20,18 @@ void collectResults(clang::Rewriter &Rewrite,
assert(Entry->getName() != 0 &&
"Unexpected NULL return from FileEntry::getName()");
- FileContentsByPath::value_type ResultEntry;
-
- ResultEntry.first = Entry->getName();
+ std::string ResultBuf;
// Get a copy of the rewritten buffer from the Rewriter.
- llvm::raw_string_ostream StringStream(ResultEntry.second);
+ llvm::raw_string_ostream StringStream(ResultBuf);
I->second.write(StringStream);
- // Cause results to be written to ResultEntry.second.
+ // Cause results to be written to ResultBuf.
StringStream.str();
// FIXME: Use move semantics to avoid copies of the buffer contents if
// benchmarking shows the copies are expensive, especially for large source
// files.
- Results.push_back(ResultEntry);
+ Results[Entry->getName()] = ResultBuf;
}
}
OpenPOWER on IntegriCloud