Skip to content

Commit 597fc1d

Browse files
authored
[SYCL][ABI-Break] Remove getRawSyclObjImpl() from headers (#14585)
As per #10474, I have: - Removed `getRawSyclObjImpl` - Changed `getSyclObjImpl` to return a reference instead
1 parent 20969b4 commit 597fc1d

File tree

20 files changed

+76
-65
lines changed

20 files changed

+76
-65
lines changed

sycl/include/sycl/accessor.hpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ class __SYCL_EXPORT AccessorBaseHost {
551551
void *getMemoryObject() const;
552552

553553
template <class Obj>
554-
friend decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject);
554+
friend const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject);
555555

556556
template <class T>
557557
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -586,7 +586,8 @@ class __SYCL_EXPORT LocalAccessorBaseHost {
586586

587587
protected:
588588
template <class Obj>
589-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
589+
friend const decltype(Obj::impl) &
590+
detail::getSyclObjImpl(const Obj &SyclObject);
590591

591592
template <class T>
592593
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -844,7 +845,8 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor :
844845
friend class sycl::ext::intel::esimd::detail::AccessorPrivateProxy;
845846

846847
template <class Obj>
847-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
848+
friend const decltype(Obj::impl) &
849+
detail::getSyclObjImpl(const Obj &SyclObject);
848850

849851
template <class T>
850852
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -2236,7 +2238,8 @@ class __SYCL_SPECIAL_CLASS local_accessor_base :
22362238
}
22372239

22382240
template <class Obj>
2239-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
2241+
friend const decltype(Obj::impl) &
2242+
detail::getSyclObjImpl(const Obj &SyclObject);
22402243

22412244
template <class T>
22422245
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -2654,7 +2657,7 @@ class __SYCL_EBO host_accessor
26542657
access::placeholder::false_t>{Impl} {}
26552658

26562659
template <class Obj>
2657-
friend decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject);
2660+
friend const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject);
26582661

26592662
template <class T>
26602663
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/accessor_image.hpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ class __SYCL_EXPORT UnsampledImageAccessorBaseHost {
9797

9898
protected:
9999
template <class Obj>
100-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
100+
friend const decltype(Obj::impl) &
101+
detail::getSyclObjImpl(const Obj &SyclObject);
101102

102103
template <class T>
103104
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -167,7 +168,8 @@ class __SYCL_EXPORT SampledImageAccessorBaseHost {
167168

168169
protected:
169170
template <class Obj>
170-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
171+
friend const decltype(Obj::impl) &
172+
detail::getSyclObjImpl(const Obj &SyclObject);
171173

172174
template <class T>
173175
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -931,7 +933,8 @@ class __SYCL_EBO unsampled_image_accessor :
931933
}
932934

933935
template <class Obj>
934-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
936+
friend const decltype(Obj::impl) &
937+
detail::getSyclObjImpl(const Obj &SyclObject);
935938

936939
template <class T>
937940
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -1067,7 +1070,8 @@ class __SYCL_EBO host_unsampled_image_accessor
10671070
: base_class{Impl} {}
10681071

10691072
template <class Obj>
1070-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
1073+
friend const decltype(Obj::impl) &
1074+
detail::getSyclObjImpl(const Obj &SyclObject);
10711075

10721076
template <class T>
10731077
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -1210,7 +1214,8 @@ class __SYCL_EBO sampled_image_accessor :
12101214
}
12111215

12121216
template <class Obj>
1213-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
1217+
friend const decltype(Obj::impl) &
1218+
detail::getSyclObjImpl(const Obj &SyclObject);
12141219

12151220
template <class T>
12161221
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -1313,7 +1318,8 @@ class __SYCL_EBO host_sampled_image_accessor
13131318
: base_class{Impl} {}
13141319

13151320
template <class Obj>
1316-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
1321+
friend const decltype(Obj::impl) &
1322+
detail::getSyclObjImpl(const Obj &SyclObject);
13171323

13181324
template <class T>
13191325
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/buffer.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,8 @@ class buffer : public detail::buffer_plain,
723723

724724
private:
725725
template <class Obj>
726-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
726+
friend const decltype(Obj::impl) &
727+
detail::getSyclObjImpl(const Obj &SyclObject);
727728
template <typename A, int dims, typename C, typename Enable>
728729
friend class buffer;
729730
template <typename DataT, int dims, access::mode mode, access::target target,

