[llvm] r216925 - unique_ptrify the result of SpecialCaseList::create

David Blaikie dblaikie at gmail.com
Mon Sep 15 15:31:12 PDT 2014


On Tue, Sep 9, 2014 at 3:32 PM, Justin Bogner <mail at justinbogner.com> wrote:

> David Blaikie <dblaikie at gmail.com> writes:
> > Author: dblaikie
> > Date: Tue Sep  2 13:13:54 2014
> > New Revision: 216925
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=216925&view=rev
> > Log:
> > unique_ptrify the result of SpecialCaseList::create
> >
> > Modified:
> >     llvm/trunk/include/llvm/Support/SpecialCaseList.h
> >     llvm/trunk/lib/Support/SpecialCaseList.cpp
> >     llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
> >     llvm/trunk/unittests/Support/SpecialCaseListTest.cpp
> >
> > Modified: llvm/trunk/include/llvm/Support/SpecialCaseList.h
> > URL:
> >
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/SpecialCaseList.h?rev=216925&r1=216924&r2=216925&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/Support/SpecialCaseList.h (original)
> > +++ llvm/trunk/include/llvm/Support/SpecialCaseList.h Tue Sep  2
> 13:13:54 2014
> > @@ -60,13 +60,15 @@ class SpecialCaseList {
> >    /// Parses the special case list from a file. If Path is empty,
> returns
> >    /// an empty special case list. On failure, returns 0 and writes an
> error
> >    /// message to string.
> > -  static SpecialCaseList *create(StringRef Path, std::string &Error);
> > +   static std::unique_ptr<SpecialCaseList> create(StringRef Path,
> > +                                                  std::string &Error);
> >    /// Parses the special case list from a memory buffer. On failure,
> returns
> >    /// 0 and writes an error message to string.
> > -  static SpecialCaseList *create(const MemoryBuffer *MB, std::string
> &Error);
> > +   static std::unique_ptr<SpecialCaseList> create(const MemoryBuffer
> *MB,
> > +                                                  std::string &Error);
> >    /// Parses the special case list from a file. On failure, reports a
> fatal
> >    /// error.
> > -  static SpecialCaseList *createOrDie(StringRef Path);
> > +   static std::unique_ptr<SpecialCaseList> createOrDie(StringRef Path);
>
> Something funny happened to the whitespace here.
>

Thanks for the catch - the one-space-indented access specifier threw
clang-format off. Fixed in r217837.


> >
> >    ~SpecialCaseList();
> >
> >
> > Modified: llvm/trunk/lib/Support/SpecialCaseList.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/SpecialCaseList.cpp?rev=216925&r1=216924&r2=216925&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/Support/SpecialCaseList.cpp (original)
> > +++ llvm/trunk/lib/Support/SpecialCaseList.cpp Tue Sep  2 13:13:54 2014
> > @@ -48,9 +48,10 @@ struct SpecialCaseList::Entry {
> >
> >  SpecialCaseList::SpecialCaseList() : Entries() {}
> >
> > -SpecialCaseList *SpecialCaseList::create(StringRef Path, std::string
> &Error) {
> > +std::unique_ptr<SpecialCaseList> SpecialCaseList::create(StringRef Path,
> > +                                                         std::string
> &Error) {
> >    if (Path.empty())
> > -    return new SpecialCaseList();
> > +    return std::unique_ptr<SpecialCaseList>(new SpecialCaseList());
>
> make_unique?
>

Unfortunately not - SpecialCaseList's ctor is private, so make_unique
cannot call it. This is common in factory functions/'named constructors'
like this one.


>
> >    ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr =
> >        MemoryBuffer::getFile(Path);
> >    if (std::error_code EC = FileOrErr.getError()) {
> > @@ -60,17 +61,17 @@ SpecialCaseList *SpecialCaseList::create
> >    return create(FileOrErr.get().get(), Error);
> >  }
> >
> > -SpecialCaseList *SpecialCaseList::create(
> > -    const MemoryBuffer *MB, std::string &Error) {
> > +std::unique_ptr<SpecialCaseList> SpecialCaseList::create(const
> MemoryBuffer *MB,
> > +                                                         std::string
> &Error) {
> >    std::unique_ptr<SpecialCaseList> SCL(new SpecialCaseList());
> >    if (!SCL->parse(MB, Error))
> >      return nullptr;
> > -  return SCL.release();
> > +  return SCL;
> >  }
> >
> > -SpecialCaseList *SpecialCaseList::createOrDie(StringRef Path) {
> > +std::unique_ptr<SpecialCaseList> SpecialCaseList::createOrDie(StringRef
> Path) {
> >    std::string Error;
> > -  if (SpecialCaseList *SCL = create(Path, Error))
> > +  if (auto SCL = create(Path, Error))
> >      return SCL;
> >    report_fatal_error(Error);
> >  }
> >
> > Modified: llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp?rev=216925&r1=216924&r2=216925&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
> (original)
> > +++ llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp Tue
> Sep  2 13:13:54 2014
> > @@ -139,7 +139,7 @@ class DFSanABIList {
> >    std::unique_ptr<SpecialCaseList> SCL;
> >
> >   public:
> > -  DFSanABIList(SpecialCaseList *SCL) : SCL(SCL) {}
> > +   DFSanABIList(std::unique_ptr<SpecialCaseList> SCL) :
> SCL(std::move(SCL)) {}
> >
> >    /// Returns whether either this function or its source file are
> listed in the
> >    /// given category.
> >
> > Modified: llvm/trunk/unittests/Support/SpecialCaseListTest.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/SpecialCaseListTest.cpp?rev=216925&r1=216924&r2=216925&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/unittests/Support/SpecialCaseListTest.cpp (original)
> > +++ llvm/trunk/unittests/Support/SpecialCaseListTest.cpp Tue Sep  2
> 13:13:54 2014
> > @@ -17,14 +17,15 @@ namespace {
> >
> >  class SpecialCaseListTest : public ::testing::Test {
> >  protected:
> > -  SpecialCaseList *makeSpecialCaseList(StringRef List, std::string
> &Error) {
> > +  std::unique_ptr<SpecialCaseList> makeSpecialCaseList(StringRef List,
> > +                                                       std::string
> &Error) {
> >      std::unique_ptr<MemoryBuffer> MB = MemoryBuffer::getMemBuffer(List);
> >      return SpecialCaseList::create(MB.get(), Error);
> >    }
> >
> > -  SpecialCaseList *makeSpecialCaseList(StringRef List) {
> > +  std::unique_ptr<SpecialCaseList> makeSpecialCaseList(StringRef List) {
> >      std::string Error;
> > -    SpecialCaseList *SCL = makeSpecialCaseList(List, Error);
> > +    auto SCL = makeSpecialCaseList(List, Error);
> >      assert(SCL);
> >      assert(Error == "");
> >      return SCL;
> > @@ -32,13 +33,13 @@ protected:
> >  };
> >
> >  TEST_F(SpecialCaseListTest, Basic) {
> > -  std::unique_ptr<SpecialCaseList> SCL(
> > +  std::unique_ptr<SpecialCaseList> SCL =
> >        makeSpecialCaseList("# This is a comment.\n"
> >                            "\n"
> >                            "src:hello\n"
> >                            "src:bye\n"
> >                            "src:hi=category\n"
> > -                          "src:z*=category\n"));
> > +                          "src:z*=category\n");
> >    EXPECT_TRUE(SCL->inSection("src", "hello"));
> >    EXPECT_TRUE(SCL->inSection("src", "bye"));
> >    EXPECT_TRUE(SCL->inSection("src", "hi", "category"));
> > @@ -49,38 +50,38 @@ TEST_F(SpecialCaseListTest, Basic) {
> >  }
> >
> >  TEST_F(SpecialCaseListTest, GlobalInitCompat) {
> > -  std::unique_ptr<SpecialCaseList> SCL(
> > -      makeSpecialCaseList("global:foo=init\n"));
> > +  std::unique_ptr<SpecialCaseList> SCL =
> > +      makeSpecialCaseList("global:foo=init\n");
> >    EXPECT_FALSE(SCL->inSection("global", "foo"));
> >    EXPECT_FALSE(SCL->inSection("global", "bar"));
> >    EXPECT_TRUE(SCL->inSection("global", "foo", "init"));
> >    EXPECT_FALSE(SCL->inSection("global", "bar", "init"));
> >
> > -  SCL.reset(makeSpecialCaseList("global-init:foo\n"));
> > +  SCL = makeSpecialCaseList("global-init:foo\n");
> >    EXPECT_FALSE(SCL->inSection("global", "foo"));
> >    EXPECT_FALSE(SCL->inSection("global", "bar"));
> >    EXPECT_TRUE(SCL->inSection("global", "foo", "init"));
> >    EXPECT_FALSE(SCL->inSection("global", "bar", "init"));
> >
> > -  SCL.reset(makeSpecialCaseList("type:t2=init\n"));
> > +  SCL = makeSpecialCaseList("type:t2=init\n");
> >    EXPECT_FALSE(SCL->inSection("type", "t1"));
> >    EXPECT_FALSE(SCL->inSection("type", "t2"));
> >    EXPECT_FALSE(SCL->inSection("type", "t1", "init"));
> >    EXPECT_TRUE(SCL->inSection("type", "t2", "init"));
> >
> > -  SCL.reset(makeSpecialCaseList("global-init-type:t2\n"));
> > +  SCL = makeSpecialCaseList("global-init-type:t2\n");
> >    EXPECT_FALSE(SCL->inSection("type", "t1"));
> >    EXPECT_FALSE(SCL->inSection("type", "t2"));
> >    EXPECT_FALSE(SCL->inSection("type", "t1", "init"));
> >    EXPECT_TRUE(SCL->inSection("type", "t2", "init"));
> >
> > -  SCL.reset(makeSpecialCaseList("src:hello=init\n"));
> > +  SCL = makeSpecialCaseList("src:hello=init\n");
> >    EXPECT_FALSE(SCL->inSection("src", "hello"));
> >    EXPECT_FALSE(SCL->inSection("src", "bye"));
> >    EXPECT_TRUE(SCL->inSection("src", "hello", "init"));
> >    EXPECT_FALSE(SCL->inSection("src", "bye", "init"));
> >
> > -  SCL.reset(makeSpecialCaseList("global-init-src:hello\n"));
> > +  SCL = makeSpecialCaseList("global-init-src:hello\n");
> >    EXPECT_FALSE(SCL->inSection("src", "hello"));
> >    EXPECT_FALSE(SCL->inSection("src", "bye"));
> >    EXPECT_TRUE(SCL->inSection("src", "hello", "init"));
> > @@ -88,14 +89,14 @@ TEST_F(SpecialCaseListTest, GlobalInitCo
> >  }
> >
> >  TEST_F(SpecialCaseListTest, Substring) {
> > -  std::unique_ptr<SpecialCaseList> SCL(makeSpecialCaseList("src:hello\n"
> > -                                                           "fun:foo\n"
> > -
>  "global:bar\n"));
> > +  std::unique_ptr<SpecialCaseList> SCL =
> makeSpecialCaseList("src:hello\n"
> > +                                                             "fun:foo\n"
> > +
>  "global:bar\n");
> >    EXPECT_FALSE(SCL->inSection("src", "othello"));
> >    EXPECT_FALSE(SCL->inSection("fun", "tomfoolery"));
> >    EXPECT_FALSE(SCL->inSection("global", "bartender"));
> >
> > -  SCL.reset(makeSpecialCaseList("fun:*foo*\n"));
> > +  SCL = makeSpecialCaseList("fun:*foo*\n");
> >    EXPECT_TRUE(SCL->inSection("fun", "tomfoolery"));
> >    EXPECT_TRUE(SCL->inSection("fun", "foobar"));
> >  }
> > @@ -117,7 +118,7 @@ TEST_F(SpecialCaseListTest, InvalidSpeci
> >  }
> >
> >  TEST_F(SpecialCaseListTest, EmptySpecialCaseList) {
> > -  std::unique_ptr<SpecialCaseList> SCL(makeSpecialCaseList(""));
> > +  std::unique_ptr<SpecialCaseList> SCL = makeSpecialCaseList("");
> >    EXPECT_FALSE(SCL->inSection("foo", "bar"));
> >  }
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140915/129e5a1f/attachment.html>


More information about the llvm-commits mailing list