awarzynski created this revision.
awarzynski added a reviewer: bogner.
Herald added a reviewer: sscalpone.
Herald added projects: Flang, All.
awarzynski requested review of this revision.
Herald added subscribers: cfe-commits, wangpc, jplehr, sstefan1, jdoerfert, 
MaskRay.
Herald added a reviewer: jdoerfert.
Herald added a project: clang.

Prior to D157151 <https://reviews.llvm.org/D157151>, there was no mechanism to 
"disable" unsupported Clang
options in Flang. While the "help" text (`flang-new -help`) was indeed
configured not to display such options, the Flang compiler driver would
happily consume such options and only issue a warning when there was no
logic to parse it:

  flang-new -fno-experimental-relative-c++-abi-vtables file.f90
  flang-new: warning: argument unused during compilation: 
'-fno-experimental-relative-c++-abi-vtables'

D157151 <https://reviews.llvm.org/D157151> introduces visibility flags. In 
particular, all Clang options
gain a visibility flag (`Default`) that can be excluded when in Flang
driver mode. This way the above invocation will lead to:

  flang-new: error: unknown argument 
'-fno-experimental-relative-c++-abi-vtables'; did you mean '-Xclang 
-fno-experimental-relative-c++-abi-vtables'?

This won't work unless all options/flags supported by Flang have their
visibility flags updated accordingly, hence the changes in Options.td.
Moving forward, this change will allow Flang better control over the
supported options.

Depends on D157151 <https://reviews.llvm.org/D157151>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D157837

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/Driver.cpp
  flang/test/Driver/driver-help-hidden.f90
  flang/test/Driver/driver-help.f90
  flang/test/Driver/fast_math.f90
  flang/test/Driver/target-cpu-features.f90

Index: flang/test/Driver/target-cpu-features.f90
===================================================================
--- flang/test/Driver/target-cpu-features.f90
+++ flang/test/Driver/target-cpu-features.f90
@@ -11,7 +11,7 @@
 ! RUN: | FileCheck %s -check-prefix=CHECK-ARMV9
 
 ! Negative test. ARM cpu with x86 target.
-! RUN: not %flang --target=x86_64-linux-gnu -mcpu=cortex-a57 -c %s -### 2>&1 \
+! RUN: %flang --target=x86_64-linux-gnu -mcpu=cortex-a57 -c %s -### 2>&1 \
 ! RUN: | FileCheck %s -check-prefix=CHECK-NO-A57
 
 ! RUN: %flang --target=x86_64-linux-gnu -march=skylake -c %s -### 2>&1 \
Index: flang/test/Driver/fast_math.f90
===================================================================
--- flang/test/Driver/fast_math.f90
+++ flang/test/Driver/fast_math.f90
@@ -70,7 +70,7 @@
 ! UNSUPPORTED: system-windows
 ! UNSUPPORTED: target=powerpc{{.*}}
 ! RUN: %flang -ffast-math -### %s -o %t 2>&1 \
-! RUN:           --target=x86_64-unknown-linux -no-pie --gcc-toolchain="" \
+! RUN:           --target=x86_64-unknown-linux -no-pie \
 ! RUN:           --sysroot=%S/../../../clang/test/Driver/Inputs/basic_linux_tree \
 ! RUN:     | FileCheck --check-prefix=CHECK-CRT %s
 ! CHECK-CRT: {{crtbegin.?\.o}}
Index: flang/test/Driver/driver-help.f90
===================================================================
--- flang/test/Driver/driver-help.f90
+++ flang/test/Driver/driver-help.f90
@@ -14,224 +14,242 @@
 ! HELP:USAGE: flang
 ! HELP-EMPTY:
 ! HELP-NEXT:OPTIONS:
-! HELP-NEXT: -###                   Print (but do not run) the commands to run for this compilation
-! HELP-NEXT: -cpp                   Enable predefined and command line preprocessor macros
-! HELP-NEXT: -c                     Only run preprocess, compile, and assemble steps
-! HELP-NEXT: -D <macro>=<value>     Define <macro> to <value> (or 1 if <value> omitted)
-! HELP-NEXT: -emit-llvm             Use the LLVM representation for assembler and object files
-! HELP-NEXT: -E                     Only run the preprocessor
+! HELP-NEXT: -###                    Print (but do not run) the commands to run for this compilation
+! HELP-NEXT: -cpp                    Enable predefined and command line preprocessor macros
+! HELP-NEXT: -c                      Only run preprocess, compile, and assemble steps
+! HELP-NEXT: -D <macro>=<value>      Define <macro> to <value> (or 1 if <value> omitted)
+! HELP-NEXT: -emit-llvm              Use the LLVM representation for assembler and object files
+! HELP-NEXT: -E                      Only run the preprocessor
 ! HELP-NEXT: -falternative-parameter-statement
-! HELP-NEXT: Enable the old style PARAMETER statement
-! HELP-NEXT: -fapprox-func          Allow certain math function calls to be replaced with an approximately equivalent calculation
-! HELP-NEXT: -fbackslash            Specify that backslash in string introduces an escape character
-! HELP-NEXT: -fcolor-diagnostics    Enable colors in diagnostics
-! HELP-NEXT: -fconvert=<value>      Set endian conversion of data for unformatted files
-! HELP-NEXT: -fdefault-double-8     Set the default double precision kind to an 8 byte wide type
-! HELP-NEXT: -fdefault-integer-8    Set the default integer and logical kind to an 8 byte wide type
-! HELP-NEXT: -fdefault-real-8       Set the default real kind to an 8 byte wide type
-! HELP-NEXT: -ffast-math            Allow aggressive, lossy floating-point optimizations
-! HELP-NEXT: -ffixed-form           Process source files in fixed form
+! HELP-NEXT:                         Enable the old style PARAMETER statement
+! HELP-NEXT: -fapprox-func           Allow certain math function calls to be replaced with an approximately equivalent calculation
+! HELP-NEXT: -fbackslash             Specify that backslash in string introduces an escape character
+! HELP-NEXT: -fcolor-diagnostics     Enable colors in diagnostics
+! HELP-NEXT: -fconvert=<value>       Set endian conversion of data for unformatted files
+! HELP-NEXT: -fdefault-double-8      Set the default double precision kind to an 8 byte wide type
+! HELP-NEXT: -fdefault-integer-8     Set the default integer and logical kind to an 8 byte wide type
+! HELP-NEXT: -fdefault-real-8        Set the default real kind to an 8 byte wide type
+! HELP-NEXT: -ffast-math             Allow aggressive, lossy floating-point optimizations
+! HELP-NEXT: -ffixed-form            Process source files in fixed form
 ! HELP-NEXT: -ffixed-line-length=<value>
-! HELP-NEXT: Use <value> as character line width in fixed mode
-! HELP-NEXT: -ffp-contract=<value> Form fused FP ops (e.g. FMAs)
-! HELP-NEXT: -ffree-form            Process source files in free form
-! HELP-NEXT: -fimplicit-none        No implicit typing allowed unless overridden by IMPLICIT statements
+! HELP-NEXT:                         Use <value> as character line width in fixed mode
+! HELP-NEXT: -ffp-contract=<value>   Form fused FP ops (e.g. FMAs)
+! HELP-NEXT: -ffree-form             Process source files in free form
+! HELP-NEXT: -fhonor-infinities      Specify that floating-point optimizations are not allowed that assume arguments and results are not +-inf.
+! HELP-NEXT: -fhonor-nans            Specify that floating-point optimizations are not allowed that assume arguments and results are not NANs.
+! HELP-NEXT: -fimplicit-none         No implicit typing allowed unless overridden by IMPLICIT statements
 ! HELP-NEXT: -finput-charset=<value> Specify the default character set for source files
 ! HELP-NEXT: -fintrinsic-modules-path <dir>
-! HELP-NEXT:                        Specify where to find the compiled intrinsic modules
-! HELP-NEXT: -flarge-sizes          Use INTEGER(KIND=8) for the result type in size-related intrinsics
+! HELP-NEXT:                         Specify where to find the compiled intrinsic modules
+! HELP-NEXT: -flarge-sizes           Use INTEGER(KIND=8) for the result type in size-related intrinsics
 ! HELP-NEXT: -flogical-abbreviations Enable logical abbreviations
-! HELP-NEXT: -flto=<value> Set LTO mode
-! HELP-NEXT: -flto Enable LTO in 'full' mode
-! HELP-NEXT: -fno-automatic         Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE
+! HELP-NEXT: -flto=auto              Enable LTO in 'full' mode
+! HELP-NEXT: -flto=jobserver         Enable LTO in 'full' mode
+! HELP-NEXT: -flto=<value>           Set LTO mode
+! HELP-NEXT: -flto                   Enable LTO in 'full' mode
+! HELP-NEXT: -fno-automatic          Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE
 ! HELP-NEXT: -fno-color-diagnostics  Disable colors in diagnostics
 ! HELP-NEXT: -fno-integrated-as      Disable the integrated assembler
+! HELP-NEXT: -fno-lto                Disable LTO mode (default)
 ! HELP-NEXT: -fno-ppc-native-vector-element-order
