File tree Expand file tree Collapse file tree 2 files changed +12
-2
lines changed Expand file tree Collapse file tree 2 files changed +12
-2
lines changed Original file line number Diff line number Diff line change @@ -425,8 +425,14 @@ Expr<Type<TypeCategory::Real, KIND>> FoldIntrinsicFunction(
425425 [](const Scalar<T> &x) -> Scalar<T> { return x.SPACING (); }));
426426 } else if (name == " sqrt" ) {
427427 return FoldElementalIntrinsic<T, T>(context, std::move (funcRef),
428- ScalarFunc<T, T>(
429- [](const Scalar<T> &x) -> Scalar<T> { return x.SQRT ().value ; }));
428+ ScalarFunc<T, T>([&context](const Scalar<T> &x) -> Scalar<T> {
429+ ValueWithRealFlags<Scalar<T>> result{x.SQRT ()};
430+ if (result.flags .test (RealFlag::InvalidArgument)) {
431+ context.Warn (common::UsageWarning::FoldingValueChecks,
432+ " Invalid argument to SQRT()" _warn_en_US);
433+ }
434+ return result.value ;
435+ }));
430436 } else if (name == " sum" ) {
431437 return FoldSum<T>(context, std::move (funcRef));
432438 } else if (name == " tiny" ) {
Original file line number Diff line number Diff line change @@ -83,6 +83,8 @@ module real_tests
8383 real (4 ), parameter :: r4 _pinf = 1._4 / 0._4
8484 ! WARN: warning: division by zero [-Wfolding-exception]
8585 real (4 ), parameter :: r4 _ninf = - 1._4 / 0._4
86+ ! WARN: warning: Invalid argument to SQRT() [-Wfolding-value-checks]
87+ real (4 ), parameter :: r4 _sqrtneg = sqrt (- 1._4 )
8688
8789 logical , parameter :: test_r4 _nan_parentheses1 = .NOT. (((r4 _nan)).EQ. r4 _nan)
8890 logical , parameter :: test_r4 _nan_parentheses2 = .NOT. (((r4 _nan)).LT. r4 _nan)
@@ -155,6 +157,8 @@ module real_tests
155157 TEST_ISNAN(r4 _nan_add5)
156158 real (4 ), parameter :: r4 _nan_add6 = r4 _nan + r4 _nan
157159 TEST_ISNAN(r4 _nan_add6)
160+ real (4 ), parameter :: r4 _nan_sqrt = sqrt (r4 _nan)
161+ TEST_ISNAN(r4 _nan_sqrt)
158162
159163 ! WARN: warning: overflow on multiplication [-Wfolding-exception]
160164 logical , parameter :: test_inf_r4 _mult1 = (1.5_4 * r4 _pmax).eq. (r4 _pinf)
You can’t perform that action at this time.
0 commit comments