Index: llvm/trunk/unittests/ADT/SmallVectorTest.cpp =================================================================== --- llvm/trunk/unittests/ADT/SmallVectorTest.cpp +++ llvm/trunk/unittests/ADT/SmallVectorTest.cpp @@ -908,63 +908,69 @@ EmplaceableArg<3> A3(true); { SmallVector V; - V.emplace_back(); + Emplaceable &back = V.emplace_back(); + EXPECT_TRUE(&back == &V.back()); EXPECT_TRUE(V.size() == 1); - EXPECT_TRUE(V.back().State == ES_Emplaced); - EXPECT_TRUE(V.back().A0.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A1.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A2.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A3.State == EAS_Defaulted); + EXPECT_TRUE(back.State == ES_Emplaced); + EXPECT_TRUE(back.A0.State == EAS_Defaulted); + EXPECT_TRUE(back.A1.State == EAS_Defaulted); + EXPECT_TRUE(back.A2.State == EAS_Defaulted); + EXPECT_TRUE(back.A3.State == EAS_Defaulted); } { SmallVector V; - V.emplace_back(std::move(A0)); + Emplaceable &back = V.emplace_back(std::move(A0)); + EXPECT_TRUE(&back == &V.back()); EXPECT_TRUE(V.size() == 1); - EXPECT_TRUE(V.back().State == ES_Emplaced); - EXPECT_TRUE(V.back().A0.State == EAS_RValue); - EXPECT_TRUE(V.back().A1.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A2.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A3.State == EAS_Defaulted); + EXPECT_TRUE(back.State == ES_Emplaced); + EXPECT_TRUE(back.A0.State == EAS_RValue); + EXPECT_TRUE(back.A1.State == EAS_Defaulted); + EXPECT_TRUE(back.A2.State == EAS_Defaulted); + EXPECT_TRUE(back.A3.State == EAS_Defaulted); } { SmallVector V; - V.emplace_back(A0); + Emplaceable &back = V.emplace_back(A0); + EXPECT_TRUE(&back == &V.back()); EXPECT_TRUE(V.size() == 1); - EXPECT_TRUE(V.back().State == ES_Emplaced); - EXPECT_TRUE(V.back().A0.State == EAS_LValue); - EXPECT_TRUE(V.back().A1.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A2.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A3.State == EAS_Defaulted); + EXPECT_TRUE(back.State == ES_Emplaced); + EXPECT_TRUE(back.A0.State == EAS_LValue); + EXPECT_TRUE(back.A1.State == EAS_Defaulted); + EXPECT_TRUE(back.A2.State == EAS_Defaulted); + EXPECT_TRUE(back.A3.State == EAS_Defaulted); } { SmallVector V; - V.emplace_back(A0, A1); + Emplaceable &back = V.emplace_back(A0, A1); + EXPECT_TRUE(&back == &V.back()); EXPECT_TRUE(V.size() == 1); - EXPECT_TRUE(V.back().State == ES_Emplaced); - EXPECT_TRUE(V.back().A0.State == EAS_LValue); - EXPECT_TRUE(V.back().A1.State == EAS_LValue); - EXPECT_TRUE(V.back().A2.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A3.State == EAS_Defaulted); + EXPECT_TRUE(back.State == ES_Emplaced); + EXPECT_TRUE(back.A0.State == EAS_LValue); + EXPECT_TRUE(back.A1.State == EAS_LValue); + EXPECT_TRUE(back.A2.State == EAS_Defaulted); + EXPECT_TRUE(back.A3.State == EAS_Defaulted); } { SmallVector V; - V.emplace_back(std::move(A0), std::move(A1)); + Emplaceable &back = V.emplace_back(std::move(A0), std::move(A1)); + EXPECT_TRUE(&back == &V.back()); EXPECT_TRUE(V.size() == 1); - EXPECT_TRUE(V.back().State == ES_Emplaced); - EXPECT_TRUE(V.back().A0.State == EAS_RValue); - EXPECT_TRUE(V.back().A1.State == EAS_RValue); - EXPECT_TRUE(V.back().A2.State == EAS_Defaulted); - EXPECT_TRUE(V.back().A3.State == EAS_Defaulted); + EXPECT_TRUE(back.State == ES_Emplaced); + EXPECT_TRUE(back.A0.State == EAS_RValue); + EXPECT_TRUE(back.A1.State == EAS_RValue); + EXPECT_TRUE(back.A2.State == EAS_Defaulted); + EXPECT_TRUE(back.A3.State == EAS_Defaulted); } { SmallVector V; - V.emplace_back(std::move(A0), A1, std::move(A2), A3); + Emplaceable &back = V.emplace_back(std::move(A0), A1, std::move(A2), A3); + EXPECT_TRUE(&back == &V.back()); EXPECT_TRUE(V.size() == 1); - EXPECT_TRUE(V.back().State == ES_Emplaced); - EXPECT_TRUE(V.back().A0.State == EAS_RValue); - EXPECT_TRUE(V.back().A1.State == EAS_LValue); - EXPECT_TRUE(V.back().A2.State == EAS_RValue); - EXPECT_TRUE(V.back().A3.State == EAS_LValue); + EXPECT_TRUE(back.State == ES_Emplaced); + EXPECT_TRUE(back.A0.State == EAS_RValue); + EXPECT_TRUE(back.A1.State == EAS_LValue); + EXPECT_TRUE(back.A2.State == EAS_RValue); + EXPECT_TRUE(back.A3.State == EAS_LValue); } { SmallVector V;