Error from vtkm in ArrayPortalToIterators.h when building with ParaView superbuild for ParaView 5.8.0-RC1

Hello,

I am getting the following errors from vtkm when building ParaView superbuild for ParaView 5.8.0-RC1
with gcc 4.8.5 on RHEL 7.7.

There seems to have been an attempt to fix this error in ArrayPortalToIterators.h

Since the last change in the git history is

ArrayPortalToIterators now compiles with GCC-4.X

But it is still throwing the following error for me.

/home/joeh/PV/Build_5.8.0-RC1_mesa/superbuild/paraview/src/VTK/ThirdParty/vtkm/vtkvtkm/vtk-m/vtkm/cont/ArrayPortalToIterators.h:90:34: error: using invalid field ‘vtkm::cont::ArrayPortalToIterators<PortalType, void>::Begin’
/home/joeh/PV/Build_5.8.0-RC1_mesa/superbuild/paraview/src/VTK/ThirdParty/vtkm/vtkvtkm/vtk-m/vtkm/cont/ArrayPortalToIterators.h:90:34: error: ‘const class vtkm::ArrayPortalRef<vtkm::Vec<float, 3> >’ has no member named ‘GetIteratorBegin’
/home/joeh/PV/Build_5.8.0-RC1_mesa/superbuild/paraview/src/VTK/ThirdParty/vtkm/vtkvtkm/vtk-m/vtkm/cont/ArrayPortalToIterators.h:90:34: error: using invalid field ‘vtkm::cont::ArrayPortalToIterators<PortalType, void>::End’
/home/joeh/PV/Build_5.8.0-RC1_mesa/superbuild/paraview/src/VTK/ThirdParty/vtkm/vtkvtkm/vtk-m/vtkm/cont/ArrayPortalToIterators.h:90:34: error: ‘const class vtkm::ArrayPortalRef<vtkm::Vec<float, 3> >’ has no member named ‘GetIteratorEnd’

Thanks,

Joe Hennessey

@robert.maynard Are you familiar with this error?

I believe this issue was resolved with VTK-m MR #1934

I expect that ParaView needs to update to a newer version VTK that has these changes merged in.

VTK itself does not have those VTK-m changes yet. Is there any reason to not update VTK-m in VTK?

Robert,

I think that change may have been merged in, and that it still does not work properly.

This is the last commit

ArrayPortalToIterators now compiles with GCC-4.X

Robert Maynard authored 3 weeks ago

83d4d4e4

Changes…

namespace vtkmstd
{

/// Implementation of std::void_t (C++17):
/// Allows for specialization of class templates based on members of template
/// parameters.
#if defined(VTKM_GCC) && (GNUC < 5)
// Due to a defect in the wording (CWG 1558) unused parameters in alias templates
// were not guaranteed to ensure SFINAE, and therefore would consider everything
// to match the ‘true’ side. For VTK-m the only known compiler that implemented
// this defect is GCC < 5.
template <class… T>
struct void_pack
{
using type = void;
};
template <class… T>
using void_t = typename void_pack<T…>::type;
#else
template <typename…>
using void_t = void;
#endif

} // end namespace vtkmstd

Thanks,

Joe

@joeh I will try to reproduce. I have access to gcc-4.8.5 on RHEL 7.6

I can’t think of a reason why we can’t update VTK-m in VTK.

@joeh Looking at VTK and I see that it currently is using a version of VTK-m that doesn’t have my GCC 4.8.X fix included. I looked at https://gitlab.kitware.com/vtk/vtk/tree/master/ThirdParty/vtkm/vtkvtkm and see that it is using SHA1 b3082721 which is before SHA1 83d4d4e4. I have verified that with these changes VTK does compile with gcc-4.8.5 / RHE 7.6.

The next steps are:

  1. Update VTK to use a newer version of VTK-m. You can track the progress of this at: https://gitlab.kitware.com/vtk/vtk/merge_requests/6393

  2. Update ParaView to use this newer version of VTK