This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug preprocessor/64517] Inconsistent behavior when mixing -E and -M


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64517

Dominique d'Humieres <dominiq at lps dot ens.fr> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2015-01-09
          Component|fortran                     |preprocessor
     Ever confirmed|0                           |1

--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Fist the -E and -M options are not gfortran specific (see
https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options).

For the following C code

 cat vbmi.c
        typedef char __v64qi __attribute__ ((__vector_size__ (64)));
        __v64qi
        _mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y)
        {
          return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi)
__X,
                                                                 (__v64qi) __Y,
                                                                 (__v64qi) __Y,
                                                                 -1);
        }

gcc vbmi.c -M

gives

vbmi.o: vbmi.c

gcc vbmi.c -E

gives

# 1 "vbmi.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "vbmi.c"
        typedef char __v64qi __attribute__ ((__vector_size__ (64)));
        __v64qi
        _mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y)
        {
          return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi)
__X,
                                                                 (__v64qi) __Y,
                                                                 (__v64qi) __Y,
                                                                 -1);
        }

and

gcc vbmi.c -E -M

gives

vbmi.o: vbmi.c

So it seems that the sentence

Passing -M to the driver implies -E, ...

is not accurate. Thus I am moving the PR to the 'preprocessor' component.

> There is a bigger problem that I didn't immediately recognize with
> the empty file: Using `-M` results in gfortran trying to compile
> the source. I.e., it does *not* stop after preprocessing, which
> it should if `-E` is implied.

I don't see that (at least using -E on a code generating *.mod files when
compiled does not generate these files).

Note that the use of preprocessor with fortran leads to several PRs: see
pr47485, pr47486, pr47720, and pr49149.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]