[flang-commits] [clang] [flang] [flang][Driver] Enable bare -O flag alias for flang (PR #228483)

Kelvin Li via flang-commits flang-commits at lists.llvm.org
Sun Oct 4 19:19:09 PDT 2026


https://github.com/kkwli updated https://github.com/llvm/llvm-project/pull/228483

>From 53e7495ba9d57a86cddf68f4880174f8dc8d904e Mon Sep 17 00:00:00 2001
From: Kelvin Li <kli at ca.ibm.com>
Date: Fri, 2 Oct 2026 10:46:20 -0400
Subject: [PATCH 1/2] [flang][Driver] Enable bare -O flag alias for flang

Currently, `O_flag` (`-O` as an alias for `-O1`) in Options.td is not
visible to FlangOption. As a result, invoking flang with a bare `-O`
(without a trailing digit) is treated by the joined `-O` definition as
`-O""`, causing an error when forwarded to the linker.

Add `FlangOption` to `O_flag`'s Visibility so that `flang -O` correctly
aliases to `-O1`.

Assisted-by: IBM Bob

Resolve https://github.com/llvm/llvm-project/issues/227474
---
 clang/include/clang/Options/Options.td |  2 +-
 flang/test/Driver/lto-opt-level.f90    | 34 ++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 flang/test/Driver/lto-opt-level.f90

diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td
index 60ae84cb0af5c..244644783ddab 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -854,7 +854,7 @@ def ObjC : Flag<["-"], "ObjC">, Flags<[NoXarchOption]>,
   HelpText<"Treat source input files as Objective-C inputs">;
 def O : Joined<["-"], "O">, Group<O_Group>,
   Visibility<[ClangOption, CC1Option, FC1Option, FlangOption]>;
-def O_flag : Flag<["-"], "O">, Visibility<[ClangOption, CC1Option, FC1Option]>,
+def O_flag : Flag<["-"], "O">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
   Alias<O>, AliasArgs<["1"]>;
 def Ofast : Joined<["-"], "Ofast">, Group<O_Group>,
   Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
diff --git a/flang/test/Driver/lto-opt-level.f90 b/flang/test/Driver/lto-opt-level.f90
new file mode 100644
index 0000000000000..5ce7d4a32ea11
--- /dev/null
+++ b/flang/test/Driver/lto-opt-level.f90
@@ -0,0 +1,34 @@
+! Test that -O flags are correctly forwarded as -plugin-opt=O<n> to the linker
+! when LTO is enabled.
+
+! UNSUPPORTED: system-windows, system-solaris
+
+! --- Linux / lld ---
+
+! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O  -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O1
+! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto=thin -O -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O1
+
+! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O1 -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O1
+! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O2 -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O2
+! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O3 -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O3
+
+! LLD-O1: "-plugin-opt=O1"
+! LLD-O2: "-plugin-opt=O2"
+! LLD-O3: "-plugin-opt=O3"
+
+! --- AIX ---
+! On AIX the linker uses -bplugin_opt:-O<n> instead of -plugin-opt=O<n>.
+
+! RUN: %flang --target=powerpc64-ibm-aix -flto -O  -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O1
+! RUN: %flang --target=powerpc64-ibm-aix -flto=thin -O -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O1
+
+! RUN: %flang --target=powerpc64-ibm-aix -flto -O1 -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O1
+! RUN: %flang --target=powerpc64-ibm-aix -flto -O2 -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O2
+! RUN: %flang --target=powerpc64-ibm-aix -flto -O3 -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O3
+
+! AIX-O1: "-bplugin_opt:-O1"
+! AIX-O2: "-bplugin_opt:-O2"
+! AIX-O3: "-bplugin_opt:-O3"
+
+program test
+end program

>From dce8e9c43488f0c162b2e923a23c00dc17a2defc Mon Sep 17 00:00:00 2001
From: Kelvin Li <kli at ca.ibm.com>
Date: Sun, 4 Oct 2026 22:16:07 -0400
Subject: [PATCH 2/2] address review comments

---
 flang/test/Driver/lto-opt-level.f90 | 29 +++++++++++------------------
 1 file changed, 11 insertions(+), 18 deletions(-)

diff --git a/flang/test/Driver/lto-opt-level.f90 b/flang/test/Driver/lto-opt-level.f90
index 5ce7d4a32ea11..1fef4312ad80e 100644
--- a/flang/test/Driver/lto-opt-level.f90
+++ b/flang/test/Driver/lto-opt-level.f90
@@ -1,31 +1,24 @@
-! Test that -O flags are correctly forwarded as -plugin-opt=O<n> to the linker
-! when LTO is enabled.
+! Test that -O flags are correctly forwarded as -plugin-opt=O<n> or
+! -plugin-opt=O<n> (AIX) to the linker when LTO is enabled.
 
 ! UNSUPPORTED: system-windows, system-solaris
 
-! --- Linux / lld ---
-
-! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O  -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O1
-! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto=thin -O -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O1
-
-! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O1 -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O1
-! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O2 -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O2
-! RUN: %flang --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/basic_cross_linux_tree -fuse-ld=lld -flto -O3 -### %s 2>&1 | FileCheck %s --check-prefix=LLD-O3
-
-! LLD-O1: "-plugin-opt=O1"
-! LLD-O2: "-plugin-opt=O2"
-! LLD-O3: "-plugin-opt=O3"
-
-! --- AIX ---
-! On AIX the linker uses -bplugin_opt:-O<n> instead of -plugin-opt=O<n>.
+! RUN: %flang --target=x86_64-unknown-linux-gnu -flto -O -### %s 2>&1 | FileCheck %s --check-prefix=LNX-O1
+! RUN: %flang --target=x86_64-unknown-linux-gnu -flto=thin -O -### %s 2>&1 | FileCheck %s --check-prefix=LNX-O1
+! RUN: %flang --target=x86_64-unknown-linux-gnu -flto -O1 -### %s 2>&1 | FileCheck %s --check-prefix=LNX-O1
+! RUN: %flang --target=x86_64-unknown-linux-gnu -flto -O2 -### %s 2>&1 | FileCheck %s --check-prefix=LNX-O2
+! RUN: %flang --target=x86_64-unknown-linux-gnu -flto -O3 -### %s 2>&1 | FileCheck %s --check-prefix=LNX-O3
 
 ! RUN: %flang --target=powerpc64-ibm-aix -flto -O  -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O1
 ! RUN: %flang --target=powerpc64-ibm-aix -flto=thin -O -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O1
-
 ! RUN: %flang --target=powerpc64-ibm-aix -flto -O1 -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O1
 ! RUN: %flang --target=powerpc64-ibm-aix -flto -O2 -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O2
 ! RUN: %flang --target=powerpc64-ibm-aix -flto -O3 -### %s 2>&1 | FileCheck %s --check-prefix=AIX-O3
 
+! LNX-O1: "-plugin-opt=O1"
+! LNX-O2: "-plugin-opt=O2"
+! LNX-O3: "-plugin-opt=O3"
+
 ! AIX-O1: "-bplugin_opt:-O1"
 ! AIX-O2: "-bplugin_opt:-O2"
 ! AIX-O3: "-bplugin_opt:-O3"



More information about the flang-commits mailing list