forked from OSchip/llvm-project
[ADT] Teach PointerUnion to support assignment directly from nullptr to
clear it out. llvm-svn: 207471
This commit is contained in:
parent
982a589d3a
commit
d24465f443
|
@ -154,6 +154,12 @@ namespace llvm {
|
|||
"Can't get the address because PointerLikeTypeTraits changes the ptr");
|
||||
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.
|
||||
|
@ -298,6 +304,12 @@ namespace llvm {
|
|||
if (is<T>()) return get<T>();
|
||||
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.
|
||||
|
@ -407,6 +419,12 @@ namespace llvm {
|
|||
if (is<T>()) return get<T>();
|
||||
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.
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue