diff --git a/flang/lib/Evaluate/fold-integer.cpp b/flang/lib/Evaluate/fold-integer.cpp --- a/flang/lib/Evaluate/fold-integer.cpp +++ b/flang/lib/Evaluate/fold-integer.cpp @@ -798,7 +798,10 @@ "missing case to fold intrinsic function %s", name.c_str()); } return FoldElementalIntrinsic(context, std::move(funcRef), - ScalarFunc([&fptr](const Scalar &i) -> Scalar { + // `i` should be declared as `const Scalar&`. + // We declare it as `auto` to workaround an msvc bug: + // https://developercommunity.visualstudio.com/t/Regression:-nested-closure-assumes-wrong/10130223 + ScalarFunc([&fptr](const auto &i) -> Scalar { return Scalar{std::invoke(fptr, i)}; })); },