sci-visualization/paraview: apply proper OpenMP 4 fix
authorMatthias Maier <tamiko@gentoo.org>
Sun, 4 Aug 2019 22:47:26 +0000 (17:47 -0500)
committerMatthias Maier <tamiko@gentoo.org>
Mon, 5 Aug 2019 00:07:38 +0000 (19:07 -0500)
Let's apply the proper upstream fix for OpenMP 4. This fixes compilation
issues with older gcc.

Closes: https://bugs.gentoo.org/689054
Package-Manager: Portage-2.3.70, Repoman-2.3.16
Signed-off-by: Matthias Maier <tamiko@gentoo.org>
sci-visualization/paraview/files/paraview-5.6.1-fix_openmp_4.0.patch

index 51562415031554658a08be2639a75d5f29dc61ba..cf21507089351ff35ef5f2de34d80566a2c0edf0 100644 (file)
@@ -1,32 +1,81 @@
-diff -urNd ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/FunctorsOpenMP.h ParaView-v5.6.0-openmp/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/FunctorsOpenMP.h
---- ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/FunctorsOpenMP.h       2018-11-07 05:05:18.000000000 +1000
-+++ ParaView-v5.6.0-openmp/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/FunctorsOpenMP.h        2019-06-28 14:04:02.292922908 +1000
-@@ -290,7 +290,7 @@
+From e30cb0872593d1614392817762b871de36e4c2f3 Mon Sep 17 00:00:00 2001
+From: Allison Vacanti <allison.vacanti@kitware.com>
+Date: Thu, 27 Jun 2019 16:04:53 -0400
+Subject: [PATCH] Fix OpenMP for gcc-9 backwards incompatibility.
+
+For details, see
+
+https://www.gnu.org/software/gcc/gcc-9/porting_to.html
+---
+ vtkm/cont/openmp/internal/FunctorsOpenMP.h     | 18 +++++++++++++++---
+ vtkm/cont/openmp/internal/ParallelSortOpenMP.h |  4 +++-
+ 2 files changed, 18 insertions(+), 4 deletions(-)
+
+diff --git ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/FunctorsOpenMP.h b/vtkm/cont/openmp/internal/FunctorsOpenMP.h
+index 27cd2bc0..0271754c 100644
+--- ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/FunctorsOpenMP.h
++++ ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/FunctorsOpenMP.h
+@@ -36,6 +36,18 @@
+ #define VTKM_OPENMP_DIRECTIVE(directive)
+ #endif // _OPENMP
++// See "OpenMP data sharing" section of
++// https://www.gnu.org/software/gcc/gcc-9/porting_to.html. OpenMP broke
++// backwards compatibility regarding const variable handling.
++// tl;dr, put all const variables accessed from openmp blocks in a
++// VTKM_OPENMP_SHARED_CONST(var1, var2, ...) macro. This will do The Right Thing
++// on all gcc.
++#if defined(__GNUC__) && __GNUC__ >= 9
++#define VTKM_OPENMP_SHARED_CONST(...) shared(__VA_ARGS__)
++#else
++#define VTKM_OPENMP_SHARED_CONST(...)
++#endif
++
+ // When defined, supported type / operator combinations will use the OpenMP
+ // reduction(...) clause. Otherwise, all reductions use the general
+ // implementation with a manual reduction once the threads complete.
+@@ -279,8 +291,8 @@ struct ReduceHelper
+     int numThreads = 0;
      std::unique_ptr<ReturnType[]> threadData;
  
-     VTKM_OPENMP_DIRECTIVE(parallel default(none) firstprivate(f)
+-    VTKM_OPENMP_DIRECTIVE(parallel default(none) firstprivate(f)
 -                            shared(data, doParallel, numThreads, threadData))
-+                            shared(data, doParallel, numThreads, threadData, numVals))
++    VTKM_OPENMP_DIRECTIVE(parallel default(none) firstprivate(f) shared(
++      data, doParallel, numThreads, threadData) VTKM_OPENMP_SHARED_CONST(numVals))
      {
  
        int tid = omp_get_thread_num();
-@@ -422,7 +422,7 @@
+@@ -412,7 +424,7 @@ void ReduceByKeyHelper(KeysInArray keysInArray,
    vtkm::Id outIdx = 0;
  
    VTKM_OPENMP_DIRECTIVE(parallel default(none) firstprivate(keysIn, valuesIn, keysOut, valuesOut, f)
 -                          shared(outIdx))
-+                          shared(outIdxnumValues))
++                          shared(outIdx) VTKM_OPENMP_SHARED_CONST(numValues))
    {
      int tid = omp_get_thread_num();
      int numThreads = omp_get_num_threads();
-diff -urNd ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/ParallelSortOpenMP.h ParaView-v5.6.0-openmp/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/ParallelSortOpenMP.h
---- ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/ParallelSortOpenMP.h   2018-11-07 05:05:18.000000000 +1000
-+++ ParaView-v5.6.0-openmp/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/ParallelSortOpenMP.h    2019-06-28 13:54:33.132064191 +1000
-@@ -133,6 +133,7 @@
+diff --git a/vtkm/cont/openmp/internal/ParallelSortOpenMP.h b/vtkm/cont/openmp/internal/ParallelSortOpenMP.h
+index e06d1762..a973eee6 100644
+--- ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/ParallelSortOpenMP.h
++++ ParaView-v5.6.0/VTK/ThirdParty/vtkm/vtk-m/vtkm/cont/openmp/internal/ParallelSortOpenMP.h
+@@ -123,7 +123,8 @@ void parallel_sort_bykey(vtkm::cont::ArrayHandle<T, StorageT>& keys,
        VTKM_OPENMP_DIRECTIVE(parallel for
                              default(none)
                              firstprivate(valuesInPortal, indexPortal, valuesOutPortal)
-+                            shared(size)
-                             schedule(static))
+-                            schedule(static))
++                            schedule(static)
++                            VTKM_OPENMP_SHARED_CONST(size))
        for (vtkm::Id i = 0; i < size; ++i)
        {
+         valuesOutPortal.Set(i, valuesInPortal.Get(indexPortal.Get(i)));
+@@ -209,6 +210,7 @@ void parallel_sort_bykey(vtkm::cont::ArrayHandle<T, StorageT>& keys,
+     VTKM_OPENMP_DIRECTIVE(parallel for
+                           default(none)
+                           firstprivate(valuesInPortal, indexPortal, valuesOutPortal)
++                          VTKM_OPENMP_SHARED_CONST(size)
+                           schedule(static))
+     for (vtkm::Id i = 0; i < size; ++i)
+     {
+-- 
+2.21.0
+