[flang-commits] [clang] [flang] [flang] Support -funsafe-cray-pointers (PR #172252)
Eugene Epshteyn via flang-commits
flang-commits at lists.llvm.org
Mon Dec 15 16:53:54 PST 2025
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 <eepshteyn at nvidia.com>
Date: Mon, 15 Dec 2025 00:56:23 -0500
Subject: [PATCH 1/4] [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 <eepshteyn at nvidia.com>
Date: Mon, 15 Dec 2025 01:01:07 -0500
Subject: [PATCH 2/4] 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 <eepshteyn at nvidia.com>
Date: Mon, 15 Dec 2025 11:41:19 -0500
Subject: [PATCH 3/4] -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"
>From b3d5e24ab0a638e0f1a67a5f1c51c41bc0e7052a Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Mon, 15 Dec 2025 19:53:28 -0500
Subject: [PATCH 4/4] Updated LIT test to properly test
-fno-unsafe-cray-pointers
---
flang/test/Driver/unsafe-cray-pointers.f90 | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/flang/test/Driver/unsafe-cray-pointers.f90 b/flang/test/Driver/unsafe-cray-pointers.f90
index a375557fb1092..bd8cafc1602f3 100644
--- a/flang/test/Driver/unsafe-cray-pointers.f90
+++ b/flang/test/Driver/unsafe-cray-pointers.f90
@@ -1,4 +1,5 @@
-! RUN: %flang -funsafe-cray-pointers -### %s 2>&1 | FileCheck %s
+! RUN: %flang -funsafe-cray-pointers -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-ON
+! RUN: %flang -fno-unsafe-cray-pointers -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
-! CHECK: "-mmlir" "-funsafe-cray-pointers"
-! CHECK-NOT: "-mmlir" "-funsafe-cray-pointers"
+! CHECK-ON: "-mmlir" "-funsafe-cray-pointers"
+! CHECK-OFF-NOT: "-mmlir" "-funsafe-cray-pointers"
More information about the flang-commits
mailing list