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 <[email protected]> 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 <[email protected]> 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" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
