commit:     2a69391373153bcb32284be0a12d38493b24bddd
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 12 15:53:09 2020 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Mon Oct 12 16:15:20 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2a693913

dev-cpp/eigen: Backport fix for revdeps build failures

Reported-by: Anton Kochkov <anton.kochkov <AT> gmail.com>
Thanks-to: Sam James <sam <AT> gentoo.org>
Closes: https://bugs.gentoo.org/747949
Package-Manager: Portage-3.0.8, Repoman-3.0.1
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../{eigen-3.3.8.ebuild => eigen-3.3.8-r1.ebuild}  |  5 +-
 ...error-counting-in-openmp-parallelize_gemm.patch | 64 ++++++++++++++++++++++
 2 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/dev-cpp/eigen/eigen-3.3.8.ebuild 
b/dev-cpp/eigen/eigen-3.3.8-r1.ebuild
similarity index 94%
rename from dev-cpp/eigen/eigen-3.3.8.ebuild
rename to dev-cpp/eigen/eigen-3.3.8-r1.ebuild
index fbc5c610b0e..bddd6bddf84 100644
--- a/dev-cpp/eigen/eigen-3.3.8.ebuild
+++ b/dev-cpp/eigen/eigen-3.3.8-r1.ebuild
@@ -50,7 +50,10 @@ DEPEND="
 # METIS-5
 # GOOGLEHASH
 
-PATCHES=( "${FILESDIR}"/${PN}-3.3.7-gentoo-cmake.patch )
+PATCHES=(
+       "${FILESDIR}"/${PN}-3.3.7-gentoo-cmake.patch
+       "${FILESDIR}"/${P}-no-error-counting-in-openmp-parallelize_gemm.patch
+)
 
 src_prepare() {
        cmake_src_prepare

diff --git 
a/dev-cpp/eigen/files/eigen-3.3.8-no-error-counting-in-openmp-parallelize_gemm.patch
 
b/dev-cpp/eigen/files/eigen-3.3.8-no-error-counting-in-openmp-parallelize_gemm.patch
new file mode 100644
index 00000000000..556474e8b31
--- /dev/null
+++ 
b/dev-cpp/eigen/files/eigen-3.3.8-no-error-counting-in-openmp-parallelize_gemm.patch
@@ -0,0 +1,64 @@
+From ef3cc72cb65e2d500459c178c63e349bacfa834f Mon Sep 17 00:00:00 2001
+From: Luke Peterson <hazelnu...@gmail.com>
+Date: Thu, 8 Oct 2020 12:16:53 -0700
+Subject: [PATCH] Remove error counting in OpenMP parallelize_gemm
+
+This resolves a compilation error associated with
+Eigen::eigen_assert_exception. It also eliminates the counting of
+exceptions that may occur in the OpenMP parallel section. If an
+unhandled exception occurs in this section, the behavior is non-conforming
+according to the OpenMP specification.
+---
+ Eigen/src/Core/products/Parallelizer.h | 14 +++++---------
+ test/CMakeLists.txt                    |  2 +-
+ 2 files changed, 6 insertions(+), 10 deletions(-)
+
+diff --git a/Eigen/src/Core/products/Parallelizer.h 
b/Eigen/src/Core/products/Parallelizer.h
+index 67b2442b5..a3cc05b77 100644
+--- a/Eigen/src/Core/products/Parallelizer.h
++++ b/Eigen/src/Core/products/Parallelizer.h
+@@ -132,8 +132,7 @@ void parallelize_gemm(const Functor& func, Index rows, 
Index cols, Index depth,
+ 
+   
ei_declare_aligned_stack_constructed_variable(GemmParallelInfo<Index>,info,threads,0);
+ 
+-  int errorCount = 0;
+-  #pragma omp parallel num_threads(threads) reduction(+: errorCount)
++  #pragma omp parallel num_threads(threads)
+   {
+     Index i = omp_get_thread_num();
+     // Note that the actual number of threads might be lower than the number 
of request ones.
+@@ -152,14 +151,11 @@ void parallelize_gemm(const Functor& func, Index rows, 
Index cols, Index depth,
+     info[i].lhs_start = r0;
+     info[i].lhs_length = actualBlockRows;
+ 
+-    EIGEN_TRY {
+-      if(transpose) func(c0, actualBlockCols, 0, rows, info);
+-      else          func(0, rows, c0, actualBlockCols, info);
+-    } EIGEN_CATCH(...) {
+-      ++errorCount;
+-    }
++    if(transpose)
++      func(c0, actualBlockCols, 0, rows, info);
++    else
++      func(0, rows, c0, actualBlockCols, info);
+   }
+-  if (errorCount) EIGEN_THROW_X(Eigen::eigen_assert_exception());
+ #endif
+ }
+ 
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+index 0747aa6cb..b02577780 100644
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -163,7 +163,7 @@ ei_add_test(constructor)
+ ei_add_test(linearstructure)
+ ei_add_test(integer_types)
+ ei_add_test(unalignedcount)
+-if(NOT EIGEN_TEST_NO_EXCEPTIONS)
++if(NOT EIGEN_TEST_NO_EXCEPTIONS AND NOT EIGEN_TEST_OPENMP)
+   ei_add_test(exceptions)
+ endif()
+ ei_add_test(redux)
+-- 
+GitLab
+

Reply via email to