-! HELP-NEXT:                        Specifies PowerPC non-native vector element order
-! HELP-NEXT: -fno-signed-zeros      Allow optimizations that ignore the sign of floating point zeros
-! HELP-NEXT: -fno-stack-arrays      Allocate array temporaries on the heap (default)
+! HELP-NEXT:                         Specifies PowerPC non-native vector element order
+! HELP-NEXT: -fno-signed-zeros       Allow optimizations that ignore the sign of floating point zeros
+! HELP-NEXT: -fno-stack-arrays       Allocate array temporaries on the heap (default)
 ! HELP-NEXT: -fno-version-loops-for-stride
-! HELP-NEXT:                        Do not create unit-strided loops (default)
-! HELP-NEXT: -fopenacc              Enable OpenACC
+! HELP-NEXT:                         Do not create unit-strided loops (default)
+! HELP-NEXT: -fopenacc               Enable OpenACC
+! HELP-NEXT: -fopenmp-target-debug   Enable debugging in the OpenMP offloading device RTL
+! HELP-NEXT: -fopenmp-targets=<value>
+! HELP-NEXT:                         Specify comma-separated list of triples OpenMP offloading targets to be supported
 ! HELP-NEXT: -fopenmp-version=<value>
-! HELP-NEXT:                        Set OpenMP version (e.g. 45 for OpenMP 4.5, 50 for OpenMP 5.0). Default value is 50 for Clang and 11 for Flang
-! HELP-NEXT: -fopenmp               Parse OpenMP pragmas and generate parallel code.
+! HELP-NEXT:                         Set OpenMP version (e.g. 45 for OpenMP 4.5, 50 for OpenMP 5.0). Default value is 50 for Clang and 11 for Flang
+! HELP-NEXT: -fopenmp                Parse OpenMP pragmas and generate parallel code.
 ! HELP-NEXT: -foptimization-record-file=<file>
-! HELP-NEXT:                        Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.
+! HELP-NEXT:                         Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.
 ! HELP-NEXT: -foptimization-record-passes=<regex>
-! HELP-NEXT:                        Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)
+! HELP-NEXT:                         Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)
 ! HELP-NEXT: -fpass-plugin=<dsopath> Load pass plugin from a dynamic shared object file (only with new pass manager).
 ! HELP-NEXT: -fppc-native-vector-element-order
-! HELP-NEXT:                        Specifies PowerPC native vector element order
-! HELP-NEXT: -freciprocal-math      Allow division operations to be reassociated
+! HELP-NEXT:                         Specifies PowerPC native vector element order (default)
+! HELP-NEXT: -freciprocal-math       Allow division operations to be reassociated
 ! HELP-NEXT: -fsave-optimization-record=<format>
-! HELP-NEXT:                        Generate an optimization record file in a specific format
+! HELP-NEXT:                         Generate an optimization record file in a specific format
 ! HELP-NEXT: -fsave-optimization-record
-! HELP-NEXT:                        Generate a YAML optimization record file
-! HELP-NEXT: -fstack-arrays         Attempt to allocate array temporaries on the stack, no matter their size
-! HELP-NEXT: -fsyntax-only          Run the preprocessor, parser and semantic analysis stages
-! HELP-NEXT: -funderscoring         Appends one trailing underscore to external names
+! HELP-NEXT:                         Generate a YAML optimization record file
+! HELP-NEXT: -fstack-arrays          Attempt to allocate array temporaries on the stack, no matter their size
+! HELP-NEXT: -fsyntax-only           Run the preprocessor, parser and semantic analysis stages
+! HELP-NEXT: -funderscoring          Appends one trailing underscore to external names
 ! HELP-NEXT: -fversion-loops-for-stride
-! HELP-NEXT:                        Create unit-strided versions of loops
-! HELP-NEXT: -fxor-operator         Enable .XOR. as a synonym of .NEQV.
-! HELP-NEXT: -gline-tables-only     Emit debug line number tables only
-! HELP-NEXT: -g                     Generate source-level debug information
-! HELP-NEXT: -help                  Display available options
-! HELP-NEXT: -I <dir>               Add directory to the end of the list of include search paths
-! HELP-NEXT: -mllvm=<arg>           Alias for -mllvm
-! HELP-NEXT: -mllvm <value>         Additional arguments to forward to LLVM's option processing
-! HELP-NEXT: -mmlir <value>         Additional arguments to forward to MLIR's option processing
-! HELP-NEXT: -module-dir <dir>      Put MODULE files in <dir>
-! HELP-NEXT: -nocpp                 Disable predefined and command line preprocessor macros
+! HELP-NEXT:                         Create unit-strided versions of loops
+! HELP-NEXT: -fxor-operator          Enable .XOR. as a synonym of .NEQV.
+! HELP-NEXT: -gline-directives-only  Emit debug line info directives only
+! HELP-NEXT: -gline-tables-only      Emit debug line number tables only
+! HELP-NEXT: -g                      Generate source-level debug information
+! HELP-NEXT: --help-hidden           Display help for hidden options
+! HELP-NEXT: -help                   Display available options
+! HELP-NEXT: -I <dir>                Add directory to the end of the list of include search paths
+! HELP-NEXT: -march=<value>          For a list of available architectures for the target use '-mcpu=help'
+! HELP-NEXT: -mcpu=<value>           For a list of available CPUs for the target use '-mcpu=help'
+! HELP-NEXT: -mllvm=<arg>            Alias for -mllvm
+! HELP-NEXT: -mllvm <value>          Additional arguments to forward to LLVM's option processing
+! HELP-NEXT: -mmlir <value>          Additional arguments to forward to MLIR's option processing
+! HELP-NEXT: -module-dir <dir>       Put MODULE files in <dir>
+! HELP-NEXT: --no-offload-arch=<value>
+! HELP-NEXT:                         Remove CUDA/HIP offloading device architecture (e.g. sm_35, gfx906) from the list of devices to compile for. 'all' resets the list to its default value.
+! HELP-NEXT: -nocpp                  Disable predefined and command line preprocessor macros
+! HELP-NEXT: --offload-arch=<value>  Specify an offloading device architecture for CUDA, HIP, or OpenMP. (e.g. sm_35). If 'native' is used the compiler will detect locally installed architectures. For HIP offloading, the device architecture can be followed by target ID features delimited by a colon (e.g. gfx908:xnack+:sramecc-). May be specified more than once.
 ! HELP-NEXT: --offload-device-only   Only compile for the offloading device.
 ! HELP-NEXT: --offload-host-device   Compile for both the offloading host and device (default).
 ! HELP-NEXT: --offload-host-only     Only compile for the offloading host.
-! HELP-NEXT: -o <file>              Write output to <file>
-! HELP-NEXT: -pedantic              Warn on language extensions
+! HELP-NEXT: -o <file>               Write output to <file>
+! HELP-NEXT: -pedantic               Warn on language extensions
 ! HELP-NEXT: -print-effective-triple Print the effective target triple
 ! HELP-NEXT: -print-target-triple    Print the normalized target triple
-! HELP-NEXT: -P                     Disable linemarker output in -E mode
+! HELP-NEXT: -P                      Disable linemarker output in -E mode
 ! HELP-NEXT: -Rpass-analysis=<value> Report transformation analysis from optimization passes whose name matches the given POSIX regular expression
 ! HELP-NEXT: -Rpass-missed=<value>   Report missed transformations by optimization passes whose name matches the given POSIX regular expression
 ! HELP-NEXT: -Rpass=<value>          Report transformations performed by optimization passes whose name matches the given POSIX regular expression
 ! HELP-NEXT: -R<remark>              Enable the specified remark
-! HELP-NEXT: -save-temps=<value>    Save intermediate compilation results.
-! HELP-NEXT: -save-temps            Save intermediate compilation results
-! HELP-NEXT: -std=<value>           Language standard to compile for
-! HELP-NEXT: -S                     Only run preprocess and compilation steps
-! HELP-NEXT: --target=<value>       Generate code for the given target
-! HELP-NEXT: -U <macro>             Undefine macro <macro>
-! HELP-NEXT: --version              Print version information
-! HELP-NEXT: -W<warning>            Enable the specified warning
-! HELP-NEXT: -Xflang <arg>          Pass <arg> to the flang compiler
+! HELP-NEXT: -save-temps=<value>     Save intermediate compilation results.
+! HELP-NEXT: -save-temps             Save intermediate compilation results
+! HELP-NEXT: -std=<value>            Language standard to compile for
+! HELP-NEXT: -S                      Only run preprocess and compilation steps
+! HELP-NEXT: --target=<value>        Generate code for the given target
+! HELP-NEXT: -U <macro>              Undefine macro <macro>
+! HELP-NEXT: --version               Print version information
+! HELP-NEXT: -W<warning>             Enable the specified warning
+! HELP-NEXT: -Xflang <arg>           Pass <arg> to the flang compiler
+! HELP-NEXT: -x <language>           Treat subsequent input files as having type <language>
+
 
 ! HELP-FC1:USAGE: flang
 ! HELP-FC1-EMPTY:
 ! HELP-FC1-NEXT:OPTIONS:
