[PATCH] D96777: [clang][driver] Set the input type to Fortran when reading from stdin

Andrzej Warzynski via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 25 05:14:22 PST 2021


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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96777.326364.patch
Type: text/x-patch
Size: 3594 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210225/ffe69561/attachment.bin>


More information about the cfe-commits mailing list