sycl/include/sycl/context.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,8 @@ class __SYCL_EXPORT context : public detail::OwnerLessBase<context> {
246246
friend auto get_native(const SyclT &Obj) -> backend_return_t<Backend, SyclT>;
247247

248248
template <class Obj>
249-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
250-
251-
template <class T>
252-
friend typename std::add_pointer_t<typename decltype(T::impl)::element_type>
253-
detail::getRawSyclObjImpl(const T &SyclObject);
249+
friend const decltype(Obj::impl) &
250+
detail::getSyclObjImpl(const Obj &SyclObject);
254251

255252
template <class T>
256253
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/detail/impl_utils.hpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,12 @@ namespace detail {
2727
// would trigger that error in MSVC:
2828
// template <class T>
2929
// friend decltype(T::impl) detail::getSyclObjImpl(const T &SyclObject);
30-
template <class Obj> decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject) {
30+
template <class Obj>
31+
const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject) {
3132
assert(SyclObject.impl && "every constructor should create an impl");
3233
return SyclObject.impl;
3334
}
3435

35-
// Returns the raw pointer to the impl object of given face object. The caller
36-
// must make sure the returned pointer is not captured in a field or otherwise
37-
// stored - i.e. must live only as on-stack value.
38-
template <class T>
39-
typename std::add_pointer_t<typename decltype(T::impl)::element_type>
40-
getRawSyclObjImpl(const T &SyclObject) {
41-
return SyclObject.impl.get();
42-
}
43-
4436
// Helper function for creation SYCL interface objects from implementations.
4537
// Note! This function relies on the fact that all SYCL interface classes
4638
// contain "impl" field that points to implementation object. "impl" field

sycl/include/sycl/device.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -350,11 +350,8 @@ class __SYCL_EXPORT device : public detail::OwnerLessBase<device> {
350350
pi_native_handle getNative() const;
351351

352352
template <class Obj>
353-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
354-
355-
template <class T>
356-
friend typename std::add_pointer_t<typename decltype(T::impl)::element_type>
357-
detail::getRawSyclObjImpl(const T &SyclObject);
353+
friend const decltype(Obj::impl) &
354+
detail::getSyclObjImpl(const Obj &SyclObject);
358355

359356
template <class T>
360357
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/event.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ class __SYCL_EXPORT event : public detail::OwnerLessBase<event> {
145145
std::shared_ptr<detail::event_impl> impl;
146146

147147
template <class Obj>
148-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
148+
friend const decltype(Obj::impl) &
149+
detail::getSyclObjImpl(const Obj &SyclObject);
149150

150151
template <class T>
151152
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/ext/oneapi/bindless_images_memory.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class __SYCL_EXPORT image_mem {
9292
std::shared_ptr<detail::image_mem_impl> impl;
9393

9494
template <class Obj>
95-
friend decltype(Obj::impl)
95+
friend const decltype(Obj::impl) &
9696
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
9797
};
9898

sycl/include/sycl/ext/oneapi/experimental/graph.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class __SYCL_EXPORT node {
133133
node(const std::shared_ptr<detail::node_impl> &Impl) : impl(Impl) {}
134134

135135
template <class Obj>
136-
friend decltype(Obj::impl)
136+
friend const decltype(Obj::impl) &
137137
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
138138
template <class T>
139139
friend T sycl::detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -342,7 +342,7 @@ class __SYCL_EXPORT modifiable_command_graph {
342342
void addGraphLeafDependencies(node Node);
343343

344344
template <class Obj>
345-
friend decltype(Obj::impl)
345+
friend const decltype(Obj::impl) &
346346
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
347347
template <class T>
348348
friend T sycl::detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -380,7 +380,7 @@ class __SYCL_EXPORT executable_command_graph {
380380
const property_list &PropList = {});
381381

382382
template <class Obj>
383-
friend decltype(Obj::impl)
383+
friend const decltype(Obj::impl) &
384384
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
385385

386386
/// Creates a backend representation of the graph in \p impl member variable.
@@ -442,7 +442,7 @@ class __SYCL_EXPORT dynamic_parameter_base {
442442
std::shared_ptr<dynamic_parameter_impl> impl;
443443

444444
template <class Obj>
445-
friend decltype(Obj::impl)
445+
friend const decltype(Obj::impl) &
446446
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
447447
};
448448
} // namespace detail

sycl/include/sycl/ext/oneapi/virtual_mem/physical_mem.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class __SYCL_EXPORT physical_mem
5959
std::shared_ptr<sycl::detail::physical_mem_impl> impl;
6060

6161
template <class Obj>
62-
friend decltype(Obj::impl)
62+
friend const decltype(Obj::impl) &
6363
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
6464

6565
template <class T>

sycl/include/sycl/ext/oneapi/weak_object_base.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ template <typename SYCLObjT> class weak_object_base {
6363
protected:
6464
#ifndef __SYCL_DEVICE_ONLY__
6565
// Store a weak variant of the impl in the SYCLObjT.
66-
typename decltype(sycl::detail::getSyclObjImpl(
67-
std::declval<SYCLObjT>()))::weak_type MObjWeakPtr;
66+
typename std::remove_reference<decltype(sycl::detail::getSyclObjImpl(
67+
std::declval<SYCLObjT>()))>::type::weak_type MObjWeakPtr;
68+
// relies on <type_traits> from impl_utils.h
6869

6970
static decltype(MObjWeakPtr) GetWeakImpl(const SYCLObjT &SYCLObj) {
7071
return sycl::detail::getSyclObjImpl(SYCLObj);

sycl/include/sycl/handler.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3369,7 +3369,7 @@ class __SYCL_EXPORT handler {
33693369
friend class ext::intel::experimental::pipe;
33703370

33713371
template <class Obj>
3372-
friend decltype(Obj::impl)
3372+
friend const decltype(Obj::impl) &
33733373
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
33743374

33753375
/// Read from a host pipe given a host address and

sycl/include/sycl/image.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,8 @@ class image : public detail::unsampled_image_common<Dimensions, AllocatorT> {
716716
const context &TargetContext, event AvailableEvent);
717717

718718
template <class Obj>
719-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
719+
friend const decltype(Obj::impl) &
720+
detail::getSyclObjImpl(const Obj &SyclObject);
720721

721722
template <typename DataT, int Dims, access::mode AccMode,
722723
access::target AccTarget, access::placeholder IsPlaceholder,
@@ -1002,7 +1003,8 @@ class unsampled_image
10021003

10031004
private:
10041005
template <class Obj>
1005-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
1006+
friend const decltype(Obj::impl) &
1007+
detail::getSyclObjImpl(const Obj &SyclObject);
10061008

10071009
template <class T>
10081010
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -1137,7 +1139,8 @@ class sampled_image
11371139

11381140
private:
11391141
template <class Obj>
1140-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
1142+
friend const decltype(Obj::impl) &
1143+
detail::getSyclObjImpl(const Obj &SyclObject);
11411144

11421145
template <class T>
11431146
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/kernel.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ class __SYCL_EXPORT kernel : public detail::OwnerLessBase<kernel> {
175175
std::shared_ptr<detail::kernel_impl> impl;
176176

177177
template <class Obj>
178-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
178+
friend const decltype(Obj::impl) &
179+
detail::getSyclObjImpl(const Obj &SyclObject);
179180
template <class T>
180181
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
181182
template <backend BackendName, class SyclObjectT>

sycl/include/sycl/kernel_bundle.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ class __SYCL_EXPORT kernel_id : public detail::OwnerLessBase<kernel_id> {
7575
std::shared_ptr<detail::kernel_id_impl> impl;
7676

7777
template <class Obj>
78-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
78+
friend const decltype(Obj::impl) &
79+
detail::getSyclObjImpl(const Obj &SyclObject);
7980

8081
template <class T>
8182
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -110,7 +111,8 @@ class __SYCL_EXPORT device_image_plain {
110111
detail::DeviceImageImplPtr impl;
111112

112113
template <class Obj>
113-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
114+
friend const decltype(Obj::impl) &
115+
detail::getSyclObjImpl(const Obj &SyclObject);
114116

115117
template <class T>
116118
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -141,7 +143,8 @@ class device_image : public detail::device_image_plain,
141143
: device_image_plain(std::move(Impl)) {}
142144

143145
template <class Obj>
144-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
146+
friend const decltype(Obj::impl) &
147+
detail::getSyclObjImpl(const Obj &SyclObject);
145148

146149
template <class T>
147150
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
@@ -415,7 +418,8 @@ class kernel_bundle : public detail::kernel_bundle_plain,
415418
: kernel_bundle_plain(std::move(Impl)) {}
416419

417420
template <class Obj>
418-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
421+
friend const decltype(Obj::impl) &
422+
detail::getSyclObjImpl(const Obj &SyclObject);
419423

420424
template <class T>
421425
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/platform.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,8 @@ class __SYCL_EXPORT platform : public detail::OwnerLessBase<platform> {
241241
template <class T>
242242
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
243243
template <class Obj>
244-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
244+
friend const decltype(Obj::impl) &
245+
detail::getSyclObjImpl(const Obj &SyclObject);
245246

246247
template <backend BackendName, class SyclObjectT>
247248
friend auto get_native(const SyclObjectT &Obj)

sycl/include/sycl/queue.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2665,7 +2665,7 @@ class __SYCL_EXPORT queue : public detail::OwnerLessBase<queue> {
26652665
queue(std::shared_ptr<detail::queue_impl> impl) : impl(impl) {}
26662666

26672667
template <class Obj>
2668-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
2668+
friend const decltype(Obj::impl)& detail::getSyclObjImpl(const Obj &SyclObject);
26692669
template <class T>
26702670
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
26712671

sycl/include/sycl/sampler.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ class __SYCL_EXPORT __SYCL_SPECIAL_CLASS __SYCL_TYPE(sampler) sampler {
125125
#else
126126
std::shared_ptr<detail::sampler_impl> impl;
127127
template <class Obj>
128-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
128+
friend const decltype(Obj::impl) &
129+
detail::getSyclObjImpl(const Obj &SyclObject);
129130
#endif
130131
template <typename DataT, int Dimensions, sycl::access::mode AccessMode,
131132
sycl::access::target AccessTarget,

sycl/include/sycl/stream.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,8 @@ class __SYCL_EXPORT __SYCL_SPECIAL_CLASS __SYCL_TYPE(stream) stream
928928
#else
929929
std::shared_ptr<detail::stream_impl> impl;
930930
template <class Obj>
931-
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
931+
friend const decltype(Obj::impl) &
932+
detail::getSyclObjImpl(const Obj &SyclObject);
932933
#endif
933934

934935
// NOTE: Some members are required for reconstructing the stream, but are not

0 commit comments

Comments
 (0)