Annoying ".i90",".i" files when using ifort compiler

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?

1 Like

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

-no-save-temps 
-nofpp

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.

2 Likes

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.)

1 Like

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 -no-save-temps?

1 Like

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.

1 Like

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

end
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
1 Like

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:

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 .mod and .smod after the end of the mock compilation.

1 Like

Attention @greenrongreen

@FortranFan I am on it. It looks like a bug, I’ll write up a bug report or relay what I discover.

1 Like

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
Ignores -no-save-temps

Keep up with all the latest from the Intel Fortran team by following me on Twitter @iCompilersRon
Ron Green #IAmIntel

3 Likes

Thanks @greenrongreen. When you release a patch I’ll make sure to propagate the changes in vscode.