-! HELP-FC1-NEXT: -cpp                   Enable predefined and command line preprocessor macros
-! HELP-FC1-NEXT: -D <macro>=<value>     Define <macro> to <value> (or 1 if <value> omitted)
-! HELP-FC1-NEXT: -emit-fir              Build the parse tree, then lower it to FIR
-! HELP-FC1-NEXT: -emit-hlfir            Build the parse tree, then lower it to HLFIR
-! HELP-FC1-NEXT: -emit-llvm-bc          Build ASTs then convert to LLVM, emit .bc file
-! HELP-FC1-NEXT: -emit-llvm Use the LLVM representation for assembler and object files
-! HELP-FC1-NEXT: -emit-obj Emit native object files
-! HELP-FC1-NEXT: -E                     Only run the preprocessor
+! HELP-FC1-NEXT: -cpp                    Enable predefined and command line preprocessor macros
+! HELP-FC1-NEXT: -D <macro>=<value>      Define <macro> to <value> (or 1 if <value> omitted)
+! HELP-FC1-NEXT: -emit-fir               Build the parse tree, then lower it to FIR
+! HELP-FC1-NEXT: -emit-hlfir             Build the parse tree, then lower it to HLFIR
+! HELP-FC1-NEXT: -emit-llvm-bc           Build ASTs then convert to LLVM, emit .bc file
+! HELP-FC1-NEXT: -emit-llvm              Use the LLVM representation for assembler and object files
+! HELP-FC1-NEXT: -emit-obj               Emit native object files
+! HELP-FC1-NEXT: -E                      Only run the preprocessor
 ! HELP-FC1-NEXT: -falternative-parameter-statement
-! HELP-FC1-NEXT: Enable the old style PARAMETER statement
-! HELP-FC1-NEXT: -fapprox-func          Allow certain math function calls to be replaced with an approximately equivalent calculation
-! HELP-FC1-NEXT: -fbackslash            Specify that backslash in string introduces an escape character
+! HELP-FC1-NEXT:                         Enable the old style PARAMETER statement
+! HELP-FC1-NEXT: -fapprox-func           Allow certain math function calls to be replaced with an approximately equivalent calculation
+! HELP-FC1-NEXT: -fbackslash             Specify that backslash in string introduces an escape character
 ! HELP-FC1-NEXT: -fcolor-diagnostics     Enable colors in diagnostics
-! HELP-FC1-NEXT: -fconvert=<value>      Set endian conversion of data for unformatted files
-! HELP-FC1-NEXT: -fdebug-dump-all       Dump symbols and the parse tree after the semantic checks
+! HELP-FC1-NEXT: -fconvert=<value>       Set endian conversion of data for unformatted files
+! HELP-FC1-NEXT: -fdebug-dump-all        Dump symbols and the parse tree after the semantic checks
 ! HELP-FC1-NEXT: -fdebug-dump-parse-tree-no-sema
-! HELP-FC1-NEXT:                        Dump the parse tree (skips the semantic checks)
+! HELP-FC1-NEXT:                         Dump the parse tree (skips the semantic checks)
 ! HELP-FC1-NEXT: -fdebug-dump-parse-tree Dump the parse tree
 ! HELP-FC1-NEXT: -fdebug-dump-parsing-log
-! HELP-FC1-NEXT:                   Run instrumented parse and dump the parsing log
+! HELP-FC1-NEXT:                         Run instrumented parse and dump the parsing log
 ! HELP-FC1-NEXT: -fdebug-dump-pft        Dump the pre-fir parse tree
 ! HELP-FC1-NEXT: -fdebug-dump-provenance Dump provenance
 ! HELP-FC1-NEXT: -fdebug-dump-symbols    Dump symbols after the semantic analysis
 ! HELP-FC1-NEXT: -fdebug-measure-parse-tree
 ! HELP-FC1-NEXT:                         Measure the parse tree
 ! HELP-FC1-NEXT: -fdebug-module-writer   Enable debug messages while writing module files
-! HELP-FC1-NEXT: -fdebug-pass-manager    Prints debug information for the new pass manage
+! HELP-FC1-NEXT: -fdebug-pass-manager    Prints debug information for the new pass manager
 ! HELP-FC1-NEXT: -fdebug-pre-fir-tree    Dump the pre-FIR tree
 ! HELP-FC1-NEXT: -fdebug-unparse-no-sema Unparse and stop (skips the semantic checks)
 ! HELP-FC1-NEXT: -fdebug-unparse-with-symbols
-! HELP-FC1-NEXT:                        Unparse and stop.
-! HELP-FC1-NEXT: -fdebug-unparse        Unparse and stop.
-! HELP-FC1-NEXT: -fdefault-double-8  Set the default double precision kind to an 8 byte wide type
-! HELP-FC1-NEXT: -fdefault-integer-8 Set the default integer and logical kind to an 8 byte wide type
-! HELP-FC1-NEXT: -fdefault-real-8    Set the default real kind to an 8 byte wide type
+! HELP-FC1-NEXT:                         Unparse and stop.
+! HELP-FC1-NEXT: -fdebug-unparse         Unparse and stop.
+! HELP-FC1-NEXT: -fdefault-double-8      Set the default double precision kind to an 8 byte wide type
+! HELP-FC1-NEXT: -fdefault-integer-8     Set the default integer and logical kind to an 8 byte wide type
+! HELP-FC1-NEXT: -fdefault-real-8        Set the default real kind to an 8 byte wide type
 ! HELP-FC1-NEXT: -fembed-offload-object=<value>
-! HELP-FC1-NEXT:                        Embed Offloading device-side binary into host object file as a section.
-! HELP-FC1-NEXT: -ffast-math            Allow aggressive, lossy floating-point optimizations
-! HELP-FC1-NEXT: -ffixed-form           Process source files in fixed form
+! HELP-FC1-NEXT:                         Embed Offloading device-side binary into host object file as a section.
+! HELP-FC1-NEXT: -ffast-math             Allow aggressive, lossy floating-point optimizations
+! HELP-FC1-NEXT: -ffixed-form            Process source files in fixed form
 ! HELP-FC1-NEXT: -ffixed-line-length=<value>
-! HELP-FC1-NEXT: Use <value> as character line width in fixed mode
-! HELP-FC1-NEXT: -ffp-contract=<value> Form fused FP ops (e.g. FMAs)
-! HELP-FC1-NEXT: -ffree-form            Process source files in free form
+! HELP-FC1-NEXT:                         Use <value> as character line width in fixed mode
+! HELP-FC1-NEXT: -ffp-contract=<value>   Form fused FP ops (e.g. FMAs)
+! HELP-FC1-NEXT: -ffree-form             Process source files in free form
 ! HELP-FC1-NEXT: -fget-definition <value> <value> <value>
-! HELP-FC1-NEXT:                        Get the symbol definition from <line> <start-column> <end-column>
+! HELP-FC1-NEXT:                         Get the symbol definition from <line> <start-column> <end-column>
 ! HELP-FC1-NEXT: -fget-symbols-sources   Dump symbols and their source code locations
-! HELP-FC1-NEXT: -fimplicit-none        No implicit typing allowed unless overridden by IMPLICIT statements
+! HELP-FC1-NEXT: -fimplicit-none         No implicit typing allowed unless overridden by IMPLICIT statements
 ! HELP-FC1-NEXT: -finput-charset=<value> Specify the default character set for source files
 ! HELP-FC1-NEXT: -fintrinsic-modules-path <dir>
-! HELP-FC1-NEXT:                        Specify where to find the compiled intrinsic modules
-! HELP-FC1-NEXT: -flarge-sizes          Use INTEGER(KIND=8) for the result type in size-related intrinsics
+! HELP-FC1-NEXT:                         Specify where to find the compiled intrinsic modules
+! HELP-FC1-NEXT: -flarge-sizes           Use INTEGER(KIND=8) for the result type in size-related intrinsics
 ! HELP-FC1-NEXT: -flogical-abbreviations Enable logical abbreviations
 ! HELP-FC1-NEXT: -flto=<value>           Set LTO mode
 ! HELP-FC1-NEXT: -flto                   Enable LTO in 'full' mode
 ! HELP-FC1-NEXT: -fno-analyzed-objects-for-unparse
-! HELP-FC1-NEXT:                        Do not use the analyzed objects when unparsing
-! HELP-FC1-NEXT: -fno-automatic         Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE
+! HELP-FC1-NEXT:                         Do not use the analyzed objects when unparsing
+! HELP-FC1-NEXT: -fno-automatic          Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE
 ! HELP-FC1-NEXT: -fno-debug-pass-manager Disables debug printing for the new pass manager
 ! HELP-FC1-NEXT: -fno-ppc-native-vector-element-order
-! HELP-FC1-NEXT:                        Specifies PowerPC non-native vector element order
-! HELP-FC1-NEXT: -fno-reformat          Dump the cooked character stream in -E mode
-! HELP-FC1-NEXT: -fno-signed-zeros      Allow optimizations that ignore the sign of floating point zeros
-! HELP-FC1-NEXT: -fno-stack-arrays      Allocate array temporaries on the heap (default)
+! HELP-FC1-NEXT:                         Specifies PowerPC non-native vector element order
+! HELP-FC1-NEXT: -fno-reformat           Dump the cooked character stream in -E mode
+! HELP-FC1-NEXT: -fno-signed-zeros       Allow optimizations that ignore the sign of floating point zeros
+! HELP-FC1-NEXT: -fno-stack-arrays       Allocate array temporaries on the heap (default)
 ! HELP-FC1-NEXT: -fno-version-loops-for-stride
