[ADT] Teach PointerUnion to support assignment directly from nullptr to

clear it out.

llvm-svn: 207471
This commit is contained in:
Chandler Carruth 2014-04-29 00:14:27 +00:00
parent 982a589d3a
commit d24465f443
2 changed files with 24 additions and 0 deletions

View File

@ -155,6 +155,12 @@ namespace llvm {
return (PT1 *)Val.getAddrOfPointer();
}
/// \brief Assignment from nullptr which just clears the union.
const PointerUnion &operator=(std::nullptr_t) {
Val.initWithPointer(nullptr);
return *this;
}
/// Assignment operators - Allow assigning into this union from either
/// pointer type, setting the discriminator to remember what it came from.
const PointerUnion &operator=(const PT1 &RHS) {
@ -299,6 +305,12 @@ namespace llvm {
return T();
}
/// \brief Assignment from nullptr which just clears the union.
const PointerUnion3 &operator=(std::nullptr_t) {
Val = nullptr;
return *this;
}
/// Assignment operators - Allow assigning into this union from either
/// pointer type, setting the discriminator to remember what it came from.
const PointerUnion3 &operator=(const PT1 &RHS) {
@ -408,6 +420,12 @@ namespace llvm {
return T();
}
/// \brief Assignment from nullptr which just clears the union.
const PointerUnion4 &operator=(std::nullptr_t) {
Val = nullptr;
return *this;
}
/// Assignment operators - Allow assigning into this union from either
/// pointer type, setting the discriminator to remember what it came from.
const PointerUnion4 &operator=(const PT1 &RHS) {

View File

@ -46,6 +46,12 @@ TEST_F(PointerUnionTest, Null) {
EXPECT_TRUE((bool)a);
EXPECT_TRUE((bool)b);
EXPECT_FALSE(n);
EXPECT_NE(n, b);
EXPECT_EQ(b, c);
b = nullptr;
EXPECT_EQ(n, b);
EXPECT_NE(b, c);
}
TEST_F(PointerUnionTest, Is) {