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
