Don't add EIGEN_DEVICE_FUNC to random() since ::rand is not available in Cuda.
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h
index cca968d..a681a3e 100644
--- a/Eigen/src/Core/MathFunctions.h
+++ b/Eigen/src/Core/MathFunctions.h
@@ -700,18 +700,16 @@
typedef Scalar type;
};
-template<typename Scalar> EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar& x, const Scalar& y);
-template<typename Scalar> EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random();
+template<typename Scalar> inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar& x, const Scalar& y);
+template<typename Scalar> inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random();
template<typename Scalar>
struct random_default_impl<Scalar, false, false>
{
- EIGEN_DEVICE_FUNC
static inline Scalar run(const Scalar& x, const Scalar& y)
{
return x + (y-x) * Scalar(std::rand()) / Scalar(RAND_MAX);
}
- EIGEN_DEVICE_FUNC
static inline Scalar run()
{
return run(Scalar(NumTraits<Scalar>::IsSigned ? -1 : 0), Scalar(1));
@@ -768,7 +766,6 @@
template<typename Scalar>
struct random_default_impl<Scalar, false, true>
{
- EIGEN_DEVICE_FUNC
static inline Scalar run(const Scalar& x, const Scalar& y)
{
if (y <= x)
@@ -796,7 +793,6 @@
return Scalar(ScalarX(x) + offset);
}
- EIGEN_DEVICE_FUNC
static inline Scalar run()
{
#ifdef EIGEN_MAKING_DOCS
@@ -815,13 +811,11 @@
template<typename Scalar>
struct random_default_impl<Scalar, true, false>
{
- EIGEN_DEVICE_FUNC
static inline Scalar run(const Scalar& x, const Scalar& y)
{
return Scalar(random(x.real(), y.real()),
random(x.imag(), y.imag()));
}
- EIGEN_DEVICE_FUNC
static inline Scalar run()
{
typedef typename NumTraits<Scalar>::Real RealScalar;
@@ -830,14 +824,12 @@
};
template<typename Scalar>
-EIGEN_DEVICE_FUNC
inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar& x, const Scalar& y)
{
return EIGEN_MATHFUNC_IMPL(random, Scalar)::run(x, y);
}
template<typename Scalar>
-EIGEN_DEVICE_FUNC
inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random()
{
return EIGEN_MATHFUNC_IMPL(random, Scalar)::run();
@@ -1814,7 +1806,6 @@
template<> struct random_impl<bool>
{
- EIGEN_DEVICE_FUNC
static inline bool run()
{
return random<int>(0,1)==0 ? false : true;