diff --git a/flang-rt/include/flang-rt/runtime/work-queue.h b/flang-rt/include/flang-rt/runtime/work-queue.h index f7f4777839836..f8cc820c06ca1 100644 --- a/flang-rt/include/flang-rt/runtime/work-queue.h +++ b/flang-rt/include/flang-rt/runtime/work-queue.h @@ -94,7 +94,7 @@ template class ImmediateTicketRunner { // Base class for ticket workers that operate elementwise over descriptors class Elementwise { -protected: +public: RT_API_ATTRS Elementwise( const Descriptor &instance, const Descriptor *from = nullptr) : instance_{instance}, from_{from} { @@ -120,6 +120,7 @@ class Elementwise { } } +protected: const Descriptor &instance_, *from_{nullptr}; std::size_t elements_{instance_.Elements()}; std::size_t elementAt_{0}; @@ -129,7 +130,7 @@ class Elementwise { // Base class for ticket workers that operate over derived type components. class Componentwise { -protected: +public: RT_API_ATTRS Componentwise(const typeInfo::DerivedType &); RT_API_ATTRS bool IsComplete() const { return componentAt_ >= components_; } RT_API_ATTRS void Advance() { @@ -147,6 +148,7 @@ class Componentwise { } RT_API_ATTRS void GetComponent(); +protected: const typeInfo::DerivedType &derived_; std::size_t components_{0}, componentAt_{0}; const typeInfo::Component *component_{nullptr}; @@ -155,8 +157,8 @@ class Componentwise { // Base class for ticket workers that operate over derived type components // in an outer loop, and elements in an inner loop. -class ComponentsOverElements : protected Componentwise, protected Elementwise { -protected: +class ComponentsOverElements : public Componentwise, public Elementwise { +public: RT_API_ATTRS ComponentsOverElements(const Descriptor &instance, const typeInfo::DerivedType &derived, const Descriptor *from = nullptr) : Componentwise{derived}, Elementwise{instance, from} { @@ -187,13 +189,14 @@ class ComponentsOverElements : protected Componentwise, protected Elementwise { Componentwise::Reset(); } +protected: int phase_{0}; }; // Base class for ticket workers that operate over elements in an outer loop, // type components in an inner loop. -class ElementsOverComponents : protected Elementwise, protected Componentwise { -protected: +class ElementsOverComponents : public Elementwise, public Componentwise { +public: RT_API_ATTRS ElementsOverComponents(const Descriptor &instance, const typeInfo::DerivedType &derived, const Descriptor *from = nullptr) : Elementwise{instance, from}, Componentwise{derived} { @@ -219,6 +222,7 @@ class ElementsOverComponents : protected Elementwise, protected Componentwise { Elementwise::Advance(); } +protected: int phase_{0}; }; @@ -319,7 +323,7 @@ class AssignTicket : public ImmediateTicketRunner { template class DerivedAssignTicket : public ImmediateTicketRunner>, - protected std::conditional_t { public: using Base = std::conditional_t class DescriptorIoTicket : public ImmediateTicketRunner>, - protected Elementwise { + private Elementwise { public: RT_API_ATTRS DescriptorIoTicket(io::IoStatementState &io, const Descriptor &descriptor, const io::NonTbpDefinedIoTable *table, @@ -372,7 +376,7 @@ class DescriptorIoTicket template class DerivedIoTicket : public ImmediateTicketRunner>, - protected ElementsOverComponents { + private ElementsOverComponents { public: RT_API_ATTRS DerivedIoTicket(io::IoStatementState &io, const Descriptor &descriptor, const typeInfo::DerivedType &derived,