[flang-commits] [flang] [FLANG] Fix for issue #132646 (PR #150007)
via flang-commits
flang-commits at lists.llvm.org
Tue Jul 22 05:17:43 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Aadesh Premkumar (aadeshps-mcw)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/150007.diff
3 Files Affected:
- (modified) flang/lib/Evaluate/intrinsics.cpp (+9-6)
- (added) flang/test/Evaluate/bug132646.f90 (+24)
- (modified) flang/test/Evaluate/folding04.f90 (+1-3)
``````````diff
diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp
index e802915945e26..466bbed93951f 100644
--- a/flang/lib/Evaluate/intrinsics.cpp
+++ b/flang/lib/Evaluate/intrinsics.cpp
@@ -1336,9 +1336,9 @@ static const SpecificIntrinsicInterface specificIntrinsicFunction[]{
{{"log", {{"x", DefaultReal}}, DefaultReal}},
{{"log10", {{"x", DefaultReal}}, DefaultReal}},
{{"max0",
- {{"a1", DefaultInt}, {"a2", DefaultInt},
- {"a3", DefaultInt, Rank::elemental, Optionality::repeats}},
- DefaultInt},
+ {{"a1", OperandInt}, {"a2", OperandInt},
+ {"a3", OperandInt, Rank::elemental, Optionality::repeats}},
+ OperandInt},
"max", true, true},
{{"max1",
{{"a1", DefaultReal}, {"a2", DefaultReal},
@@ -1346,9 +1346,9 @@ static const SpecificIntrinsicInterface specificIntrinsicFunction[]{
DefaultInt},
"max", true, true},
{{"min0",
- {{"a1", DefaultInt}, {"a2", DefaultInt},
- {"a3", DefaultInt, Rank::elemental, Optionality::repeats}},
- DefaultInt},
+ {{"a1", OperandInt}, {"a2", OperandInt},
+ {"a3", OperandInt, Rank::elemental, Optionality::repeats}},
+ OperandInt},
"min", true, true},
{{"min1",
{{"a1", DefaultReal}, {"a2", DefaultReal},
@@ -3454,6 +3454,9 @@ static DynamicType GetReturnType(const SpecificIntrinsicInterface &interface,
case KindCode::defaultRealKind:
category = TypeCategory::Real;
break;
+ case KindCode::operand:
+ category = TypeCategory::Integer;
+ break;
default:
CRASH_NO_CASE;
}
diff --git a/flang/test/Evaluate/bug132646.f90 b/flang/test/Evaluate/bug132646.f90
new file mode 100644
index 0000000000000..3ffa95589e3c8
--- /dev/null
+++ b/flang/test/Evaluate/bug132646.f90
@@ -0,0 +1,24 @@
+! RUN: %flang %s -o %t && %t | FileCheck %s
+
+program main
+ print *,kind(max0(1_1,2_1))
+ print *,kind(max0(1_2,2_2))
+ print *,kind(max0(1_4,2_4))
+ print *,kind(max0(1_8,2_8))
+
+ print *,kind(min0(1_1,2_1))
+ print *,kind(min0(1_2,2_2))
+ print *,kind(min0(1_4,2_4))
+ print *,kind(min0(1_8,2_8))
+end program main
+
+! CHECK: 1
+! CHECK-NEXT: 2
+! CHECK-NEXT: 4
+! CHECK-NEXT: 8
+
+! CHECK-NEXT: 1
+! CHECK-NEXT: 2
+! CHECK-NEXT: 4
+! CHECK-NEXT: 8
+
diff --git a/flang/test/Evaluate/folding04.f90 b/flang/test/Evaluate/folding04.f90
index 027db20f608b2..c5d5b5ac6c99a 100644
--- a/flang/test/Evaluate/folding04.f90
+++ b/flang/test/Evaluate/folding04.f90
@@ -86,9 +86,7 @@ module specific_extremums
! specified for f18 (converting the result).
integer(8), parameter :: max_i32_8 = 2_8**31-1
integer, parameter :: expected_min0 = int(min(max_i32_8, 2_8*max_i32_8), 4)
- !WARN: portability: Argument types do not match specific intrinsic 'min0' requirements; using 'min' generic instead and converting the result to INTEGER(4) if needed [-Wuse-generic-intrinsic-when-specific-doesnt-match]
- integer, parameter :: result_min0 = min0(max_i32_8, 2_8*max_i32_8)
- ! result_min0 would be -2 if arguments were converted to default integer.
+ integer(8), parameter :: result_min0 = min0(max_i32_8, 2_8*max_i32_8)
logical, parameter :: test_min0 = expected_min0 .EQ. result_min0
real, parameter :: expected_amax0 = real(max(max_i32_8, 2_8*max_i32_8), 4)
``````````
</details>
https://github.com/llvm/llvm-project/pull/150007
More information about the flang-commits
mailing list