aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Antonio Sanchez <cantonios@google.com>2021-03-11 11:23:00 -0800
committerGravatar Rasmus Munk Larsen <rmlarsen@google.com>2021-03-15 18:42:04 +0000
commitd24f9f9b5523d3ace069fe0b271f5b694f37153a (patch)
tree9d4bb4779e060b78ffdf730f38aac800ead9ed92 /test
parent14487ed14e7e04cf1d84681274ae9d36fda23a39 (diff)
Fix NVCC+ICC issues.
NVCC does not understand `__forceinline`, so we need to use `inline` when compiling for GPU. ICC specializes `std::complex` operators for `float` and `double` by default, which cannot be used on device and conflict with Eigen's workaround in CUDA/Complex.h. This can be prevented by defining `_OVERRIDE_COMPLEX_SPECIALIZATION_` before including `<complex>`. Added this define to the tests and to `Eigen/Core`, but this will not work if the user includes `<complex>` before `<Eigen/Core>`. ICC also seems to generate a duplicate `Map` symbol in `PlainObjectBase`: ``` error: "Map" has already been declared in the current scope static ConstMapType Map(const Scalar *data) ``` I tracked this down to `friend class Eigen::Map`. Putting the `friend` statements at the bottom of the class seems to resolve this issue. Fixes #2180
Diffstat (limited to 'test')
-rw-r--r--test/main.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/test/main.h b/test/main.h
index cf061730f..3e80c9f7d 100644
--- a/test/main.h
+++ b/test/main.h
@@ -40,6 +40,8 @@
// definitions.
#include <limits>
#include <algorithm>
+// Disable ICC's std::complex operator specializations so we can use our own.
+#define _OVERRIDE_COMPLEX_SPECIALIZATION_ 1
#include <complex>
#include <deque>
#include <queue>