From: Marc Fehling Date: Tue, 20 Jun 2023 23:30:38 +0000 (-0500) Subject: Work around an Intel18 compiler issue. X-Git-Tag: v9.5.0-rc1~66^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F15390%2Fhead;p=dealii.git Work around an Intel18 compiler issue. --- 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