Skip to content

Commit e7d4537

Browse files
MochalovaAnbader
andauthored
[SYCL] Resolve min/max conflict (#1339)
Adding #undef macros to resolve conflict between definitions of the min and max function in the CL/sycl.h and windows.h or another min and max define. Use adding brackets around min & max function declarations Signed-off-by: Mochalova <anastasiya.mochalova@intel.com> Co-Authored-By: Alexey Bader <alexey.bader@intel.com>
1 parent 9de1a48 commit e7d4537

File tree

5 files changed

+39
-23
lines changed

5 files changed

+39
-23
lines changed

sycl/include/CL/sycl/builtins.hpp

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -530,31 +530,31 @@ detail::enable_if_t<detail::is_genfloat<T>::value, T> abs(T x) __NOEXC {
530530

531531
// genfloat max (genfloat x, genfloat y)
532532
template <typename T>
533-
detail::enable_if_t<detail::is_genfloat<T>::value, T> max(T x, T y) __NOEXC {
533+
detail::enable_if_t<detail::is_genfloat<T>::value, T>(max)(T x, T y) __NOEXC {
534534
return __sycl_std::__invoke_fmax_common<T>(x, y);
535535
}
536536

537537
// genfloatf max (genfloatf x, float y)
538538
// genfloatd max (genfloatd x, double y)
539539
// genfloath max (genfloath x, half y)
540540
template <typename T>
541-
detail::enable_if_t<detail::is_vgenfloat<T>::value, T>
542-
max(T x, typename T::element_type y) __NOEXC {
541+
detail::enable_if_t<detail::is_vgenfloat<T>::value, T>(max)(
542+
T x, typename T::element_type y) __NOEXC {
543543
return __sycl_std::__invoke_fmax_common<T>(x, T(y));
544544
}
545545

546546
// genfloat min (genfloat x, genfloat y)
547547
template <typename T>
548-
detail::enable_if_t<detail::is_genfloat<T>::value, T> min(T x, T y) __NOEXC {
548+
detail::enable_if_t<detail::is_genfloat<T>::value, T>(min)(T x, T y) __NOEXC {
549549
return __sycl_std::__invoke_fmin_common<T>(x, y);
550550
}
551551

552552
// genfloatf min (genfloatf x, float y)
553553
// genfloatd min (genfloatd x, double y)
554554
// genfloath min (genfloath x, half y)
555555
template <typename T>
556-
detail::enable_if_t<detail::is_vgenfloat<T>::value, T>
557-
min(T x, typename T::element_type y) __NOEXC {
556+
detail::enable_if_t<detail::is_vgenfloat<T>::value, T>(min)(
557+
T x, typename T::element_type y) __NOEXC {
558558
return __sycl_std::__invoke_fmin_common<T>(x, T(y));
559559
}
560560

@@ -766,53 +766,57 @@ detail::enable_if_t<detail::is_ugeninteger<T>::value, T> mad_sat(T a, T b,
766766

767767
// igeninteger max (igeninteger x, igeninteger y)
768768
template <typename T>
769-
detail::enable_if_t<detail::is_igeninteger<T>::value, T> max(T x, T y) __NOEXC {
769+
detail::enable_if_t<detail::is_igeninteger<T>::value, T>(max)(T x,
770+
T y) __NOEXC {
770771
return __sycl_std::__invoke_s_max<T>(x, y);
771772
}
772773

773774
// ugeninteger max (ugeninteger x, ugeninteger y)
774775
template <typename T>
775-
detail::enable_if_t<detail::is_ugeninteger<T>::value, T> max(T x, T y) __NOEXC {
776+
detail::enable_if_t<detail::is_ugeninteger<T>::value, T>(max)(T x,
777+
T y) __NOEXC {
776778
return __sycl_std::__invoke_u_max<T>(x, y);
777779
}
778780

779781
// igeninteger max (vigeninteger x, sigeninteger y)
780782
template <typename T>
781-
detail::enable_if_t<detail::is_vigeninteger<T>::value, T>
782-
max(T x, typename T::element_type y) __NOEXC {
783+
detail::enable_if_t<detail::is_vigeninteger<T>::value, T>(max)(
784+
T x, typename T::element_type y) __NOEXC {
783785
return __sycl_std::__invoke_s_max<T>(x, T(y));
784786
}
785787

786788
// vugeninteger max (vugeninteger x, sugeninteger y)
787789
template <typename T>
788-
detail::enable_if_t<detail::is_vugeninteger<T>::value, T>
789-
max(T x, typename T::element_type y) __NOEXC {
790+
detail::enable_if_t<detail::is_vugeninteger<T>::value, T>(max)(
791+
T x, typename T::element_type y) __NOEXC {
790792
return __sycl_std::__invoke_u_max<T>(x, T(y));
791793
}
792794

793795
// igeninteger min (igeninteger x, igeninteger y)
794796
template <typename T>
795-
detail::enable_if_t<detail::is_igeninteger<T>::value, T> min(T x, T y) __NOEXC {
797+
detail::enable_if_t<detail::is_igeninteger<T>::value, T>(min)(T x,
798+
T y) __NOEXC {
796799
return __sycl_std::__invoke_s_min<T>(x, y);
797800
}
798801

799802
// ugeninteger min (ugeninteger x, ugeninteger y)
800803
template <typename T>
801-
detail::enable_if_t<detail::is_ugeninteger<T>::value, T> min(T x, T y) __NOEXC {
804+
detail::enable_if_t<detail::is_ugeninteger<T>::value, T>(min)(T x,
805+
T y) __NOEXC {
802806
return __sycl_std::__invoke_u_min<T>(x, y);
803807
}
804808

805809
// vigeninteger min (vigeninteger x, sigeninteger y)
806810
template <typename T>
807-
detail::enable_if_t<detail::is_vigeninteger<T>::value, T>
808-
min(T x, typename T::element_type y) __NOEXC {
811+
detail::enable_if_t<detail::is_vigeninteger<T>::value, T>(min)(
812+
T x, typename T::element_type y) __NOEXC {
809813
return __sycl_std::__invoke_s_min<T>(x, T(y));
810814
}
811815

812816
// vugeninteger min (vugeninteger x, sugeninteger y)
813817
template <typename T>
814-
detail::enable_if_t<detail::is_vugeninteger<T>::value, T>
815-
min(T x, typename T::element_type y) __NOEXC {
818+
detail::enable_if_t<detail::is_vugeninteger<T>::value, T>(min)(
819+
T x, typename T::element_type y) __NOEXC {
816820
return __sycl_std::__invoke_u_min<T>(x, T(y));
817821
}
818822

sycl/include/CL/sycl/detail/generic_type_traits.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -582,11 +582,11 @@ struct RelConverter<
582582
};
583583

584584
template <typename T> static constexpr T max_v() {
585-
return std::numeric_limits<T>::max();
585+
return (std::numeric_limits<T>::max)();
586586
}
587587

588588
template <typename T> static constexpr T min_v() {
589-
return std::numeric_limits<T>::min();
589+
return (std::numeric_limits<T>::min)();
590590
}
591591

592592
template <typename T> static constexpr T quiet_NaN() {

sycl/include/CL/sycl/half_type.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,11 +306,11 @@ template <> struct numeric_limits<half> {
306306

307307
static constexpr const float_round_style round_style = round_to_nearest;
308308

309-
static __SYCL_CONSTEXPR_ON_DEVICE const half min() noexcept {
309+
static __SYCL_CONSTEXPR_ON_DEVICE const half(min)() noexcept {
310310
return SYCL_HLF_MIN;
311311
}
312312

313-
static __SYCL_CONSTEXPR_ON_DEVICE const half max() noexcept {
313+
static __SYCL_CONSTEXPR_ON_DEVICE const half(max)() noexcept {
314314
return SYCL_HLF_MAX;
315315
}
316316

sycl/include/CL/sycl/intel/group_algorithm.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ template <typename T, typename V> struct identity<T, intel::plus<V>> {
9898
};
9999

100100
template <typename T, typename V> struct identity<T, intel::minimum<V>> {
101-
static constexpr T value = std::numeric_limits<T>::max();
101+
static constexpr T value = (std::numeric_limits<T>::max)();
102102
};
103103

104104
template <typename T, typename V> struct identity<T, intel::maximum<V>> {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// REQUIRES: windows
2+
// RUN: %clangxx -fsycl -fsycl-device-only -fsyntax-only -Xclang -verify %s -I %sycl_include
3+
// expected-no-diagnostics
4+
5+
#include "windows.h"
6+
7+
#include "CL/sycl.hpp"
8+
9+
int main() {
10+
int tmp = min(1, 4);
11+
return 0;
12+
}

0 commit comments

Comments
 (0)