Reactor: Add nullptr_t copy / assignment operators to Pointer<T>

Change-Id: I253abead4412eec7e72148c8680be04c64bd2148
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/34548
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index 20cf3b0..e13f24d 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -2325,10 +2325,12 @@
 		Pointer(RValue<Pointer<T>> rhs);
 		Pointer(const Pointer<T> &rhs);
 		Pointer(const Reference<Pointer<T>> &rhs);
+		Pointer(std::nullptr_t);
 
 		RValue<Pointer<T>> operator=(RValue<Pointer<T>> rhs);
 		RValue<Pointer<T>> operator=(const Pointer<T> &rhs);
 		RValue<Pointer<T>> operator=(const Reference<Pointer<T>> &rhs);
+		RValue<Pointer<T>> operator=(std::nullptr_t);
 
 		Reference<T> operator*();
 		Reference<T> operator[](int index);
@@ -2842,6 +2844,13 @@
 	}
 
 	template<class T>
+	Pointer<T>::Pointer(std::nullptr_t) : alignment(1)
+	{
+		Value *value = Nucleus::createNullPointer(T::getType());
+		LValue<Pointer<T>>::storeValue(value);
+	}
+
+	template<class T>
 	RValue<Pointer<T>> Pointer<T>::operator=(RValue<Pointer<T>> rhs)
 	{
 		LValue<Pointer<T>>::storeValue(rhs.value);
@@ -2868,6 +2877,15 @@
 	}
 
 	template<class T>
+	RValue<Pointer<T>> Pointer<T>::operator=(std::nullptr_t)
+	{
+		Value *value = Nucleus::createNullPointer(T::getType());
+		LValue<Pointer<T>>::storeValue(value);
+
+		return RValue<Pointer<T>>(this);
+	}
+
+	template<class T>
 	Reference<T> Pointer<T>::operator*()
 	{
 		return Reference<T>(LValue<Pointer<T>>::loadValue(), alignment);