Author: Andrzej Warzynski Date: 2021-02-25T13:13:42Z New Revision: baebc1162f810f7bf5de48919054f75a2f81e180
URL: https://github.com/llvm/llvm-project/commit/baebc1162f810f7bf5de48919054f75a2f81e180 DIFF: https://github.com/llvm/llvm-project/commit/baebc1162f810f7bf5de48919054f75a2f81e180.diff LOG: [clang][driver] Set the input type to Fortran when reading from stdin This patch makes sure that for the following invocation of the new Flang driver, clangDriver sets the input type to Fortran: ``` flang-new -E - ``` This change does not affect `clang`, i.e. for the following invocation the input type is set to C: ``` clang -E - ``` This change leverages the fact that for `flang-new` the driver is in Flang mode. Differential Revision: https://reviews.llvm.org/D96777 Added: Modified: clang/lib/Driver/Driver.cpp flang/test/Flang-Driver/input-from-stdin.f90 Removed: ################################################################################ diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 8c180140ae92..5aa0011d80ef 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -2191,15 +2191,20 @@ void Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, // 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 index 05f99a300c19..d95218abe278 100644 --- 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 <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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits