When choosing ifort as compiler, it will automatically genearate “xxx.i90” file for “xxx.f90” and “xxxx.i” for “xxxx.f”. I don’t know what the “i90” files are used for. But it is really annoying sometimes. Am I able to disable the generation of the “i” files?
Hi @Pram welcome to Fortran-lang, this is because the preprocessor is enabled by default and ifort’s preprocessor by default generates these files. There might be some setting that you can pass that suppresses them.
FYI in the pre-release version of the extension the generated lin files are hidden so you wouldn’t be able to see these i.90 files.
What platform are you on? That is not the default on all platforms. See the switches
If your file does not need preprocessing, -nofpp will prevent the unneeded step as well as not generate the *.i files; if you do not want the intermediate files saved, -no-save-temps will erase them automatically; but I did not know that was the default on any platform unless someone changed your defaults when they installed or you have a config file or environment variable you forgot about, as the intel compilers let you change the system defaults, or customized the defaults via environment variables and config files.
Could be wrong and it could be the default on some systems, but you can use those features to change your personal defaults or add the above switches as appropriate, or their MSWindows equivalents.
It’s not the platform default, just the linter’s default from the Modern Fortran vscode extension. We enabled the preprocessor by default years ago when only gfortran was supported. I still think it’s good for the linter to work on most source files by default but I might also add
-no-save-temps as a flag to not create unnecessary files.
Welcome to the forum @Pram. You can also get help for Intel compiler-specific questions from their dedicated Intel Fortran forum. The forum has tens of thousands of related questions and tens of experts and active compiler developers ready to help with such questions. I am impressed by the quality of their work and responsiveness.
This forum is also a great place to ask such questions.
Here is the flags @urbanjost mentioned for all platforms:
Yes, Intel Fortran generates .i90 files when you enable the preprocessor, but the default is that they are put in your temp folder so you should not be seeing them. I think they get deleted after the compile (unless you use the option to keep them.)
I think the combo of the mandatory linter flags for ifort might be causing the .i90 files to persist, see:
would you recommend using some other combo of flags? Maybe include
It does look like a bug. When -fpp and -syntax-only are used a .if90 file remains; and still remains even when using -no-save-temps on my platform.
Anything I tried with “ifort -fpp -syntax-only” left the .i90 file; but so did “ifort -fpp -syntax-only -no-save-temps”; and the file is created in the current directory even if $TEMPDIR is set.
I think just remove the “-fpp” flag, then everything will be all right. BTW, I’m just a beginner, thanks for all your replies. They’re really helpful.
if the preprocessor is disabled by default the linter will fail in the presence of preprocessor macros, which would be a problem.
I am a user and have the same problem.
Thanks that you are working on a solution.
A related inquiry posted at the Intel Fortran forum with a request for additional support on Windows OS.
Example code in p.f90
C:\temp>dir *.i90 Volume in drive C is OSDisk Volume Serial Number is 661E-520F Directory of C:\temp File Not Found C:\temp>ifort /fpp /syntax-only /Qno-save-temps p.f90 Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.7.0 Build 20220726_000000 Copyright (C) 1985-2022 Intel Corporation. All rights reserved. C:\temp>dir *.i90 Volume in drive C is OSDisk Volume Serial Number is 661E-520F Directory of C:\temp 11/12/2022 10:00 AM 19 p.i90 1 File(s) 19 bytes
Cheers for posting this on the Intel forum. I suspect that the failure to discard temporary files has to do with when the removal happens:
- Linux & MacOS “The .o file is put into /tmp and deleted after calling ld.”
- Windows “The preprocessed file is not saved after it has been used by the compiler.”
When using the
syntax-only flag the linker is never invoked hence the cleanup never happens (pure speculation on my part). When/If that is fixed Intel should keep in mind that some people, us included, will still need the generated
.smod after the end of the mock compilation.
@FortranFan I am on it. It looks like a bug, I’ll write up a bug report or relay what I discover.
Bug ID CMPLRLLVM-41942. Affects Windows and linux for both ifx and ifort drivers + macOS ifort driver.
combination of -fpp -syntax-only does several things wrong
changes location of .i files from TMPDIR to CWD (this may be ‘expected’ behavior you’d want from -fpp)
Does not remove .i files after compilation
Keep up with all the latest from the Intel Fortran team by following me on Twitter @iCompilersRon
Ron Green #IAmIntel
Thanks @greenrongreen. When you release a patch I’ll make sure to propagate the changes in vscode.
Is this problem solved yet. I am using
ifort as my linter compiler in vs code and can see those
.i90 files everywhere.
@koushikphy unfortunately it is not fixed as of today. It is an annoying error. I will check with the developer but I would not expect a fix until the fall/winter release at the earliest. 2023 Update 2 is already at code freeze and it’s not fixed in that build.