https://github.com/ergawy updated https://github.com/llvm/llvm-project/pull/104664
>From 4ad28a2ab6566121994f14ea233f4fd27aca3285 Mon Sep 17 00:00:00 2001 From: ergawy <kareem.erg...@amd.com> Date: Sat, 17 Aug 2024 00:20:11 -0500 Subject: [PATCH] [flang][driver] Add pre-processing type to `.i` files This diff allows `.i` files emitted by flang-new to be treated as valid files in the pre-processing phase. This, in turn, allows flang-new to add pre-processing options (e.g. `-I`) when launching compilation jobs for these files. This solves a bug when using `--save-temps` with source files that include modules from non-standard directories, for example: ``` flang-new -c --save-temps -I/tmp/module_dir -fno-integrated-as \ /tmp/ModuleUser.f90 ``` The problem was that `.i` files were treated as "binary" files and therefore the return value for `types::getPreprocessedType(InputType)` in `Flang::ConstructJob(...)` was `types::TY_INVALID`. --- clang/include/clang/Driver/Types.def | 9 ++++++- flang/test/Driver/save-temps-use-module.f90 | 26 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 flang/test/Driver/save-temps-use-module.f90 diff --git a/clang/include/clang/Driver/Types.def b/clang/include/clang/Driver/Types.def index 0e0cae5fb7068d..cdb8ca96225b8d 100644 --- a/clang/include/clang/Driver/Types.def +++ b/clang/include/clang/Driver/Types.def @@ -79,7 +79,14 @@ TYPE("c++-module-cpp-output", PP_CXXModule, INVALID, "iim", phases TYPE("ada", Ada, INVALID, nullptr, phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("assembler", PP_Asm, INVALID, "s", phases::Assemble, phases::Link) TYPE("assembler-with-cpp", Asm, PP_Asm, "S", phases::Preprocess, phases::Assemble, phases::Link) -TYPE("f95", PP_Fortran, INVALID, "i", phases::Compile, phases::Backend, phases::Assemble, phases::Link) + +// Note: The `phases::Preprocess` phase is added to ".i" (i.e. +// Fortran pre-processed) files. The reason is that Fortran +// pre-processed files need further pre-proecessing when they +// include modules from non-standard paths. In particular, we +// need to add the search paths for these modules when flang +// needs to emits pre-processed files. +TYPE("f95", PP_Fortran, PP_Fortran, "i", phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("f95-cpp-input", Fortran, PP_Fortran, nullptr, phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("java", Java, INVALID, nullptr, phases::Compile, phases::Backend, phases::Assemble, phases::Link) diff --git a/flang/test/Driver/save-temps-use-module.f90 b/flang/test/Driver/save-temps-use-module.f90 new file mode 100644 index 00000000000000..2f184d15898571 --- /dev/null +++ b/flang/test/Driver/save-temps-use-module.f90 @@ -0,0 +1,26 @@ +! Tests that `--save-temps` works properly when a module from a non standard dir +! is included with `-I/...`. + +! RUN: rm -rf %t && split-file %s %t +! RUN: mkdir %t/mod_inc_dir +! RUN: mv %t/somemodule.mod %t/mod_inc_dir +! RUN: %flang -S -emit-llvm --save-temps=obj -I%t/mod_inc_dir -fno-integrated-as \ +! RUN: %t/ModuleUser.f90 -o %t/ModuleUser +! RUN: ls %t | FileCheck %s + +! Verify that the temp file(s) were written to disk. +! CHECK: ModuleUser.i + +!--- somemodule.mod +!mod$ v1 sum:e9e8fd2bd49e8daa +module SomeModule + +end module SomeModule +!--- ModuleUser.f90 + +module User + use SomeModule +end module User + +program dummy +end program _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits