Avoid Array<> assignment
The Array<> assignment operator gets auto-generated, but is unsafe as it
overwrites the Variable address field.
Also delete the Variable assignment operator.
Bug b/129356087
Change-Id: If6d5945f2a56f9a81bbc1491a524e3f17c1561da
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28088
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index a7d044c..e64c953 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -1343,6 +1343,8 @@
// the block.
struct LoopPhi
{
+ LoopPhi(Object::ID id, uint32_t size) : phiId(id), storage(size) {}
+
Object::ID phiId; // The Phi identifier.
Object::ID continueValue; // The source merge value from the loop.
Array<SIMD::Int> storage; // The alloca.
@@ -1359,9 +1361,7 @@
auto &object = getObject(objectId);
auto &type = getType(object.type);
- LoopPhi phi;
- phi.phiId = Object::ID(insn.word(2));
- phi.storage = Array<SIMD::Int>(type.sizeInComponents);
+ LoopPhi phi(insn.word(2), type.sizeInComponents);
// Start with the Phi set to 0.
for (uint32_t i = 0; i < type.sizeInComponents; i++)
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index d13b602..ebf2a7a 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -81,8 +81,15 @@
class Variable
{
- protected:
friend class PrintValue;
+
+ Variable &operator=(const Variable&) = delete;
+
+ public:
+ Variable() = default;
+ Variable(const Variable&) = default;
+
+ protected:
Value *address;
};