[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