diff --git a/flang/lib/Evaluate/fold-real.cpp b/flang/lib/Evaluate/fold-real.cpp index 0d9de1346bd44..4ae8cc207d1c2 100644 --- a/flang/lib/Evaluate/fold-real.cpp +++ b/flang/lib/Evaluate/fold-real.cpp @@ -127,7 +127,7 @@ Expr> FoldIntrinsicFunction( } else if (name == "product") { auto one{Scalar::FromInteger(value::Integer<8>{1}).value}; return FoldProduct(context, std::move(funcRef), one); - } else if (name == "real") { + } else if (name == "real" || name == "dble") { if (auto *expr{args[0].value().UnwrapExpr()}) { return ToReal(context, std::move(*expr)); } diff --git a/flang/test/Evaluate/fold-dble.f90 b/flang/test/Evaluate/fold-dble.f90 new file mode 100644 index 0000000000000..523fa8c520672 --- /dev/null +++ b/flang/test/Evaluate/fold-dble.f90 @@ -0,0 +1,10 @@ +! RUN: %python %S/test_folding.py %s %flang_fc1 +! Tests folding of DBLE() +module ft_data + integer nx, ny, nz + parameter (nx=64, ny=64, nz=64, maxdim=64) + double precision ntotal_f + parameter (ntotal_f = dble(nx)*ny*nz) + logical, parameter :: test_dble_1 = ntotal_f == real(nx*ny*nz, kind(0.0D0)) + logical, parameter :: test_dble_2 = kind(dble(nx)) == kind(0.0D0) +end module ft_data