Call non-template base methods through 'this' pointer

From https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/Name-lookup.html:
"The C++ standard prescribes that all names that are not dependent on
template parameters are bound to their present definitions when parsing
a template function or class.5 Only names that are dependent are looked
up at the point of instantiation.
...
To make the code valid either use this->f(), or Base<T>::f()"

It is best to use the this->f() solution because it could be a virtual
method.

Also use the type-safe load() and store() methods where possible.

Bug: b/155302798
Change-Id: Id636bfb0b1aae9529bf7f3f58213ec7823d9eddd
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/45150
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index 95dae47..2cef4df 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -146,12 +146,12 @@
 
 	RValue<T> load() const
 	{
-		return RValue<T>(Variable::loadValue());
+		return RValue<T>(this->loadValue());
 	}
 
 	RValue<T> store(RValue<T> rvalue) const
 	{
-		Variable::storeValue(rvalue.value());
+		this->storeValue(rvalue.value());
 
 		return rvalue;
 	}
@@ -2392,7 +2392,7 @@
 	    : alignment(alignment)
 	{
 		Value *pointerT = Nucleus::createBitCast(pointerS.value(), Nucleus::getPointerType(T::type()));
-		LValue<Pointer<T>>::storeValue(pointerT);
+		this->storeValue(pointerT);
 	}
 
 	template<class S>
@@ -2401,7 +2401,7 @@
 	{
 		Value *pointerS = pointer.loadValue();
 		Value *pointerT = Nucleus::createBitCast(pointerS, Nucleus::getPointerType(T::type()));
-		LValue<Pointer<T>>::storeValue(pointerT);
+		this->storeValue(pointerT);
 	}
 
 	Pointer(Argument<Pointer<T>> argument);
@@ -2686,7 +2686,7 @@
 template<class T>
 RValue<Pointer<T>> LValue<T>::operator&()
 {
-	return RValue<Pointer<T>>(getBaseAddress());
+	return RValue<Pointer<T>>(this->getBaseAddress());
 }
 
 template<class T>
@@ -2963,7 +2963,7 @@
 Pointer<T>::Pointer(Argument<Pointer<T>> argument)
     : alignment(1)
 {
-	LValue<Pointer<T>>::store(argument.rvalue());
+	this->store(argument.rvalue());
 }
 
 template<class T>
@@ -2975,23 +2975,21 @@
 Pointer<T>::Pointer(RValue<Pointer<T>> rhs)
     : alignment(1)
 {
-	LValue<Pointer<T>>::storeValue(rhs.value());
+	this->store(rhs);
 }
 
 template<class T>
 Pointer<T>::Pointer(const Pointer<T> &rhs)
     : alignment(rhs.alignment)
 {
-	Value *value = rhs.loadValue();
-	LValue<Pointer<T>>::storeValue(value);
+	this->store(rhs.load());
 }
 
 template<class T>
 Pointer<T>::Pointer(const Reference<Pointer<T>> &rhs)
     : alignment(rhs.getAlignment())
 {
-	Value *value = rhs.loadValue();
-	LValue<Pointer<T>>::storeValue(value);
+	this->store(rhs.load());
 }
 
 template<class T>
@@ -2999,40 +2997,32 @@
     : alignment(1)
 {
 	Value *value = Nucleus::createNullPointer(T::type());
-	LValue<Pointer<T>>::storeValue(value);
+	this->storeValue(value);
 }
 
 template<class T>
 RValue<Pointer<T>> Pointer<T>::operator=(RValue<Pointer<T>> rhs)
 {
-	LValue<Pointer<T>>::storeValue(rhs.value());
-
-	return rhs;
+	return this->store(rhs);
 }
 
 template<class T>
 RValue<Pointer<T>> Pointer<T>::operator=(const Pointer<T> &rhs)
 {
-	Value *value = rhs.loadValue();
-	LValue<Pointer<T>>::storeValue(value);
-
-	return RValue<Pointer<T>>(value);
+	return this->store(rhs.load());
 }
 
 template<class T>
 RValue<Pointer<T>> Pointer<T>::operator=(const Reference<Pointer<T>> &rhs)
 {
-	Value *value = rhs.loadValue();
-	LValue<Pointer<T>>::storeValue(value);
-
-	return RValue<Pointer<T>>(value);
+	return this->store(rhs.load());
 }
 
 template<class T>
 RValue<Pointer<T>> Pointer<T>::operator=(std::nullptr_t)
 {
 	Value *value = Nucleus::createNullPointer(T::type());
-	LValue<Pointer<T>>::storeValue(value);
+	this->storeValue(value);
 
 	return RValue<Pointer<T>>(this);
 }
