This revision was automatically updated to reflect the committed changes. Closed by commit rGbaebc1162f81: [clang][driver] Set the input type to Fortran when reading from stdin (authored by awarzynski).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D96777/new/ https://reviews.llvm.org/D96777 Files: clang/lib/Driver/Driver.cpp flang/test/Flang-Driver/input-from-stdin.f90 Index: flang/test/Flang-Driver/input-from-stdin.f90 =================================================================== --- flang/test/Flang-Driver/input-from-stdin.f90 +++ flang/test/Flang-Driver/input-from-stdin.f90 @@ -5,19 +5,22 @@ !-------------------------- ! FLANG DRIVER (flang-new) !-------------------------- -! TODO: Add support for `flang-new -` -! Currently `bin/flang-new -E -` defaults to `-x c` and e.g. F90 is not allowed -! in `-x <input-type>` (see `clang::driver::types::canTypeBeUserSpecified` in -! Types.cpp) +! Input type is implicit +! RUN: cat %s | flang-new -E - | FileCheck %s --check-prefix=PP-NOT-DEFINED +! RUN: cat %s | flang-new -DNEW -E - | FileCheck %s --check-prefix=PP-DEFINED + +! Input type is explicit +! RUN: cat %s | flang-new -E -x f95-cpp-input - | FileCheck %s --check-prefix=PP-NOT-DEFINED +! RUN: cat %s | flang-new -DNEW -E -x f95-cpp-input - | FileCheck %s --check-prefix=PP-DEFINED !--------------------------------------- ! FLANG FRONTEND DRIVER (flang-new -fc1) !--------------------------------------- -! Test `-E` - for the corresponding frontend actions the driver relies on the prescanner API to handle file I/O +! Test `-E`: for the corresponding frontend actions the driver relies on the prescanner API to handle file I/O ! RUN: cat %s | flang-new -fc1 -E | FileCheck %s --check-prefix=PP-NOT-DEFINED ! RUN: cat %s | flang-new -fc1 -DNEW -E | FileCheck %s --check-prefix=PP-DEFINED -! Test `-test-io` - for the corresponding frontend action (`InputOutputTestAction`) the driver handles the file I/O on its own +! Test `-test-io`: for the corresponding frontend action (`InputOutputTestAction`) the driver handles the file I/O on its own ! the corresponding action (`PrintPreprocessedAction`) ! RUN: cat %s | flang-new -fc1 -test-io | FileCheck %s --check-prefix=IO --match-full-lines ! RUN: cat %s | flang-new -fc1 -DNEW -test-io | FileCheck %s --check-prefix=IO --match-full-lines Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -2191,15 +2191,20 @@ // stdin must be handled specially. if (memcmp(Value, "-", 2) == 0) { - // If running with -E, treat as a C input (this changes the builtin - // macros, for example). This may be overridden by -ObjC below. - // - // Otherwise emit an error but still use a valid type to avoid - // spurious errors (e.g., no inputs). - if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP()) - Diag(IsCLMode() ? clang::diag::err_drv_unknown_stdin_type_clang_cl - : clang::diag::err_drv_unknown_stdin_type); - Ty = types::TY_C; + if (IsFlangMode()) { + Ty = types::TY_Fortran; + } else { + // If running with -E, treat as a C input (this changes the + // builtin macros, for example). This may be overridden by -ObjC + // below. + // + // Otherwise emit an error but still use a valid type to avoid + // spurious errors (e.g., no inputs). + if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP()) + Diag(IsCLMode() ? clang::diag::err_drv_unknown_stdin_type_clang_cl + : clang::diag::err_drv_unknown_stdin_type); + Ty = types::TY_C; + } } else { // Otherwise lookup by extension. // Fallback is C if invoked as C preprocessor, C++ if invoked with
Index: flang/test/Flang-Driver/input-from-stdin.f90 =================================================================== --- flang/test/Flang-Driver/input-from-stdin.f90 +++ flang/test/Flang-Driver/input-from-stdin.f90 @@ -5,19 +5,22 @@ !-------------------------- ! FLANG DRIVER (flang-new) !-------------------------- -! TODO: Add support for `flang-new -` -! Currently `bin/flang-new -E -` defaults to `-x c` and e.g. F90 is not allowed -! in `-x <input-type>` (see `clang::driver::types::canTypeBeUserSpecified` in -! Types.cpp) +! Input type is implicit +! RUN: cat %s | flang-new -E - | FileCheck %s --check-prefix=PP-NOT-DEFINED +! RUN: cat %s | flang-new -DNEW -E - | FileCheck %s --check-prefix=PP-DEFINED + +! Input type is explicit +! RUN: cat %s | flang-new -E -x f95-cpp-input - | FileCheck %s --check-prefix=PP-NOT-DEFINED +! RUN: cat %s | flang-new -DNEW -E -x f95-cpp-input - | FileCheck %s --check-prefix=PP-DEFINED !--------------------------------------- ! FLANG FRONTEND DRIVER (flang-new -fc1) !--------------------------------------- -! Test `-E` - for the corresponding frontend actions the driver relies on the prescanner API to handle file I/O +! Test `-E`: for the corresponding frontend actions the driver relies on the prescanner API to handle file I/O ! RUN: cat %s | flang-new -fc1 -E | FileCheck %s --check-prefix=PP-NOT-DEFINED ! RUN: cat %s | flang-new -fc1 -DNEW -E | FileCheck %s --check-prefix=PP-DEFINED -! Test `-test-io` - for the corresponding frontend action (`InputOutputTestAction`) the driver handles the file I/O on its own +! Test `-test-io`: for the corresponding frontend action (`InputOutputTestAction`) the driver handles the file I/O on its own ! the corresponding action (`PrintPreprocessedAction`) ! RUN: cat %s | flang-new -fc1 -test-io | FileCheck %s --check-prefix=IO --match-full-lines ! RUN: cat %s | flang-new -fc1 -DNEW -test-io | FileCheck %s --check-prefix=IO --match-full-lines Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -2191,15 +2191,20 @@ // stdin must be handled specially. if (memcmp(Value, "-", 2) == 0) { - // If running with -E, treat as a C input (this changes the builtin - // macros, for example). This may be overridden by -ObjC below. - // - // Otherwise emit an error but still use a valid type to avoid - // spurious errors (e.g., no inputs). - if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP()) - Diag(IsCLMode() ? clang::diag::err_drv_unknown_stdin_type_clang_cl - : clang::diag::err_drv_unknown_stdin_type); - Ty = types::TY_C; + if (IsFlangMode()) { + Ty = types::TY_Fortran; + } else { + // If running with -E, treat as a C input (this changes the + // builtin macros, for example). This may be overridden by -ObjC + // below. + // + // Otherwise emit an error but still use a valid type to avoid + // spurious errors (e.g., no inputs). + if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP()) + Diag(IsCLMode() ? clang::diag::err_drv_unknown_stdin_type_clang_cl + : clang::diag::err_drv_unknown_stdin_type); + Ty = types::TY_C; + } } else { // Otherwise lookup by extension. // Fallback is C if invoked as C preprocessor, C++ if invoked with
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits