https://github.com/eugeneepshteyn updated 
https://github.com/llvm/llvm-project/pull/172252

>From 509af02a62af56d688d2325bfffc73272933652c Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <[email protected]>
Date: Mon, 15 Dec 2025 00:56:23 -0500
Subject: [PATCH 1/3] [flang] Support -funsafe-cray-pointers

If -funsafe-cray-pointers is passed to flang driver, pass
'-mmlir -funsafe-cray-pointers' to the compiler.
---
 clang/include/clang/Options/Options.td     | 4 ++++
 clang/lib/Driver/ToolChains/Flang.cpp      | 5 +++++
 flang/test/Driver/unsafe-cray-pointers.f90 | 4 ++++
 3 files changed, 13 insertions(+)
 create mode 100644 flang/test/Driver/unsafe-cray-pointers.f90

diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index 45c5322351a17..10feb01752e90 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -7453,6 +7453,10 @@ By default, the heap is used. Allocations of polymorphic 
types
 are always done on the heap, though this may change in future releases.
   }]>;
 
+defm unsafe_cray_pointers : BoolOptionWithoutMarshalling<"f", 
"unsafe-cray-pointers",
+  PosFlag<SetTrue, [], [FlangOption, FC1Option], "Optimizations allow for 
unsafe Cray pointer usages">,
+  NegFlag<SetFalse, [], [FlangOption, FC1Option], "Optimizations don't allow 
for unsafe Cray pointer usages (default)">>;
+
 def fhermetic_module_files : Flag<["-"], "fhermetic-module-files">, 
Group<f_Group>,
   HelpText<"Emit hermetic module files (no nested USE association)">;
 
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 2f5e93d139858..5470cc6c9bf86 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -201,6 +201,11 @@ void Flang::addCodegenOptions(const ArgList &Args,
       !stackArrays->getOption().matches(options::OPT_fno_stack_arrays))
     CmdArgs.push_back("-fstack-arrays");
 
+  if (Args.hasFlag(options::OPT_funsafe_cray_pointers,
+                   options::OPT_fno_unsafe_cray_pointers, false))
+    // TODO: currently passed as MLIR option
+    CmdArgs.push_back("-mmlir -funsafe-cray-pointers"); 
+
   Args.addOptInFlag(CmdArgs, options::OPT_fexperimental_loop_fusion,
                     options::OPT_fno_experimental_loop_fusion);
 
diff --git a/flang/test/Driver/unsafe-cray-pointers.f90 
b/flang/test/Driver/unsafe-cray-pointers.f90
new file mode 100644
index 0000000000000..b67dfc6da0fe2
--- /dev/null
+++ b/flang/test/Driver/unsafe-cray-pointers.f90
@@ -0,0 +1,4 @@
+! RUN: %flang -funsafe-cray-pointers -### %s 2>&1 | FileCheck %s
+
+! CHECK: "-mmlir -funsafe-cray-pointers"
+! CHECK-NOT: "-mmlir -funsafe-cray-pointers"

>From cfb8edc4e7d593e34618094e08144447c7744bdd Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <[email protected]>
Date: Mon, 15 Dec 2025 01:01:07 -0500
Subject: [PATCH 2/3] clang-format

---
 clang/lib/Driver/ToolChains/Flang.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 5470cc6c9bf86..46977c88d723c 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -204,7 +204,7 @@ void Flang::addCodegenOptions(const ArgList &Args,
   if (Args.hasFlag(options::OPT_funsafe_cray_pointers,
                    options::OPT_fno_unsafe_cray_pointers, false))
     // TODO: currently passed as MLIR option
-    CmdArgs.push_back("-mmlir -funsafe-cray-pointers"); 
+    CmdArgs.push_back("-mmlir -funsafe-cray-pointers");
 
   Args.addOptInFlag(CmdArgs, options::OPT_fexperimental_loop_fusion,
                     options::OPT_fno_experimental_loop_fusion);

>From 9cc5fe845eed61ae1cad393ee14df5dad7867852 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <[email protected]>
Date: Mon, 15 Dec 2025 11:41:19 -0500
Subject: [PATCH 3/3] -mmlir and -funsafe-cray-pointers need to be pushed
 separately

---
 clang/lib/Driver/ToolChains/Flang.cpp      | 6 ++++--
 flang/test/Driver/unsafe-cray-pointers.f90 | 4 ++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 46977c88d723c..4e7ab2cf6edc3 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -202,9 +202,11 @@ void Flang::addCodegenOptions(const ArgList &Args,
     CmdArgs.push_back("-fstack-arrays");
 
   if (Args.hasFlag(options::OPT_funsafe_cray_pointers,
-                   options::OPT_fno_unsafe_cray_pointers, false))
+                   options::OPT_fno_unsafe_cray_pointers, false)) {
     // TODO: currently passed as MLIR option
-    CmdArgs.push_back("-mmlir -funsafe-cray-pointers");
+    CmdArgs.push_back("-mmlir");
+    CmdArgs.push_back("-funsafe-cray-pointers");
+  }
 
   Args.addOptInFlag(CmdArgs, options::OPT_fexperimental_loop_fusion,
                     options::OPT_fno_experimental_loop_fusion);
diff --git a/flang/test/Driver/unsafe-cray-pointers.f90 
b/flang/test/Driver/unsafe-cray-pointers.f90
index b67dfc6da0fe2..a375557fb1092 100644
--- a/flang/test/Driver/unsafe-cray-pointers.f90
+++ b/flang/test/Driver/unsafe-cray-pointers.f90
@@ -1,4 +1,4 @@
 ! RUN: %flang -funsafe-cray-pointers -### %s 2>&1 | FileCheck %s
 
-! CHECK: "-mmlir -funsafe-cray-pointers"
-! CHECK-NOT: "-mmlir -funsafe-cray-pointers"
+! CHECK: "-mmlir" "-funsafe-cray-pointers"
+! CHECK-NOT: "-mmlir" "-funsafe-cray-pointers"

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to