Changeset 207225 in webkit


Ignore:
Timestamp:
Oct 12, 2016 10:41:00 AM (7 years ago)
Author:
weinig@apple.com
Message:

Optional's move-constructor and move-assignment operator don't disengage the value being moved from
https://bugs.webkit.org/show_bug.cgi?id=163309

Reviewed by Anders Carlsson.

Source/WTF:

  • wtf/Optional.h:

(WTF::Optional::Optional):
(WTF::Optional::operator=):
Disengage 'other' on move-construction and move-assignment.

Tools:

  • TestWebKitAPI/Tests/WTF/Optional.cpp:

(TestWebKitAPI::TEST):
Add tests for Optional's move-constructor and move-assignment operator.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r207179 r207225  
     12016-10-11  Sam Weinig  <sam@webkit.org>
     2
     3        Optional's move-constructor and move-assignment operator don't disengage the value being moved from
     4        https://bugs.webkit.org/show_bug.cgi?id=163309
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * wtf/Optional.h:
     9        (WTF::Optional::Optional):
     10        (WTF::Optional::operator=):
     11        Disengage 'other' on move-construction and move-assignment.
     12
    1132016-10-08  Filip Pizlo  <fpizlo@apple.com>
    214
  • trunk/Source/WTF/wtf/Optional.h

    r199107 r207225  
    7272        : m_isEngaged(other.m_isEngaged)
    7373    {
    74         if (m_isEngaged)
     74        if (m_isEngaged) {
    7575            new (NotNull, &m_value) T(WTFMove(*other.asPtr()));
     76            other.m_isEngaged = false;
     77        }
    7678    }
    7779
     
    122124            new (NotNull, &m_value) T(WTFMove(*other.asPtr()));
    123125            m_isEngaged = true;
     126            other.m_isEngaged = false;
    124127        }
    125128        return *this;
  • trunk/Tools/ChangeLog

    r207220 r207225  
     12016-10-11  Sam Weinig  <sam@webkit.org>
     2
     3        Optional's move-constructor and move-assignment operator don't disengage the value being moved from
     4        https://bugs.webkit.org/show_bug.cgi?id=163309
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * TestWebKitAPI/Tests/WTF/Optional.cpp:
     9        (TestWebKitAPI::TEST):
     10        Add tests for Optional's move-constructor and move-assignment operator.
     11
    1122016-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>
    213
  • trunk/Tools/TestWebKitAPI/Tests/WTF/Optional.cpp

    r199107 r207225  
    2626#include "config.h"
    2727
     28#include "Counters.h"
    2829#include <wtf/Optional.h>
    2930
     
    147148}
    148149
     150TEST(WTF_Optional, MoveConstructor)
     151{
     152    {
     153        CopyMoveCounter::TestingScope scope;
     154
     155        Optional<CopyMoveCounter> optional(InPlace);
     156
     157        EXPECT_EQ(1U, CopyMoveCounter::constructionCount);
     158        EXPECT_EQ(0U, CopyMoveCounter::copyCount);
     159        EXPECT_EQ(0U, CopyMoveCounter::moveCount);
     160
     161        EXPECT_TRUE(static_cast<bool>(optional));
     162   
     163        Optional<CopyMoveCounter> movedTo(WTFMove(optional));
     164
     165        EXPECT_EQ(1U, CopyMoveCounter::constructionCount);
     166        EXPECT_EQ(0U, CopyMoveCounter::copyCount);
     167        EXPECT_EQ(1U, CopyMoveCounter::moveCount);
     168
     169        EXPECT_FALSE(static_cast<bool>(optional));
     170        EXPECT_TRUE(static_cast<bool>(movedTo));
     171    }
     172}
     173
     174TEST(WTF_Optional, MoveAssignment)
     175{
     176    {
     177        CopyMoveCounter::TestingScope scope;
     178
     179        Optional<CopyMoveCounter> optional(InPlace);
     180
     181        EXPECT_EQ(1U, CopyMoveCounter::constructionCount);
     182        EXPECT_EQ(0U, CopyMoveCounter::copyCount);
     183        EXPECT_EQ(0U, CopyMoveCounter::moveCount);
     184
     185        EXPECT_TRUE(static_cast<bool>(optional));
     186   
     187        Optional<CopyMoveCounter> movedTo = WTFMove(optional);
     188
     189        EXPECT_EQ(1U, CopyMoveCounter::constructionCount);
     190        EXPECT_EQ(0U, CopyMoveCounter::copyCount);
     191        EXPECT_EQ(1U, CopyMoveCounter::moveCount);
     192
     193        EXPECT_FALSE(static_cast<bool>(optional));
     194        EXPECT_TRUE(static_cast<bool>(movedTo));
     195    }
     196}
    149197
    150198} // namespace TestWebKitAPI
Note: See TracChangeset for help on using the changeset viewer.