[cfe-commits] r157260 - in /cfe/trunk: include/clang/Rewrite/Rewriter.h lib/Rewrite/Rewriter.cpp unittests/CMakeLists.txt unittests/Tooling/RewriterTest.cpp unittests/Tooling/RewriterTestContext.h

Manuel Klimek klimek at google.com
Mon May 28 23:50:41 PDT 2012


On Sun, May 27, 2012 at 4:01 PM, NAKAMURA Takumi <geek4civic at gmail.com>wrote:

> 2012/5/23 Manuel Klimek <klimek at google.com>:
> > Author: klimek
> > Date: Tue May 22 12:01:35 2012
> > New Revision: 157260
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=157260&view=rev
> > Log:
> > Adds a method overwriteChangedFiles to the Rewriter. This is implemented
> by
> > first writing the changed files to a temporary location and then
> overwriting
> > the original files atomically.
> >
> > Also adds a RewriterTestContext to aid unit testing rewrting logic in
> general.
> >
> >
> > Added:
> >    cfe/trunk/unittests/Tooling/RewriterTest.cpp   (with props)
> >    cfe/trunk/unittests/Tooling/RewriterTestContext.h   (with props)
> > Modified:
> >    cfe/trunk/include/clang/Rewrite/Rewriter.h
> >    cfe/trunk/lib/Rewrite/Rewriter.cpp
> >    cfe/trunk/unittests/CMakeLists.txt
>
>
> > Added: cfe/trunk/unittests/Tooling/RewriterTestContext.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/RewriterTestContext.h?rev=157260&view=auto
> >
> ==============================================================================
> > --- cfe/trunk/unittests/Tooling/RewriterTestContext.h (added)
> > +++ cfe/trunk/unittests/Tooling/RewriterTestContext.h Tue May 22
> 12:01:35 2012
> > @@ -0,0 +1,120 @@
> > +//===--- RewriterTestContext.h ----------------------------------*- C++
> -*-===//
> > +//
> > +//                     The LLVM Compiler Infrastructure
> > +//
> > +// This file is distributed under the University of Illinois Open Source
> > +// License. See LICENSE.TXT for details.
> > +//
> >
> +//===----------------------------------------------------------------------===//
> > +//
> > +//  This file defines a utility class for Rewriter related tests.
> > +//
> >
> +//===----------------------------------------------------------------------===//
> > +
> > +#ifndef LLVM_CLANG_REWRITER_TEST_CONTEXT_H
> > +#define LLVM_CLANG_REWRITER_TEST_CONTEXT_H
> > +
> > +#include "clang/Basic/Diagnostic.h"
> > +#include "clang/Basic/FileManager.h"
> > +#include "clang/Basic/LangOptions.h"
> > +#include "clang/Basic/SourceManager.h"
> > +#include "clang/Frontend/DiagnosticOptions.h"
> > +#include "clang/Frontend/TextDiagnosticPrinter.h"
> > +#include "clang/Rewrite/Rewriter.h"
> > +#include "llvm/Support/Path.h"
> > +#include "llvm/Support/raw_ostream.h"
> > +
> > +namespace clang {
> > +
> > +/// \brief A class that sets up a ready to use Rewriter.
> > +///
> > +/// Useful in unit tests that need a Rewriter. Creates all dependencies
> > +/// of a Rewriter with default values for testing and provides
> convenience
> > +/// methods, which help with writing tests that change files.
> > +class RewriterTestContext {
> > + public:
> > +  RewriterTestContext()
> > +      : Diagnostics(llvm::IntrusiveRefCntPtr<DiagnosticIDs>()),
> > +        DiagnosticPrinter(llvm::outs(), DiagnosticOptions()),
> > +        Files((FileSystemOptions())),
> > +        Sources(Diagnostics, Files),
> > +        Rewrite(Sources, Options) {
> > +    Diagnostics.setClient(&DiagnosticPrinter, false);
> > +  }
> > +
> > +  ~RewriterTestContext() {
> > +    if (TemporaryDirectory.isValid()) {
> > +      std::string ErrorInfo;
> > +      TemporaryDirectory.eraseFromDisk(true, &ErrorInfo);
> > +      assert(ErrorInfo.empty());
> > +    }
> > +  }
>
> Don't try to remove the TemporaryDirectory given by PathV1. Fixed in
> r157530.
> See also r157529.
>

The Windows and Unix implementation of GetTemporaryDirectory seem to
disagree on the contract here.
>From what I can see the Unix implementation neither reuses the path, nor
deletes it on exit (both need to be done).

Why does the Windows implementation re-use the temporary directory?

Cheers,
/Manuel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120529/59be8bd0/attachment.html>


More information about the cfe-commits mailing list