-! HELP-FC1-NEXT:                        Do not create unit-strided loops (default)
-! HELP-FC1-NEXT: -fopenacc              Enable OpenACC
-! HELP-FC1-NEXT: -fopenmp-host-ir-file-path <value> 
-! HELP-FC1-NEXT:                        Path to the IR file produced by the frontend for the host.
+! HELP-FC1-NEXT:                         Do not create unit-strided loops (default)
+! HELP-FC1-NEXT: -fopenacc               Enable OpenACC
+! HELP-FC1-NEXT: -fopenmp-host-ir-file-path <value>
+! HELP-FC1-NEXT:                         Path to the IR file produced by the frontend for the host.
 ! HELP-FC1-NEXT: -fopenmp-is-target-device
-! HELP-FC1-NEXT:                        Generate code only for an OpenMP target device.
-! HELP-FC1-NEXT: -fopenmp-target-debug  Enable debugging in the OpenMP offloading device RTL
+! HELP-FC1-NEXT:                         Generate code only for an OpenMP target device.
+! HELP-FC1-NEXT: -fopenmp-target-debug   Enable debugging in the OpenMP offloading device RTL
 ! HELP-FC1-NEXT: -fopenmp-version=<value>
-! HELP-FC1-NEXT:                        Set OpenMP version (e.g. 45 for OpenMP 4.5, 50 for OpenMP 5.0). Default value is 50 for Clang and 11 for Flang
-! HELP-FC1-NEXT: -fopenmp               Parse OpenMP pragmas and generate parallel code.
+! HELP-FC1-NEXT:                         Set OpenMP version (e.g. 45 for OpenMP 4.5, 50 for OpenMP 5.0). Default value is 50 for Clang and 11 for Flang
+! HELP-FC1-NEXT: -fopenmp                Parse OpenMP pragmas and generate parallel code.
 ! HELP-FC1-NEXT: -fpass-plugin=<dsopath> Load pass plugin from a dynamic shared object file (only with new pass manager).
 ! HELP-FC1-NEXT: -fppc-native-vector-element-order
-! HELP-FC1-NEXT:                        Specifies PowerPC native vector element order
-! HELP-FC1-NEXT: -freciprocal-math      Allow division operations to be reassociated
-! HELP-FC1-NEXT: -fstack-arrays         Attempt to allocate array temporaries on the stack, no matter their size
-! HELP-FC1-NEXT: -fsyntax-only          Run the preprocessor, parser and semantic analysis stages
-! HELP-FC1-NEXT: -funderscoring         Appends one trailing underscore to external names
+! HELP-FC1-NEXT:                         Specifies PowerPC native vector element order (default)
+! HELP-FC1-NEXT: -freciprocal-math       Allow division operations to be reassociated
+! HELP-FC1-NEXT: -fstack-arrays          Attempt to allocate array temporaries on the stack, no matter their size
+! HELP-FC1-NEXT: -fsyntax-only           Run the preprocessor, parser and semantic analysis stages
+! HELP-FC1-NEXT: -funderscoring          Appends one trailing underscore to external names
 ! HELP-FC1-NEXT: -fversion-loops-for-stride
-! HELP-FC1-NEXT:                        Create unit-strided versions of loops
-! HELP-FC1-NEXT: -fxor-operator         Enable .XOR. as a synonym of .NEQV.
-! HELP-FC1-NEXT: -help                  Display available options
-! HELP-FC1-NEXT: -init-only             Only execute frontend initialization
-! HELP-FC1-NEXT: -I <dir>               Add directory to the end of the list of include search paths
-! HELP-FC1-NEXT: -load <dsopath>        Load the named plugin (dynamic shared object)
-! HELP-FC1-NEXT: -menable-no-infs       Allow optimization to assume there are no infinities.
-! HELP-FC1-NEXT: -menable-no-nans       Allow optimization to assume there are no NaNs.
-! HELP-FC1-NEXT: -mllvm <value>         Additional arguments to forward to LLVM's option processing
-! HELP-FC1-NEXT: -mmlir <value>         Additional arguments to forward to MLIR's option processing
-! HELP-FC1-NEXT: -module-dir <dir>      Put MODULE files in <dir>
+! HELP-FC1-NEXT:                         Create unit-strided versions of loops
+! HELP-FC1-NEXT: -fxor-operator          Enable .XOR. as a synonym of .NEQV.
+! HELP-FC1-NEXT: -help                   Display available options
+! HELP-FC1-NEXT: -init-only              Only execute frontend initialization
+! HELP-FC1-NEXT: -I <dir>                Add directory to the end of the list of include search paths
+! HELP-FC1-NEXT: -load <dsopath>         Load the named plugin (dynamic shared object)
+! HELP-FC1-NEXT: -menable-no-infs        Allow optimization to assume there are no infinities.
+! HELP-FC1-NEXT: -menable-no-nans        Allow optimization to assume there are no NaNs.
+! HELP-FC1-NEXT: -mllvm <value>          Additional arguments to forward to LLVM's option processing
+! HELP-FC1-NEXT: -mmlir <value>          Additional arguments to forward to MLIR's option processing
+! HELP-FC1-NEXT: -module-dir <dir>       Put MODULE files in <dir>
 ! HELP-FC1-NEXT: -module-suffix <suffix> Use <suffix> as the suffix for module files (the default value is `.mod`)
-! HELP-FC1-NEXT: -mreassociate          Allow reassociation transformations for floating-point instructions
+! HELP-FC1-NEXT: -mreassociate           Allow reassociation transformations for floating-point instructions
 ! HELP-FC1-NEXT: -mrelocation-model <value>
-! HELP-FC1-NEXT:                        The relocation model to use
-! HELP-FC1-NEXT: -nocpp                 Disable predefined and command line preprocessor macros
+! HELP-FC1-NEXT:                         The relocation model to use
+! HELP-FC1-NEXT: -nocpp                  Disable predefined and command line preprocessor macros
 ! HELP-FC1-NEXT: -opt-record-file <value>
-! HELP-FC1-NEXT:                        File name to use for YAML optimization record output
+! HELP-FC1-NEXT:                         File name to use for YAML optimization record output
 ! HELP-FC1-NEXT: -opt-record-format <value>
-! HELP-FC1-NEXT:                        The format used for serializing remarks (default: YAML)
+! HELP-FC1-NEXT:                         The format used for serializing remarks (default: YAML)
 ! HELP-FC1-NEXT: -opt-record-passes <value>
-! HELP-FC1-NEXT:                        Only record remark information for passes whose names match the given regular expression
-! HELP-FC1-NEXT: -o <file>              Write output to <file>
-! HELP-FC1-NEXT: -pedantic              Warn on language extensions
+! HELP-FC1-NEXT:                         Only record remark information for passes whose names match the given regular expression
+! HELP-FC1-NEXT: -o <file>               Write output to <file>
+! HELP-FC1-NEXT: -pedantic               Warn on language extensions
 ! HELP-FC1-NEXT: -pic-is-pie             File is for a position independent executable
 ! HELP-FC1-NEXT: -pic-level <value>      Value for __PIC__
-! HELP-FC1-NEXT: -plugin <name>         Use the named plugin action instead of the default action (use "help" to list available options)
-! HELP-FC1-NEXT: -P                     Disable linemarker output in -E mode
+! HELP-FC1-NEXT: -plugin <name>          Use the named plugin action instead of the default action (use "help" to list available options)
+! HELP-FC1-NEXT: -P                      Disable linemarker output in -E mode
 ! HELP-FC1-NEXT: -Rpass-analysis=<value> Report transformation analysis from optimization passes whose name matches the given POSIX regular expression
 ! HELP-FC1-NEXT: -Rpass-missed=<value>   Report missed transformations by optimization passes whose name matches the given POSIX regular expression
 ! HELP-FC1-NEXT: -Rpass=<value>          Report transformations performed by optimization passes whose name matches the given POSIX regular expression
 ! HELP-FC1-NEXT: -R<remark>              Enable the specified remark
-! HELP-FC1-NEXT: -save-temps=<value>    Save intermediate compilation results.
-! HELP-FC1-NEXT: -save-temps            Save intermediate compilation results
-! HELP-FC1-NEXT: -std=<value>           Language standard to compile for
-! HELP-FC1-NEXT: -S                     Only run preprocess and compilation steps
-! HELP-FC1-NEXT: -target-cpu <value>    Target a specific cpu type
+! HELP-FC1-NEXT: -save-temps=<value>     Save intermediate compilation results.
+! HELP-FC1-NEXT: -save-temps             Save intermediate compilation results
+! HELP-FC1-NEXT: -std=<value>            Language standard to compile for
+! HELP-FC1-NEXT: -S                      Only run preprocess and compilation steps
+! HELP-FC1-NEXT: -target-cpu <value>     Target a specific cpu type
 ! HELP-FC1-NEXT: -target-feature <value> Target specific attributes