@@ -3040,14 +3030,14 @@
 template<class T>
 Reference<T> Pointer<T>::operator*()
 {
-	return Reference<T>(LValue<Pointer<T>>::loadValue(), alignment);
+	return Reference<T>(this->loadValue(), alignment);
 }
 
 template<class T>
 Reference<T> Pointer<T>::operator[](int index)
 {
 	RR_DEBUG_INFO_UPDATE_LOC();
-	Value *element = Nucleus::createGEP(LValue<Pointer<T>>::loadValue(), T::type(), Nucleus::createConstantInt(index), false);
+	Value *element = Nucleus::createGEP(this->loadValue(), T::type(), Nucleus::createConstantInt(index), false);
 
 	return Reference<T>(element, alignment);
 }
@@ -3056,7 +3046,7 @@
 Reference<T> Pointer<T>::operator[](unsigned int index)
 {
 	RR_DEBUG_INFO_UPDATE_LOC();
-	Value *element = Nucleus::createGEP(LValue<Pointer<T>>::loadValue(), T::type(), Nucleus::createConstantInt(index), true);
+	Value *element = Nucleus::createGEP(this->loadValue(), T::type(), Nucleus::createConstantInt(index), true);
 
 	return Reference<T>(element, alignment);
 }
@@ -3065,7 +3055,7 @@
 Reference<T> Pointer<T>::operator[](RValue<Int> index)
 {
 	RR_DEBUG_INFO_UPDATE_LOC();
-	Value *element = Nucleus::createGEP(LValue<Pointer<T>>::loadValue(), T::type(), index.value(), false);
+	Value *element = Nucleus::createGEP(this->loadValue(), T::type(), index.value(), false);
 
 	return Reference<T>(element, alignment);
 }
@@ -3074,7 +3064,7 @@
 Reference<T> Pointer<T>::operator[](RValue<UInt> index)
 {
 	RR_DEBUG_INFO_UPDATE_LOC();
-	Value *element = Nucleus::createGEP(LValue<Pointer<T>>::loadValue(), T::type(), index.value(), true);
+	Value *element = Nucleus::createGEP(this->loadValue(), T::type(), index.value(), true);
 
 	return Reference<T>(element, alignment);
 }
@@ -3101,7 +3091,7 @@
 Reference<T> Array<T, S>::operator[](int index)
 {
 	assert(index < arraySize);
-	Value *element = LValue<T>::getElementPointer(Nucleus::createConstantInt(index), false);
+	Value *element = this->getElementPointer(Nucleus::createConstantInt(index), false);
 
 	return Reference<T>(element);
 }
@@ -3110,7 +3100,7 @@
 Reference<T> Array<T, S>::operator[](unsigned int index)
 {
 	assert(index < static_cast<unsigned int>(arraySize));
-	Value *element = LValue<T>::getElementPointer(Nucleus::createConstantInt(index), true);
+	Value *element = this->getElementPointer(Nucleus::createConstantInt(index), true);
 
 	return Reference<T>(element);
 }
@@ -3118,7 +3108,7 @@
 template<class T, int S>
 Reference<T> Array<T, S>::operator[](RValue<Int> index)
 {
-	Value *element = LValue<T>::getElementPointer(index.value(), false);
+	Value *element = this->getElementPointer(index.value(), false);
 
 	return Reference<T>(element);
 }
@@ -3126,7 +3116,7 @@
 template<class T, int S>
 Reference<T> Array<T, S>::operator[](RValue<UInt> index)
 {
-	Value *element = LValue<T>::getElementPointer(index.value(), true);
+	Value *element = this->getElementPointer(index.value(), true);
 
 	return Reference<T>(element);
 }