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 fortran/67250] New: gfortran does not faithfully preprocess the way cpp does


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

            Bug ID: 67250
           Summary: gfortran does not faithfully preprocess the way cpp
                    does
           Product: gcc
           Version: 5.2.0
            Status: UNCONFIRMED
          Severity: blocker
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jeff.science at gmail dot com
  Target Milestone: ---

Created attachment 36195
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36195&action=edit
source file

I do not understand why "gfortran -I. -E source.F" does not give the same
result as "cpp-5 -I. -E source.F".  It appears that gfortran does not properly
preprocessor "#", "##" and "\".

This breaks NWChem and there is no obvious workaround.

> cat header.fh 
! comment
      integer foo
      external foo
#define DECL(a) \
      integer err_##a; \
      integer l_##a,k_##a;
#define ALLO(a,s) \
      err_##a=foo(s,#a,l_##a,k_##a); \
      if (.not.err_##a) call bar("PUSH"#a,#s);

> cat source.F 
C
C OLD SCHOOL COMMENTS
C
      subroutine xyz(stuff)
      implicit none
#include "header.fh"
      integer stuff
      DECL(handle)
      ALLO(handle,100)
      print*,stuff
      return
      end


> gfortran -I. -E source.F 
# 1 "source.F"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "source.F"
C
C OLD SCHOOL COMMENTS
C
      subroutine xyz(stuff)
      implicit none

# 1 "header.fh" 1
! comment
      integer foo
      external foo
# 7 "source.F" 2
      integer stuff
      integer err_##handle;       integer l_##handle,k_##handle;
      err_##handle=foo(100,#handle,l_##handle,k_##handle);       if
(.not.err_##handle) call bar("PUSH"#handle,#100);
      print*,stuff
      return
      end

> cpp-5 -I. -E source.F 
# 1 "source.F"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "source.F"
C
C OLD SCHOOL COMMENTS
C
      subroutine xyz(stuff)
      implicit none
# 1 "header.fh" 1
! comment
      integer foo
      external foo
# 7 "source.F" 2
      integer stuff
      integer err_handle; integer l_handle,k_handle;
      err_handle=foo(100,"handle",l_handle,k_handle); if (.not.err_handle) call
bar("PUSH""handle","100");
      print*,stuff
      return
      end

> gfortran-5 -v
Using built-in specs.
COLLECT_GCC=gfortran-5
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/5.2.0/libexec/gcc/x86_64-apple-darwin14.4.0/5.2.0/lto-wrapper
Target: x86_64-apple-darwin14.4.0
Configured with: ../configure --build=x86_64-apple-darwin14.4.0
--prefix=/usr/local/Cellar/gcc/5.2.0
--libdir=/usr/local/Cellar/gcc/5.2.0/lib/gcc/5
--enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-5
--with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr
--with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl
--with-system-zlib --enable-libstdcxx-time=yes --enable-stage1-checking
--enable-checking=release --enable-lto --with-build-config=bootstrap-debug
--disable-werror --with-pkgversion='Homebrew gcc 5.2.0 --without-multilib'
--with-bugurl=https://github.com/Homebrew/homebrew/issues --enable-plugin
--disable-nls --disable-multilib
Thread model: posix
gcc version 5.2.0 (Homebrew gcc 5.2.0 --without-multilib)


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