-! HELP-FC1-NEXT: -test-io               Run the InputOuputTest action. Use for development and testing only.
-! HELP-FC1-NEXT: -triple <value>        Specify target triple (e.g. i686-apple-darwin9)
-! HELP-FC1-NEXT: -U <macro>             Undefine macro <macro>
-! HELP-FC1-NEXT: -version               Print the compiler version
-! HELP-FC1-NEXT: -W<warning>            Enable the specified warning
+! HELP-FC1-NEXT: -test-io                Run the InputOuputTest action. Use for development and testing only.
+! HELP-FC1-NEXT: -triple <value>         Specify target triple (e.g. i686-apple-darwin9)
+! HELP-FC1-NEXT: -U <macro>              Undefine macro <macro>
+! HELP-FC1-NEXT: -version                Print the compiler version
+! HELP-FC1-NEXT: -W<warning>             Enable the specified warning
+! HELP-FC1-NEXT: -x <language>           Treat subsequent input files as having type <language>
 
 ! ERROR: error: unknown argument '-helps'; did you mean '-help'
Index: flang/test/Driver/driver-help-hidden.f90
===================================================================
--- flang/test/Driver/driver-help-hidden.f90
+++ flang/test/Driver/driver-help-hidden.f90
@@ -14,100 +14,121 @@
 ! CHECK:USAGE: flang-new
 ! CHECK-EMPTY:
 ! CHECK-NEXT:OPTIONS:
-! CHECK-NEXT: -###      Print (but do not run) the commands to run for this compilation
-! CHECK-NEXT: -cpp      Enable predefined and command line preprocessor macros
-! CHECK-NEXT: -c        Only run preprocess, compile, and assemble steps
-! CHECK-NEXT: -D <macro>=<value>     Define <macro> to <value> (or 1 if <value> omitted)
-! CHECK-NEXT: -emit-llvm             Use the LLVM representation for assembler and object files
-! CHECK-NEXT: -E        Only run the preprocessor
+! CHECK-NEXT: -###                    Print (but do not run) the commands to run for this compilation
+! CHECK-NEXT: -ccc-print-phases       Dump list of actions to perform
+! CHECK-NEXT: -cpp                    Enable predefined and command line preprocessor macros
+! CHECK-NEXT: -c                      Only run preprocess, compile, and assemble steps
+! CHECK-NEXT: -D <macro>=<value>      Define <macro> to <value> (or 1 if <value> omitted)
+! CHECK-NEXT: -emit-llvm              Use the LLVM representation for assembler and object files
+! CHECK-NEXT: -E                      Only run the preprocessor
 ! CHECK-NEXT: -falternative-parameter-statement
-! CHECK-NEXT: Enable the old style PARAMETER statement
-! CHECK-NEXT: -fapprox-func          Allow certain math function calls to be replaced with an approximately equivalent calculation
-! CHECK-NEXT: -fbackslash            Specify that backslash in string introduces an escape character
-! CHECK-NEXT: -fcolor-diagnostics    Enable colors in diagnostics
-! CHECK-NEXT: -fconvert=<value>      Set endian conversion of data for unformatted files
-! CHECK-NEXT: -fdefault-double-8     Set the default double precision kind to an 8 byte wide type
-! CHECK-NEXT: -fdefault-integer-8    Set the default integer and logical kind to an 8 byte wide type
-! CHECK-NEXT: -fdefault-real-8       Set the default real kind to an 8 byte wide type
-! CHECK-NEXT: -ffast-math            Allow aggressive, lossy floating-point optimizations
-! CHECK-NEXT: -ffixed-form           Process source files in fixed form
+! CHECK-NEXT:                         Enable the old style PARAMETER statement
+! CHECK-NEXT: -fapprox-func           Allow certain math function calls to be replaced with an approximately equivalent calculation
+! CHECK-NEXT: -fbackslash             Specify that backslash in string introduces an escape character
+! CHECK-NEXT: -fcolor-diagnostics     Enable colors in diagnostics
+! CHECK-NEXT: -fconvert=<value>       Set endian conversion of data for unformatted files
+! CHECK-NEXT: -fdefault-double-8      Set the default double precision kind to an 8 byte wide type
+! CHECK-NEXT: -fdefault-integer-8     Set the default integer and logical kind to an 8 byte wide type
+! CHECK-NEXT: -fdefault-real-8        Set the default real kind to an 8 byte wide type
+! CHECK-NEXT: -ffast-math             Allow aggressive, lossy floating-point optimizations
+! CHECK-NEXT: -ffixed-form            Process source files in fixed form
 ! CHECK-NEXT: -ffixed-line-length=<value>
-! CHECK-NEXT: Use <value> as character line width in fixed mode
-! CHECK-NEXT: -ffp-contract=<value> Form fused FP ops (e.g. FMAs)
-! CHECK-NEXT: -ffree-form            Process source files in free form
-! CHECK-NEXT: -fimplicit-none        No implicit typing allowed unless overridden by IMPLICIT statements
+! CHECK-NEXT:                         Use <value> as character line width in fixed mode
+! CHECK-NEXT: -ffp-contract=<value>   Form fused FP ops (e.g. FMAs)
+! CHECK-NEXT: -ffree-form             Process source files in free form
+! CHECK-NEXT: -fhonor-infinities      Specify that floating-point optimizations are not allowed that assume arguments and results are not +-inf.
+! CHECK-NEXT: -fhonor-nans            Specify that floating-point optimizations are not allowed that assume arguments and results are not NANs.
+! CHECK-NEXT: -fimplicit-none         No implicit typing allowed unless overridden by IMPLICIT statements
 ! CHECK-NEXT: -finput-charset=<value> Specify the default character set for source files
 ! CHECK-NEXT: -fintrinsic-modules-path <dir>
-! CHECK-NEXT:                        Specify where to find the compiled intrinsic modules
+! CHECK-NEXT:                         Specify where to find the compiled intrinsic modules
 ! CHECK-NEXT: -flang-experimental-hlfir
-! CHECK-NEXT:                        Use HLFIR lowering (experimental)
+! CHECK-NEXT:                         Use HLFIR lowering (experimental)
 ! CHECK-NEXT: -flang-experimental-polymorphism
-! CHECK-NEXT:                        Enable Fortran 2003 polymorphism (experimental)
-! CHECK-NEXT: -flarge-sizes          Use INTEGER(KIND=8) for the result type in size-related intrinsics
+! CHECK-NEXT:                         Enable Fortran 2003 polymorphism (experimental)
+! CHECK-NEXT: -flarge-sizes           Use INTEGER(KIND=8) for the result type in size-related intrinsics
 ! CHECK-NEXT: -flogical-abbreviations Enable logical abbreviations
-! CHECK-NEXT: -flto=<value> Set LTO mode
-! CHECK-NEXT: -flto Enable LTO in 'full' mode
-! CHECK-NEXT: -fno-automatic         Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE
+! CHECK-NEXT: -flto=auto              Enable LTO in 'full' mode
+! CHECK-NEXT: -flto=jobserver         Enable LTO in 'full' mode
+! CHECK-NEXT: -flto=<value>           Set LTO mode
+! CHECK-NEXT: -flto                   Enable LTO in 'full' mode
+! CHECK-NEXT: -fno-automatic          Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE
 ! CHECK-NEXT: -fno-color-diagnostics  Disable colors in diagnostics
-! CHECK-NEXT: -fno-integrated-as     Disable the integrated assembler
+! CHECK-NEXT: -fno-integrated-as      Disable the integrated assembler
+! CHECK-NEXT: -fno-lto                Disable LTO mode (default)
 ! CHECK-NEXT: -fno-ppc-native-vector-element-order
-! CHECK-NEXT:                        Specifies PowerPC non-native vector element order
-! CHECK-NEXT: -fno-signed-zeros      Allow optimizations that ignore the sign of floating point zeros
-! CHECK-NEXT: -fno-stack-arrays      Allocate array temporaries on the heap (default)
+! CHECK-NEXT:                         Specifies PowerPC non-native vector element order
+! CHECK-NEXT: -fno-signed-zeros       Allow optimizations that ignore the sign of floating point zeros
+! CHECK-NEXT: -fno-stack-arrays       Allocate array temporaries on the heap (default)
 ! CHECK-NEXT: -fno-version-loops-for-stride
-! CHECK-NEXT:                        Do not create unit-strided loops (default)
-! CHECK-NEXT: -fopenacc              Enable OpenACC
+! CHECK-NEXT:                         Do not create unit-strided loops (default)
+! CHECK-NEXT: -fopenacc               Enable OpenACC
+! CHECK-NEXT: -fopenmp-assume-no-nested-parallelism
+! CHECK-NEXT:                         Assert no nested parallel regions in the GPU
+! CHECK-NEXT: -fopenmp-assume-no-thread-state
+! CHECK-NEXT:                         Assert no thread in a parallel region modifies an ICV
+! CHECK-NEXT: -fopenmp-target-debug   Enable debugging in the OpenMP offloading device RTL
+! CHECK-NEXT: -fopenmp-targets=<value>
+! CHECK-NEXT:                         Specify comma-separated list of triples OpenMP offloading targets to be supported
 ! CHECK-NEXT: -fopenmp-version=<value>
