[flang-commits] [flang] bc89380 - [flang][preprocessor] fix use of bitwise-and for logical-and (#146758)

via flang-commits flang-commits at lists.llvm.org
Thu Jul 3 12:37:57 PDT 2025


Author: Andre Kuhlenschmidt
Date: 2025-07-03T12:37:54-07:00
New Revision: bc89380179c4febb8d38948fdc71b9376ee1d6af

URL: https://github.com/llvm/llvm-project/commit/bc89380179c4febb8d38948fdc71b9376ee1d6af
DIFF: https://github.com/llvm/llvm-project/commit/bc89380179c4febb8d38948fdc71b9376ee1d6af.diff

LOG: [flang][preprocessor] fix use of bitwise-and for logical-and (#146758)

The preprocessor used bitwise and to implement logical, this is a bug.

towards #146362

Added: 
    flang/test/Parser/issue-146362.2.f90

Modified: 
    flang/lib/Parser/preprocessor.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Parser/preprocessor.cpp b/flang/lib/Parser/preprocessor.cpp
index ef24c704db885..8ef9810463d5a 100644
--- a/flang/lib/Parser/preprocessor.cpp
+++ b/flang/lib/Parser/preprocessor.cpp
@@ -1276,16 +1276,20 @@ static std::int64_t ExpressionValue(const TokenSequence &token,
       left = right >= 64 ? 0 : left >> right;
       break;
     case BITAND:
-    case AND:
       left = left & right;
       break;
     case BITXOR:
       left = left ^ right;
       break;
     case BITOR:
-    case OR:
       left = left | right;
       break;
+    case AND:
+      left = left && right;
+      break;
+    case OR:
+      left = left || right;
+      break;
     case LT:
       left = -(left < right);
       break;

diff  --git a/flang/test/Parser/issue-146362.2.f90 b/flang/test/Parser/issue-146362.2.f90
new file mode 100644
index 0000000000000..d9ad8c7d547f2
--- /dev/null
+++ b/flang/test/Parser/issue-146362.2.f90
@@ -0,0 +1,18 @@
+!RUN: %flang_fc1 -cpp -fdebug-unparse %s | FileCheck %s
+PROGRAM P
+#if (1 && 2)
+  !CHECK: TRUE
+  WRITE(*,*) 'TRUE'
+#else
+  !CHECK-NOT: FALSE
+  WRITE(*,*) 'FALSE'
+#endif
+#if ((1 || 2) != 3)
+  !CHECK: TRUE
+  WRITE(*,*) 'TRUE'
+#else
+  !CHECK-NOT: FALSE
+  WRITE(*,*) 'FALSE'
+#endif
+END PROGRAM
+


        


More information about the flang-commits mailing list