Index: flang/lib/Evaluate/fold-real.cpp =================================================================== --- flang/lib/Evaluate/fold-real.cpp +++ flang/lib/Evaluate/fold-real.cpp @@ -257,11 +257,18 @@ byExpr->u); } } else if (name == "set_exponent") { - return FoldElementalIntrinsic(context, std::move(funcRef), - ScalarFunc( - [&](const Scalar &x, const Scalar &i) -> Scalar { - return x.SET_EXPONENT(i.ToInt64()); - })); + if (const auto *iExpr{UnwrapExpr>(args[1])}) { + return common::visit( + [&](const auto &iVal) { + using TY = ResultType; + return FoldElementalIntrinsic(context, std::move(funcRef), + ScalarFunc( + [&](const Scalar &x, const Scalar &i) -> Scalar { + return x.SET_EXPONENT(i.ToInt64()); + })); + }, + iExpr->u); + } } else if (name == "sign") { return FoldElementalIntrinsic( context, std::move(funcRef), &Scalar::SIGN);