-! CHECK-NEXT:                        Set OpenMP version (e.g. 45 for OpenMP 4.5, 50 for OpenMP 5.0). Default value is 50 for Clang and 11 for Flang
-! CHECK-NEXT: -fopenmp               Parse OpenMP pragmas and generate parallel code.
+! CHECK-NEXT:                         Set OpenMP version (e.g. 45 for OpenMP 4.5, 50 for OpenMP 5.0). Default value is 50 for Clang and 11 for Flang
+! CHECK-NEXT: -fopenmp                Parse OpenMP pragmas and generate parallel code.
 ! CHECK-NEXT: -foptimization-record-file=<file>
-! CHECK-NEXT:                        Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.
+! CHECK-NEXT:                         Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.
 ! CHECK-NEXT: -foptimization-record-passes=<regex>
-! CHECK-NEXT:                        Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)
+! CHECK-NEXT:                         Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)
 ! CHECK-NEXT: -fpass-plugin=<dsopath> Load pass plugin from a dynamic shared object file (only with new pass manager).
 ! CHECK-NEXT: -fppc-native-vector-element-order
-! CHECK-NEXT:                        Specifies PowerPC native vector element order
-! CHECK-NEXT: -freciprocal-math      Allow division operations to be reassociated
+! CHECK-NEXT:                         Specifies PowerPC native vector element order (default)
+! CHECK-NEXT: -freciprocal-math       Allow division operations to be reassociated
 ! CHECK-NEXT: -fsave-optimization-record=<format>
-! CHECK-NEXT:                        Generate an optimization record file in a specific format
+! CHECK-NEXT:                         Generate an optimization record file in a specific format
 ! CHECK-NEXT: -fsave-optimization-record
-! CHECK-NEXT:                        Generate a YAML optimization record file
-! CHECK-NEXT: -fstack-arrays         Attempt to allocate array temporaries on the stack, no matter their size
-! CHECK-NEXT: -fsyntax-only          Run the preprocessor, parser and semantic analysis stages
-! CHECK-NEXT: -funderscoring         Appends one trailing underscore to external names
+! CHECK-NEXT:                         Generate a YAML optimization record file
+! CHECK-NEXT: -fstack-arrays          Attempt to allocate array temporaries on the stack, no matter their size
+! CHECK-NEXT: -fsyntax-only           Run the preprocessor, parser and semantic analysis stages
+! CHECK-NEXT: -funderscoring          Appends one trailing underscore to external names
 ! CHECK-NEXT: -fversion-loops-for-stride
-! CHECK-NEXT:                        Create unit-strided versions of loops
-! CHECK-NEXT: -fxor-operator         Enable .XOR. as a synonym of .NEQV.
-! CHECK-NEXT: -gline-tables-only     Emit debug line number tables only
-! CHECK-NEXT: -g                     Generate source-level debug information
-! CHECK-NEXT: -help     Display available options
-! CHECK-NEXT: -I <dir>               Add directory to the end of the list of include search paths
-! CHECK-NEXT: -mllvm=<arg>           Alias for -mllvm
-! CHECK-NEXT: -mllvm <value>         Additional arguments to forward to LLVM's option processing
-! CHECK-NEXT: -mmlir <value>         Additional arguments to forward to MLIR's option processing
-! CHECK-NEXT: -module-dir <dir>      Put MODULE files in <dir>
-! CHECK-NEXT: -nocpp                 Disable predefined and command line preprocessor macros
+! CHECK-NEXT:                         Create unit-strided versions of loops
+! CHECK-NEXT: -fxor-operator          Enable .XOR. as a synonym of .NEQV.
+! CHECK-NEXT: -gline-directives-only  Emit debug line info directives only
+! CHECK-NEXT: -gline-tables-only      Emit debug line number tables only
+! CHECK-NEXT: -g                      Generate source-level debug information
+! CHECK-NEXT: --help-hidden           Display help for hidden options
+! CHECK-NEXT: -help                   Display available options
+! CHECK-NEXT: -I <dir>                Add directory to the end of the list of include search paths
+! CHECK-NEXT: -march=<value>          For a list of available architectures for the target use '-mcpu=help'
+! CHECK-NEXT: -mcpu=<value>           For a list of available CPUs for the target use '-mcpu=help'
+! CHECK-NEXT: -mllvm=<arg>            Alias for -mllvm
+! CHECK-NEXT: -mllvm <value>          Additional arguments to forward to LLVM's option processing
+! CHECK-NEXT: -mmlir <value>          Additional arguments to forward to MLIR's option processing
+! CHECK-NEXT: -module-dir <dir>       Put MODULE files in <dir>
+! CHECK-NEXT: --no-offload-arch=<value>
+! CHECK-NEXT:                         Remove CUDA/HIP offloading device architecture (e.g. sm_35, gfx906) from the list of devices to compile for. 'all' resets the list to its default value.
+! CHECK-NEXT: -nocpp                  Disable predefined and command line preprocessor macros
+! CHECK-NEXT: --offload-arch=<value>  Specify an offloading device architecture for CUDA, HIP, or OpenMP. (e.g. sm_35). If 'native' is used the compiler will detect locally installed architectures. For HIP offloading, the device architecture can be followed by target ID features delimited by a colon (e.g. gfx908:xnack+:sramecc-). May be specified more than once.
 ! CHECK-NEXT: --offload-device-only   Only compile for the offloading device.
 ! CHECK-NEXT: --offload-host-device   Compile for both the offloading host and device (default).
 ! CHECK-NEXT: --offload-host-only     Only compile for the offloading host.
-! CHECK-NEXT: -o <file> Write output to <file>
-! CHECK-NEXT: -pedantic              Warn on language extensions
+! CHECK-NEXT: -o <file>               Write output to <file>
+! CHECK-NEXT: -pedantic               Warn on language extensions
 ! CHECK-NEXT: -print-effective-triple Print the effective target triple
 ! CHECK-NEXT: -print-target-triple    Print the normalized target triple
-! CHECK-NEXT: -P                     Disable linemarker output in -E mode
+! CHECK-NEXT: -P                      Disable linemarker output in -E mode
 ! CHECK-NEXT: -Rpass-analysis=<value> Report transformation analysis from optimization passes whose name matches the given POSIX regular expression
 ! CHECK-NEXT: -Rpass-missed=<value>   Report missed transformations by optimization passes whose name matches the given POSIX regular expression
 ! CHECK-NEXT: -Rpass=<value>          Report transformations performed by optimization passes whose name matches the given POSIX regular expression
 ! CHECK-NEXT: -R<remark>              Enable the specified remark
-! CHECK-NEXT: -save-temps=<value>    Save intermediate compilation results.
-! CHECK-NEXT: -save-temps            Save intermediate compilation results
-! CHECK-NEXT: -std=<value>           Language standard to compile for
-! CHECK-NEXT: -S                     Only run preprocess and compilation steps
+! CHECK-NEXT: -save-temps=<value>     Save intermediate compilation results.
+! CHECK-NEXT: -save-temps             Save intermediate compilation results
+! CHECK-NEXT: -std=<value>            Language standard to compile for
+! CHECK-NEXT: -S                      Only run preprocess and compilation steps
 ! CHECK-NEXT: --target=<value>        Generate code for the given target
-! CHECK-NEXT: -U <macro>             Undefine macro <macro>
-! CHECK-NEXT: --version Print version information
-! CHECK-NEXT: -W<warning>            Enable the specified warning
-! CHECK-NEXT: -Xflang <arg>          Pass <arg> to the flang compiler
+! CHECK-NEXT: -U <macro>              Undefine macro <macro>
+! CHECK-NEXT: --version               Print version information
+! CHECK-NEXT: -W<warning>             Enable the specified warning
+! CHECK-NEXT: -Xflang <arg>           Pass <arg> to the flang compiler
+! CHECK-NEXT: -x <language>           Treat subsequent input files as having type <language>
 
 ! ERROR-FLANG: error: unknown argument '-help-hidden'; did you mean '--help-hidden'?
 
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -6471,7 +6471,7 @@
   if (IsFlangMode()) {
     // TODO: Does flang really want *all* of the clang driver options?
     // We probably need to annotate more specifically.
-    return llvm::opt::Visibility(llvm::opt::Default | options::FlangOption);
+    return llvm::opt::Visibility(options::FlangOption);
   }
   return llvm::opt::Visibility(llvm::opt::Default);
 }
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -616,7 +616,9 @@
   Flags<[NoXarchOption, HelpHidden]>, Vis<[Default, CLOption, DXCOption]>;
 def ccc_install_dir : Separate<["-"], "ccc-install-dir">, InternalDebugOpt,
   HelpText<"Simulate installation in the given directory">;
