Skip to content

Commit b6fc884

Browse files
Use std::move to resolve COPY_INSTEAD_OF_MOVE Coverity issue (#11369)
Multitute of Coverity hits of type `COPY_INSTEAD_OF_MOVE` suggest to use `std::move` in `__SYCL_MAKE_CALL_ARG1`, etc. ![image](https://github.com/intel/llvm/assets/21087696/600f0caa-47c0-45ba-a059-878a8d87c650) Reports are triggered by applying `sycl::` functions, e.g. `sycl::isnan` to `sycl::vec` types. This PR uses `foo(std::move(arg))` instead of `foo(arg)` to the last instance of using `arg` in the function as instructed by the Coverity. Co-authored-by: Artur Gainullin <[email protected]>
1 parent 9698767 commit b6fc884

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

sycl/include/sycl/detail/builtins.hpp

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include <sycl/detail/defines_elementary.hpp> // for __SYCL_ALWAYS_INLINE
1212
#include <sycl/detail/generic_type_traits.hpp> // for convertDataToType
13+
#include <utility>
1314

1415
// TODO Decide whether to mark functions with this attribute.
1516
#define __NOEXC /*noexcept*/
@@ -43,9 +44,9 @@
4344
using Ret = sycl::detail::ConvertToOpenCLType_t<R>; \
4445
using Arg1 = sycl::detail::ConvertToOpenCLType_t<T1>; \
4546
__SYCL_EXTERN_IT1(Ret, prefix, call, Arg1); \
46-
Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(t1); \
47-
Ret ret = __SYCL_PPCAT(prefix, call)(arg1); \
48-
return sycl::detail::convertDataToType<Ret, R>(ret); \
47+
Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(std::move(t1)); \
48+
Ret ret = __SYCL_PPCAT(prefix, call)(std::move(arg1)); \
49+
return sycl::detail::convertDataToType<Ret, R>(std::move(ret)); \
4950
}
5051

5152
#define __SYCL_MAKE_CALL_ARG2(call, prefix) \
@@ -55,10 +56,10 @@
5556
using Arg1 = sycl::detail::ConvertToOpenCLType_t<T1>; \
5657
using Arg2 = sycl::detail::ConvertToOpenCLType_t<T2>; \
5758
__SYCL_EXTERN_IT2(Ret, prefix, call, Arg1, Arg2); \
58-
Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(t1); \
59-
Arg2 arg2 = sycl::detail::convertDataToType<T2, Arg2>(t2); \
60-
Ret ret = __SYCL_PPCAT(prefix, call)(arg1, arg2); \
61-
return sycl::detail::convertDataToType<Ret, R>(ret); \
59+
Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(std::move(t1)); \
60+
Arg2 arg2 = sycl::detail::convertDataToType<T2, Arg2>(std::move(t2)); \
61+
Ret ret = __SYCL_PPCAT(prefix, call)(std::move(arg1), std::move(arg2)); \
62+
return sycl::detail::convertDataToType<Ret, R>(std::move(ret)); \
6263
}
6364

6465
#define __SYCL_MAKE_CALL_ARG2_SAME(call, prefix) \
@@ -67,21 +68,21 @@
6768
using Ret = sycl::detail::ConvertToOpenCLType_t<R>; \
6869
using Arg = sycl::detail::ConvertToOpenCLType_t<T>; \
6970
__SYCL_EXTERN_IT2_SAME(Ret, prefix, call, Arg); \
70-
Arg arg1 = sycl::detail::convertDataToType<T, Arg>(t1); \
71-
Arg arg2 = sycl::detail::convertDataToType<T, Arg>(t2); \
72-
Ret ret = __SYCL_PPCAT(prefix, call)(arg1, arg2); \
73-
return sycl::detail::convertDataToType<Ret, R>(ret); \
71+
Arg arg1 = sycl::detail::convertDataToType<T, Arg>(std::move(t1)); \
72+
Arg arg2 = sycl::detail::convertDataToType<T, Arg>(std::move(t2)); \
73+
Ret ret = __SYCL_PPCAT(prefix, call)(std::move(arg1), std::move(arg2)); \
74+
return sycl::detail::convertDataToType<Ret, R>(std::move(ret)); \
7475
}
7576

7677
#define __SYCL_MAKE_CALL_ARG2_SAME_RESULT(call, prefix) \
7778
template <typename T> \
7879
inline __SYCL_ALWAYS_INLINE T __invoke_##call(T v1, T v2) __NOEXC { \
7980
using Type = sycl::detail::ConvertToOpenCLType_t<T>; \
8081
__SYCL_EXTERN_IT2_SAME(Type, prefix, call, Type); \
81-
Type arg1 = sycl::detail::convertDataToType<T, Type>(v1); \
82-
Type arg2 = sycl::detail::convertDataToType<T, Type>(v2); \
83-
Type ret = __SYCL_PPCAT(prefix, call)(arg1, arg2); \
84-
return sycl::detail::convertDataToType<Type, T>(ret); \
82+
Type arg1 = sycl::detail::convertDataToType<T, Type>(std::move(v1)); \
83+
Type arg2 = sycl::detail::convertDataToType<T, Type>(std::move(v2)); \
84+
Type ret = __SYCL_PPCAT(prefix, call)(std::move(arg1), std::move(arg2)); \
85+
return sycl::detail::convertDataToType<Type, T>(std::move(ret)); \
8586
}
8687

8788
#define __SYCL_MAKE_CALL_ARG3(call, prefix) \
@@ -92,11 +93,12 @@
9293
using Arg2 = sycl::detail::ConvertToOpenCLType_t<T2>; \
9394
using Arg3 = sycl::detail::ConvertToOpenCLType_t<T3>; \
9495
__SYCL_EXTERN_IT3(Ret, prefix, call, Arg1, Arg2, Arg3); \
95-
Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(t1); \
96-
Arg2 arg2 = sycl::detail::convertDataToType<T2, Arg2>(t2); \
97-
Arg3 arg3 = sycl::detail::convertDataToType<T3, Arg3>(t3); \
98-
Ret ret = __SYCL_PPCAT(prefix, call)(arg1, arg2, arg3); \
99-
return sycl::detail::convertDataToType<Ret, R>(ret); \
96+
Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(std::move(t1)); \
97+
Arg2 arg2 = sycl::detail::convertDataToType<T2, Arg2>(std::move(t2)); \
98+
Arg3 arg3 = sycl::detail::convertDataToType<T3, Arg3>(std::move(t3)); \
99+
Ret ret = __SYCL_PPCAT(prefix, call)(std::move(arg1), std::move(arg2), \
100+
std::move(arg3)); \
101+
return sycl::detail::convertDataToType<Ret, R>(std::move(ret)); \
100102
}
101103

102104
#ifndef __SYCL_DEVICE_ONLY__

0 commit comments

Comments
 (0)