diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp --- a/clang/lib/Driver/Driver.cpp +++ b/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 diff --git a/flang/test/Flang-Driver/input-from-stdin.f90 b/flang/test/Flang-Driver/input-from-stdin.f90 --- a/flang/test/Flang-Driver/input-from-stdin.f90 +++ b/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 ` (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