-def ccc_print_phases : Flag<["-"], "ccc-print-phases">, InternalDebugOpt,
+def ccc_print_phases : Flag<["-"], "ccc-print-phases">,
+  Flags<[NoXarchOption, HelpHidden]>, Vis<[Default, CLOption, DXCOption,
+  FlangOption]>,
   HelpText<"Dump list of actions to perform">;
 def ccc_print_bindings : Flag<["-"], "ccc-print-bindings">, InternalDebugOpt,
   HelpText<"Show bindings of tools to actions">;
@@ -827,14 +829,14 @@
     Normalizer<"makeFlagToValueNormalizer(DependencyOutputFormat::NMake)">;
 def Mach : Flag<["-"], "Mach">, Group<Link_Group>;
 def O0 : Flag<["-"], "O0">, Group<O_Group>, Flags<[HelpHidden]>,
-  Vis<[Default, CC1Option, FC1Option]>;
+  Vis<[Default, CC1Option, FC1Option, FlangOption]>;
 def O4 : Flag<["-"], "O4">, Group<O_Group>, Flags<[HelpHidden]>,
-  Vis<[Default, CC1Option, FC1Option]>;
+  Vis<[Default, CC1Option, FC1Option, FlangOption]>;
 def ObjCXX : Flag<["-"], "ObjC++">, Flags<[NoXarchOption]>,
   HelpText<"Treat source input files as Objective-C++ inputs">;
 def ObjC : Flag<["-"], "ObjC">, Flags<[NoXarchOption]>,
   HelpText<"Treat source input files as Objective-C inputs">;
-def O : Joined<["-"], "O">, Group<O_Group>, Vis<[Default, CC1Option, FC1Option]>;
+def O : Joined<["-"], "O">, Group<O_Group>, Vis<[Default, CC1Option, FC1Option, FlangOption]>;
 def O_flag : Flag<["-"], "O">, Vis<[Default, CC1Option, FC1Option]>,
   Alias<O>, AliasArgs<["1"]>;
 def Ofast : Joined<["-"], "Ofast">, Group<O_Group>,
@@ -868,7 +870,7 @@
   HelpText<"Pass the comma separated arguments in <arg> to the assembler">,
   MetaVarName<"<arg>">;
 def Wall : Flag<["-"], "Wall">, Group<W_Group>, Flags<[HelpHidden]>,
-  Vis<[Default, CC1Option]>;
+  Vis<[Default, CC1Option, FlangOption]>;
 def WCL4 : Flag<["-"], "WCL4">, Group<W_Group>, Flags<[HelpHidden]>,
   Vis<[Default, CC1Option]>;
 def Wsystem_headers : Flag<["-"], "Wsystem-headers">, Group<W_Group>,
