From 8e8d4df5d5c9ccdba6cc0d603843a18391ca1808 Mon Sep 17 00:00:00 2001 From: Marc Fehling Date: Tue, 20 Jun 2023 18:30:38 -0500 Subject: [PATCH] Work around an Intel18 compiler issue. --- source/dofs/dof_handler_policy.cc | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/source/dofs/dof_handler_policy.cc b/source/dofs/dof_handler_policy.cc index 8dd4147212..0760b9992d 100644 --- a/source/dofs/dof_handler_policy.cc +++ b/source/dofs/dof_handler_policy.cc @@ -3431,11 +3431,21 @@ namespace internal 0, DoFAccessorImplementation::Implementation:: MGDoFIndexProcessor(cell->level()), - [&complete](auto &stored_index, auto received_index) { - if (*received_index != numbers::invalid_dof_index) + + // Intel ICC 18 and earlier for some reason believe that + // numbers::invalid_dof_index is not a valid object + // inside the lambda function. Fix this by creating a + // local variable initialized by the global one. + // + // Intel ICC 19 and earlier have trouble with our Assert + // macros inside the lambda function. We disable the macro + // for these compilers. + [&complete, invalid_dof_index = numbers::invalid_dof_index]( + auto &stored_index, auto received_index) { + if (*received_index != invalid_dof_index) { # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900 - Assert((stored_index == (numbers::invalid_dof_index)) || + Assert((stored_index == invalid_dof_index) || (stored_index == *received_index), ExcInternalError()); # endif @@ -3530,17 +3540,23 @@ namespace internal DoFAccessorImplementation::Implementation:: DoFIndexProcessor(), - // Intel ICC 19 and earlier for some reason believe that + // Intel ICC 18 and earlier for some reason believe that // numbers::invalid_dof_index is not a valid object // inside the lambda function. Fix this by creating a // local variable initialized by the global one. + // + // Intel ICC 19 and earlier have trouble with our Assert + // macros inside the lambda function. We disable the macro + // for these compilers. [&complete, invalid_dof_index = numbers::invalid_dof_index]( auto &stored_index, const auto received_index) { if (*received_index != invalid_dof_index) { - Assert((stored_index == (invalid_dof_index)) || +# if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900 + Assert((stored_index == invalid_dof_index) || (stored_index == *received_index), ExcInternalError()); +# endif stored_index = *received_index; } else -- 2.39.5