Fix for combined loop and nullptr convert tests
authorEdwin Vane <edwin.vane@intel.com>
Thu, 7 Feb 2013 18:49:23 +0000 (18:49 +0000)
committerEdwin Vane <edwin.vane@intel.com>
Thu, 7 Feb 2013 18:49:23 +0000 (18:49 +0000)
The rewriter was previously reading the content buffer from the file itself.
Since we are now keeping the content in memory and writing to the file only
once, the rewriter's buffer (from the file) was not in sync with the
RefactoringTool's buffer. Adding an overrideFileContents call (similar to how
Clang-format handles for this) will resolve this issue.

Author: Jack Yang <jack.yang@intel.com>
Reviewers: gribozavr, klimek
llvm-svn: 174643

clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp
clang-tools-extra/cpp11-migrate/Transform.h
clang-tools-extra/cpp11-migrate/UseNullptr/UseNullptr.cpp
clang-tools-extra/test/cpp11-migrate/Combined/combined.cpp

index 19be241..0af3226 100644 (file)
@@ -69,7 +69,7 @@ int LoopConvertTransform::apply(const FileContentsByPath &InputStates,
     return result;
   }
 
-  RewriterContainer Rewrite(LoopTool.getFiles());
+  RewriterContainer Rewrite(LoopTool.getFiles(), InputStates);
 
   // FIXME: Do something if some replacements didn't get applied?
   LoopTool.applyAllReplacements(Rewrite.getRewriter());
index 3aae93f..3de989c 100644 (file)
@@ -71,14 +71,24 @@ void collectResults(clang::Rewriter &Rewrite, FileContentsByPath &Results);
 /// of being recreated for every Transform subclass, especially diagnostics.
 class RewriterContainer {
 public:
-  RewriterContainer(clang::FileManager &Files)
+  RewriterContainer(clang::FileManager &Files,
+                    const FileContentsByPath &InputStates)
     : DiagOpts(new clang::DiagnosticOptions()),
       DiagnosticPrinter(llvm::errs(), DiagOpts.getPtr()),
       Diagnostics(llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs>(
                     new clang::DiagnosticIDs()),
                   DiagOpts.getPtr(), &DiagnosticPrinter, false),
       Sources(Diagnostics, Files),
-      Rewrite(Sources, DefaultLangOptions) {}
+      Rewrite(Sources, DefaultLangOptions) {
+
+    // Overwrite source manager's file contents with data from InputStates
+    for (FileContentsByPath::const_iterator I = InputStates.begin(),
+                                            E = InputStates.end();
+         I != E; ++I) {
+      Sources.overrideFileContents(Files.getFile(I->first),
+                                   llvm::MemoryBuffer::getMemBuffer(I->second));
+    }
+  }
 
   clang::Rewriter &getRewriter() { return Rewrite; }
 
index aaf5bf1..d4ade1c 100644 (file)
@@ -53,7 +53,7 @@ int UseNullptrTransform::apply(const FileContentsByPath &InputStates,
     return result;
   }
 
-  RewriterContainer Rewrite(UseNullptrTool.getFiles());
+  RewriterContainer Rewrite(UseNullptrTool.getFiles(), InputStates);
 
   // FIXME: Do something if some replacements didn't get applied?
   UseNullptrTool.applyAllReplacements(Rewrite.getRewriter());
index 48f3be8..cd3e174 100644 (file)
@@ -4,7 +4,6 @@
 // RUN: FileCheck -input-file=%t.cpp %s
 // RUN: cpp11-migrate -loop-convert -use-nullptr -risk=risky %t_risky.cpp --
 // RUN: FileCheck -check-prefix=RISKY -input-file=%t_risky.cpp %s
-// XFAIL: *
 
 #define NULL 0