@@ -1065,12 +1067,14 @@
 // Common offloading options
 let Group = offload_Group in {
 def offload_arch_EQ : Joined<["--"], "offload-arch=">, Flags<[NoXarchOption]>,
+  Vis<[Default, FlangOption]>,
   HelpText<"Specify an offloading device architecture for CUDA, HIP, or OpenMP. (e.g. sm_35). "
            "If 'native' is used the compiler will detect locally installed architectures. "
            "For HIP offloading, the device architecture can be followed by target ID features "
            "delimited by a colon (e.g. gfx908:xnack+:sramecc-). May be specified more than once.">;
 def no_offload_arch_EQ : Joined<["--"], "no-offload-arch=">,
   Flags<[NoXarchOption]>,
+  Vis<[Default, FlangOption]>,
   HelpText<"Remove CUDA/HIP offloading device architecture (e.g. sm_35, gfx906) from the list of devices to compile for. "
            "'all' resets the list to its default value.">;
 
@@ -1953,7 +1957,7 @@
   PosFlag<SetTrue, [], [Default, CC1Option, FC1Option, FlangOption],
           "Allow aggressive, lossy floating-point optimizations",
           [cl_fast_relaxed_math.KeyPath]>,
-  NegFlag<SetFalse>>;
+  NegFlag<SetFalse, [], [Default, CC1Option, FC1Option, FlangOption]>>;
 defm math_errno : BoolFOption<"math-errno",
   LangOpts<"MathErrno">, DefaultFalse,
   PosFlag<SetTrue, [], [Default, CC1Option],
@@ -2309,8 +2313,8 @@
   ImpliedByAnyOf<[cl_unsafe_math_optimizations.KeyPath, ffast_math.KeyPath]>;
 def fno_unsafe_math_optimizations : Flag<["-"], "fno-unsafe-math-optimizations">,
   Group<f_Group>;
-def fassociative_math : Flag<["-"], "fassociative-math">, Group<f_Group>;
-def fno_associative_math : Flag<["-"], "fno-associative-math">, Group<f_Group>;
+def fassociative_math : Flag<["-"], "fassociative-math">, Vis<[Default, FlangOption]>, Group<f_Group>;
+def fno_associative_math : Flag<["-"], "fno-associative-math">, Vis<[Default, FlangOption]>, Group<f_Group>;
 defm reciprocal_math : BoolFOption<"reciprocal-math",
   LangOpts<"AllowRecip">, DefaultFalse,
   PosFlag<SetTrue, [], [Default, CC1Option, FC1Option, FlangOption],
@@ -2338,14 +2342,16 @@
             [cl_no_signed_zeros.KeyPath, funsafe_math_optimizations.KeyPath]>,
   PosFlag<SetFalse>>;
 def fhonor_nans : Flag<["-"], "fhonor-nans">, Group<f_Group>,
+  Vis<[Default, FlangOption]>,
   HelpText<"Specify that floating-point optimizations are not allowed that "
            "assume arguments and results are not NANs.">;
-def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Group<f_Group>;
+def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Vis<[Default, FlangOption]>, Group<f_Group>;
 def fhonor_infinities : Flag<["-"], "fhonor-infinities">,
-  Group<f_Group>,
+  Group<f_Group>, Vis<[Default, FlangOption]>,
   HelpText<"Specify that floating-point optimizations are not allowed that "
            "assume arguments and results are not +-inf.">;
-def fno_honor_infinities : Flag<["-"], "fno-honor-infinities">, Group<f_Group>;
+def fno_honor_infinities : Flag<["-"], "fno-honor-infinities">,
+  Vis<[Default, FlangOption]>, Group<f_Group>;
 // This option was originally misspelt "infinites" [sic].
 def : Flag<["-"], "fhonor-infinites">, Alias<fhonor_infinities>;
 def : Flag<["-"], "fno-honor-infinites">, Alias<fno_honor_infinities>;
@@ -2633,9 +2639,9 @@
   Vis<[Default, CLOption, DXCOption, CC1Option, FC1Option, FlangOption]>,
   Group<f_Group>,
   HelpText<"Set LTO mode">, Values<"thin,full">;
-def flto_EQ_jobserver : Flag<["-"], "flto=jobserver">, Group<f_Group>,
+def flto_EQ_jobserver : Flag<["-"], "flto=jobserver">, Vis<[Default, FlangOption]>, Group<f_Group>,
   Alias<flto_EQ>, AliasArgs<["full"]>, HelpText<"Enable LTO in 'full' mode">;
-def flto_EQ_auto : Flag<["-"], "flto=auto">, Group<f_Group>,
+def flto_EQ_auto : Flag<["-"], "flto=auto">, Vis<[Default, FlangOption]>, Group<f_Group>,
   Alias<flto_EQ>, AliasArgs<["full"]>, HelpText<"Enable LTO in 'full' mode">;
 def flto : Flag<["-"], "flto">,
   Vis<[Default, CLOption, DXCOption, CC1Option, FC1Option, FlangOption]>,
@@ -2647,7 +2653,7 @@
   NegFlag<SetFalse, [], [Default], "Use distinct LTO pipelines">,
   BothFlags<[], [Default, CC1Option], "">>;
 def fno_lto : Flag<["-"], "fno-lto">,
-  Vis<[Default, CLOption, DXCOption, CC1Option]>, Group<f_Group>,
+  Vis<[Default, CLOption, DXCOption, CC1Option, FlangOption]>, Group<f_Group>,
   HelpText<"Disable LTO mode (default)">;
 def foffload_lto_EQ : Joined<["-"], "foffload-lto=">,
   Vis<[Default, CLOption, DXCOption]>, Group<f_Group>,
@@ -3145,7 +3151,7 @@
 def fnoopenmp_use_tls : Flag<["-"], "fnoopenmp-use-tls">, Group<f_Group>,
   Flags<[NoArgumentUnused, HelpHidden]>, Vis<[Default, CC1Option]>;
 def fopenmp_targets_EQ : CommaJoined<["-"], "fopenmp-targets=">,
-  Flags<[NoXarchOption]>, Vis<[Default, CC1Option]>,
+  Flags<[NoXarchOption]>, Vis<[Default, CC1Option, FlangOption]>,
   HelpText<"Specify comma-separated list of triples OpenMP offloading targets to be supported">;
 def fopenmp_relocatable_target : Flag<["-"], "fopenmp-relocatable-target">,
   Group<f_Group>, Flags<[NoArgumentUnused, HelpHidden]>,
@@ -3177,7 +3183,7 @@
 //===----------------------------------------------------------------------===//
 
 let Flags = [NoArgumentUnused] in {
-let Vis = [Default, CC1Option, FC1Option] in {
+let Vis = [Default, CC1Option, FC1Option, FlangOption] in {
 let Group = f_Group in {
 
 def fopenmp_target_debug : Flag<["-"], "fopenmp-target-debug">,
@@ -3210,7 +3216,7 @@
 } // let Vis = [Default, CC1Option, FC1Option, FlangOption]
 
 let Flags = [NoArgumentUnused, HelpHidden] in {
-let Vis = [Default, CC1Option, FC1Option] in {
+let Vis = [Default, CC1Option, FC1Option, FlangOption] in {
 let Group = f_Group in {
 
 def fopenmp_target_debug_EQ : Joined<["-"], "fopenmp-target-debug=">;
@@ -3300,8 +3306,8 @@
 def fpch_preprocess : Flag<["-"], "fpch-preprocess">, Group<f_Group>;
 def fpic : Flag<["-"], "fpic">, Group<f_Group>;
 def fno_pic : Flag<["-"], "fno-pic">, Group<f_Group>;
-def fpie : Flag<["-"], "fpie">, Group<f_Group>;
-def fno_pie : Flag<["-"], "fno-pie">, Group<f_Group>;
+def fpie : Flag<["-"], "fpie">, Vis<[Default, FlangOption]>, Group<f_Group>;
+def fno_pie : Flag<["-"], "fno-pie">, Vis<[Default, FlangOption]>, Group<f_Group>;
 defm pic_data_is_text_relative : SimpleMFlag<"pic-data-is-text-relative",
      "Assume", "Don't assume", " data segments are relative to text segment">;
 def fdirect_access_external_data : Flag<["-"], "fdirect-access-external-data">, Group<f_Group>,
@@ -3858,13 +3864,13 @@
   Vis<[Default, CLOption, DXCOption, FlangOption]>,
   HelpText<"Emit debug line number tables only">;
 def gline_directives_only : Flag<["-"], "gline-directives-only">, Group<gN_Group>,
-  Vis<[Default, CLOption, DXCOption]>,
+  Vis<[Default, CLOption, DXCOption, FlangOption]>,
   HelpText<"Emit debug line info directives only">;
 def gmlt : Flag<["-"], "gmlt">, Alias<gline_tables_only>;
-def g0 : Flag<["-"], "g0">, Group<gN_Group>;
-def g1 : Flag<["-"], "g1">, Group<gN_Group>, Alias<gline_tables_only>;
-def g2 : Flag<["-"], "g2">, Group<gN_Group>;
-def g3 : Flag<["-"], "g3">, Group<gN_Group>;
+def g0 : Flag<["-"], "g0">, Group<gN_Group>, Vis<[Default, FlangOption]>;
+def g1 : Flag<["-"], "g1">, Group<gN_Group>, Vis<[Default, FlangOption]>, Alias<gline_tables_only>;
+def g2 : Flag<["-"], "g2">, Group<gN_Group>, Vis<[Default, FlangOption]>;
+def g3 : Flag<["-"], "g3">, Group<gN_Group>, Vis<[Default, FlangOption]>;
 def ggdb : Flag<["-"], "ggdb">, Group<gTune_Group>;
 def ggdb0 : Flag<["-"], "ggdb0">, Group<ggdbN_Group>;
 def ggdb1 : Flag<["-"], "ggdb1">, Group<ggdbN_Group>;
@@ -4144,7 +4150,7 @@
 def mwatchsimulator_version_min_EQ : Joined<["-"], "mwatchsimulator-version-min=">, Alias<mwatchos_simulator_version_min_EQ>;
 } // let Flags = [TargetSpecific]
 def march_EQ : Joined<["-"], "march=">, Group<m_Group>,
-  Flags<[TargetSpecific]>, Vis<[Default, CLOption, DXCOption]>,
+  Flags<[TargetSpecific]>, Vis<[Default, CLOption, DXCOption, FlangOption]>,
   HelpText<"For a list of available architectures for the target use '-mcpu=help'">;
 def masm_EQ : Joined<["-"], "masm=">, Group<m_Group>, Flags<[NoXarchOption]>;
 def inline_asm_EQ : Joined<["-"], "inline-asm=">, Group<m_Group>,
@@ -4173,8 +4179,6 @@
 def mguard_EQ : Joined<["-"], "mguard=">, Group<m_Group>,
   HelpText<"Enable or disable Control Flow Guard checks and guard tables emission">,
   Values<"none,cf,cf-nochecks">;
-def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>,
-  HelpText<"For a list of available CPUs for the target use '-mcpu=help'">;
 def mmcu_EQ : Joined<["-"], "mmcu=">, Group<m_Group>;
 def msim : Flag<["-"], "msim">, Group<m_Group>;
 def mdynamic_no_pic : Joined<["-"], "mdynamic-no-pic">, Group<m_Group>;
@@ -4952,8 +4956,8 @@
 def nofixprebinding : Flag<["-"], "nofixprebinding">;
 def nolibc : Flag<["-"], "nolibc">;
 def nomultidefs : Flag<["-"], "nomultidefs">;
-def nopie : Flag<["-"], "nopie">;
-def no_pie : Flag<["-"], "no-pie">, Alias<nopie>;
+def nopie : Flag<["-"], "nopie">, Vis<[Default, FlangOption]>;
+def no_pie : Flag<["-"], "no-pie">, Vis<[Default, FlangOption]>, Alias<nopie>;
 def noprebind : Flag<["-"], "noprebind">;
 def noprofilelib : Flag<["-"], "noprofilelib">;
 def noseglinkedit : Flag<["-"], "noseglinkedit">;
@@ -5297,8 +5301,6 @@
 def _for_linker : Separate<["--"], "for-linker">, Alias<Xlinker>;
 def _force_link_EQ : Joined<["--"], "force-link=">, Alias<u>;
 def _force_link : Separate<["--"], "force-link">, Alias<u>;
-def _help_hidden : Flag<["--"], "help-hidden">,
-  HelpText<"Display help for hidden options">;
 def _imacros_EQ : Joined<["--"], "imacros=">, Alias<imacros>;
 def _include_barrier : Flag<["--"], "include-barrier">, Alias<I_>;
 def _include_directory_after_EQ : Joined<["--"], "include-directory-after=">, Alias<idirafter>;
@@ -5354,8 +5356,6 @@
 def _signed_char : Flag<["--"], "signed-char">, Alias<fsigned_char>;
 def _std : Separate<["--"], "std">, Alias<std_EQ>;
 def _stdlib : Separate<["--"], "stdlib">, Alias<stdlib_EQ>;
-def _sysroot_EQ : Joined<["--"], "sysroot=">;
-def _sysroot : Separate<["--"], "sysroot">, Alias<_sysroot_EQ>;
 def _target_help : Flag<["--"], "target-help">;
 def _trace_includes : Flag<["--"], "trace-includes">, Alias<H>;
 def _undefine_macro_EQ : Joined<["--"], "undefine-macro=">, Alias<U>;
@@ -5368,6 +5368,22 @@
 def _write_dependencies : Flag<["--"], "write-dependencies">, Alias<MD>;
 def _write_user_dependencies : Flag<["--"], "write-user-dependencies">, Alias<MMD>;
 
+def _help_hidden : Flag<["--"], "help-hidden">,
+  Vis<[Default, FlangOption]>,
+  HelpText<"Display help for hidden options">;
+def _sysroot_EQ : Joined<["--"], "sysroot=">, Vis<[Default, FlangOption]>;
+def _sysroot : Separate<["--"], "sysroot">, Alias<_sysroot_EQ>;
+
+//===----------------------------------------------------------------------===//
+// Target Options (clang + flang-new)
+//===----------------------------------------------------------------------===//
+let Vis = [Default, FlangOption] in {
+
+def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>,
+  HelpText<"For a list of available CPUs for the target use '-mcpu=help'">;
+
+} // let Vis = [Default, FlangOption]
+
 // Hexagon feature flags.
 let Flags = [TargetSpecific] in {
 def mieee_rnd_near : Flag<["-"], "mieee-rnd-near">,
@@ -5712,7 +5728,7 @@
 // style of double-dash and equals-joined flags.
 def target_legacy_spelling : Separate<["-"], "target">,
                              Alias<target>,
-                             Vis<[Default, CLOption, DXCOption]>;
+                             Vis<[Default, CLOption, DXCOption, FlangOption]>;
 
 // Special internal option to handle -Xlinker --no-demangle.
 def Z_Xlinker__no_demangle : Flag<["-"], "Z-Xlinker-no-demangle">,
@@ -5737,7 +5753,7 @@
 }
 
 multiclass FlangIgnoredDiagOpt<string name> {
-  def unsupported_warning_w#NAME : Flag<["-", "--"], "W"#name>, Group<flang_ignored_w_Group>;
+  def unsupported_warning_w#NAME : Flag<["-", "--"], "W"#name>,Vis<[FlangOption]>, Group<flang_ignored_w_Group>;
 }
 
 defm : BooleanFFlag<"keep-inline-functions">, Group<clang_ignored_gcc_optimization_f_Group>;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to