This patch adds support for `-save-temps` in `flang-new`, Flang's compiler driver. The semantics of this option are inherited from Clang. The file extension for temporary Fortran preprocessed files is set to `i`. This is identical to what Clang uses for C (or C++) preprocessed files. I have tried researching what other compilers do here, but I couldn't find any definitive answers. One GFortran thread [1] suggests that indeed it is not clear what the right approach should be. Normally, various phases in Clang/Flang are combined. The `-save-temps` option works by forcing the compiler to run every phase separately. As there is no integrated assembler driver in Flang, user will have to use `-save-temps` together with `-fno-integrated-as`. Otherwise, an invocation to the integrated assembler would be generated generated, which is going to fail (i.e. something equivalent to `clang -cc1as` from Clang). There are no specific plans for implementing an integrated assembler for Flang for now. One possible solution would be to share it entirely with Clang. Note that on Windows you will get the following error when using `-fno-integrated-as`: ```bash flang-new: error: there is no external assembler that can be used on this platform ``` Unfortunately, I don't have access to a Windows machine to investigate this. Instead, I marked the tests in this patch as unsupported on Windows. [1] https://gcc.gnu.org/bugzilla//show_bug.cgi?id=81615 Differential Revision: https://reviews.llvm.org/D124669
83 lines
5.0 KiB
Fortran
83 lines
5.0 KiB
Fortran
|
|
!--------------------------
|
|
! FLANG DRIVER (flang-new)
|
|
!--------------------------
|
|
! RUN: %flang --help-hidden 2>&1 | FileCheck %s
|
|
! RUN: not %flang -help-hidden 2>&1 | FileCheck %s --check-prefix=ERROR-FLANG
|
|
|
|
!----------------------------------------
|
|
! FLANG FRONTEND DRIVER (flang-new -fc1)
|
|
!----------------------------------------
|
|
! RUN: not %flang_fc1 --help-hidden 2>&1 | FileCheck %s --check-prefix=ERROR-FLANG-FC1
|
|
! RUN: not %flang_fc1 -help-hidden 2>&1 | FileCheck %s --check-prefix=ERROR-FLANG-FC1
|
|
|
|
!----------------------------------------------------
|
|
! EXPECTED OUTPUT FOR FLANG DRIVER (flang-new)
|
|
!----------------------------------------------------
|
|
! 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: -falternative-parameter-statement
|
|
! CHECK-NEXT: Enable the old style PARAMETER statement
|
|
! CHECK-NEXT: -fbackslash Specify that backslash in string introduces an escape character
|
|
! CHECK-NEXT: -fcolor-diagnostics Enable colors in diagnostics
|
|
! 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 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: -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: -ffree-form Process source files in free form
|
|
! 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: -flang-experimental-exec
|
|
! CHECK-NEXT: Enable support for generating executables (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: -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: -fopenacc Enable OpenACC
|
|
! CHECK-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code.
|
|
! CHECK-NEXT: -fxor-operator Enable .XOR. as a synonym of .NEQV.
|
|
! 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 <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: -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: -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
|
|
|
|
!-------------------------------------------------------------
|
|
! EXPECTED OUTPUT FOR FLANG DRIVER (flang-new)
|
|
!-------------------------------------------------------------
|
|
! ERROR-FLANG: error: unknown argument '-help-hidden'; did you mean '--help-hidden'?
|
|
|
|
!-------------------------------------------------------------
|
|
! EXPECTED OUTPUT FOR FLANG FRONTEND DRIVER (flang-new -fc1)
|
|
!-------------------------------------------------------------
|
|
! Frontend driver -help-hidden is not supported
|
|
! ERROR-FLANG-FC1: error: unknown argument: '{{.*}}'
|
|
|