Index: flang/lib/Evaluate/fold-real.cpp =================================================================== --- flang/lib/Evaluate/fold-real.cpp +++ flang/lib/Evaluate/fold-real.cpp @@ -166,8 +166,13 @@ CHECK(args.size() == 2); return FoldElementalIntrinsic(context, std::move(funcRef), ScalarFunc( - [](const Scalar &x, const Scalar &y) -> Scalar { - return x.HYPOT(y).value; + [&](const Scalar &x, const Scalar &y) -> Scalar { + ValueWithRealFlags> result{x.HYPOT(y)}; + if (result.flags.test(RealFlag::Overflow)) { + context.messages().Say( + "HYPOT intrinsic folding overflow"_warn_en_US); + } + return result.value; })); } else if (name == "max") { return FoldMINorMAX(context, std::move(funcRef), Ordering::Greater); Index: flang/test/Evaluate/errors01.f90 =================================================================== --- flang/test/Evaluate/errors01.f90 +++ flang/test/Evaluate/errors01.f90 @@ -163,6 +163,8 @@ real, parameter :: bad3 = dim(huge(1.),-.5*huge(1.)) !CHECK: warning: DIM intrinsic folding overflow integer, parameter :: bad4 = dim(huge(1),-1) + !CHECK: warning: HYPOT intrinsic folding overflow + real, parameter :: bad5 = hypot(huge(0.), huge(0.)) !CHECK: warning: overflow on REAL(8) to REAL(4) conversion x = 1.D40 end subroutine