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);
}