@@ -49,7 +49,7 @@ template <typename ObjectType> struct PerThread {
4949
5050protected:
5151 ObjectType &getThreadEntry () {
52- auto &ThreadData = getThreadData ();
52+ PerThreadData &ThreadData = getThreadData ();
5353 if (ThreadData.ThreadEntry )
5454 return *ThreadData.ThreadEntry ;
5555 ThreadData.ThreadEntry = std::make_unique<ObjectType>();
@@ -60,7 +60,7 @@ template <typename ObjectType> struct PerThread {
6060 ObjectType &get () { return getThreadEntry (); }
6161
6262 template <class F > void clear (F f) {
63- for (auto ThreadData : ThreadDataList) {
63+ for (std::shared_ptr<PerThreadData> ThreadData : ThreadDataList) {
6464 if (!ThreadData->ThreadEntry )
6565 continue ;
6666 f (*ThreadData->ThreadEntry );
@@ -130,34 +130,34 @@ template <typename ContainerType, typename ObjectType> struct PerThreadTable {
130130
131131protected:
132132 ContainerType &getThreadEntry () {
133- auto &ThreadData = getThreadData ();
133+ PerThreadData &ThreadData = getThreadData ();
134134 if (ThreadData.ThreadEntry )
135135 return *ThreadData.ThreadEntry ;
136136 ThreadData.ThreadEntry = std::make_unique<ContainerType>();
137137 return *ThreadData.ThreadEntry ;
138138 }
139139
140140 size_t &getThreadNElements () {
141- auto &ThreadData = getThreadData ();
141+ PerThreadData &ThreadData = getThreadData ();
142142 return ThreadData.NElements ;
143143 }
144144
145145 void setNElements (size_t Size) {
146- auto &NElements = getThreadNElements ();
146+ size_t &NElements = getThreadNElements ();
147147 NElements = Size;
148148 }
149149
150150public:
151151 void add (ObjectType obj) {
152- auto &Entry = getThreadEntry ();
153- auto &NElements = getThreadNElements ();
152+ ContainerType &Entry = getThreadEntry ();
153+ size_t &NElements = getThreadNElements ();
154154 NElements++;
155155 Entry.add (obj);
156156 }
157157
158158 iterator erase (iterator it) {
159- auto &Entry = getThreadEntry ();
160- auto &NElements = getThreadNElements ();
159+ ContainerType &Entry = getThreadEntry ();
160+ size_t &NElements = getThreadNElements ();
161161 NElements--;
162162 return Entry.erase (it);
163163 }
@@ -167,11 +167,11 @@ template <typename ContainerType, typename ObjectType> struct PerThreadTable {
167167 // Iterators to traverse objects owned by
168168 // the current thread
169169 iterator begin () {
170- auto &Entry = getThreadEntry ();
170+ ContainerType &Entry = getThreadEntry ();
171171 return Entry.begin ();
172172 }
173173 iterator end () {
174- auto &Entry = getThreadEntry ();
174+ ContainerType &Entry = getThreadEntry ();
175175 return Entry.end ();
176176 }
177177
@@ -200,7 +200,7 @@ template <typename ContainerType, typename ObjectType> struct PerThreadTable {
200200 }
201201
202202 template <class F > llvm::Error deinit (F f) {
203- for (auto ThreadData : ThreadDataList) {
203+ for (std::shared_ptr<PerThreadData> ThreadData : ThreadDataList) {
204204 if (!ThreadData->ThreadEntry || ThreadData->NElements == 0 )
205205 continue ;
206206 for (auto &Obj : *ThreadData->ThreadEntry ) {
@@ -254,7 +254,7 @@ struct PerThreadContainer
254254
255255 // Get the object for the given index in the current thread
256256 ObjectType &get (IndexType Index) {
257- auto &Entry = this ->getThreadEntry ();
257+ ContainerType &Entry = this ->getThreadEntry ();
258258
259259 // specialized code for vector-like containers
260260 if constexpr (has_resize<ContainerType>::value) {
0 commit comments