diff options
| author | Edwin Vane <edwin.vane@intel.com> | 2013-02-15 19:38:28 +0000 |
|---|---|---|
| committer | Edwin Vane <edwin.vane@intel.com> | 2013-02-15 19:38:28 +0000 |
| commit | dd4743d18a0b4b0260f0fc30c3726544cd71cb74 (patch) | |
| tree | aead9e360df742b0226444b0bf7ce74c997852f8 /clang-tools-extra/cpp11-migrate/Transform.cpp | |
| parent | 654b12c6a54794ab3d793b63b868921a3822369a (diff) | |
| download | bcm5719-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.cpp | 14 |
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; } } |

