aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/scanner.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-01-14 16:56:44 +0100
committerMartin Liska <mliska@suse.cz>2022-01-17 22:12:04 +0100
commit5c69acb32329d49e58c26fa41ae74229a52b9106 (patch)
treeddb05f9d73afb6f998457d2ac4b720e3b3b60483 /gcc/fortran/scanner.c
parent490e23032baaece71f2ec09fa1805064b150fbc2 (diff)
downloadgcc-5c69acb32329d49e58c26fa41ae74229a52b9106.zip
gcc-5c69acb32329d49e58c26fa41ae74229a52b9106.tar.gz
gcc-5c69acb32329d49e58c26fa41ae74229a52b9106.tar.bz2
Rename .c files to .cc files.
gcc/ada/ChangeLog: * adadecode.c: Moved to... * adadecode.cc: ...here. * affinity.c: Moved to... * affinity.cc: ...here. * argv-lynxos178-raven-cert.c: Moved to... * argv-lynxos178-raven-cert.cc: ...here. * argv.c: Moved to... * argv.cc: ...here. * aux-io.c: Moved to... * aux-io.cc: ...here. * cio.c: Moved to... * cio.cc: ...here. * cstreams.c: Moved to... * cstreams.cc: ...here. * env.c: Moved to... * env.cc: ...here. * exit.c: Moved to... * exit.cc: ...here. * expect.c: Moved to... * expect.cc: ...here. * final.c: Moved to... * final.cc: ...here. * gcc-interface/cuintp.c: Moved to... * gcc-interface/cuintp.cc: ...here. * gcc-interface/decl.c: Moved to... * gcc-interface/decl.cc: ...here. * gcc-interface/misc.c: Moved to... * gcc-interface/misc.cc: ...here. * gcc-interface/targtyps.c: Moved to... * gcc-interface/targtyps.cc: ...here. * gcc-interface/trans.c: Moved to... * gcc-interface/trans.cc: ...here. * gcc-interface/utils.c: Moved to... * gcc-interface/utils.cc: ...here. * gcc-interface/utils2.c: Moved to... * gcc-interface/utils2.cc: ...here. * init.c: Moved to... * init.cc: ...here. * initialize.c: Moved to... * initialize.cc: ...here. * libgnarl/thread.c: Moved to... * libgnarl/thread.cc: ...here. * link.c: Moved to... * link.cc: ...here. * locales.c: Moved to... * locales.cc: ...here. * mkdir.c: Moved to... * mkdir.cc: ...here. * raise.c: Moved to... * raise.cc: ...here. * rtfinal.c: Moved to... * rtfinal.cc: ...here. * rtinit.c: Moved to... * rtinit.cc: ...here. * seh_init.c: Moved to... * seh_init.cc: ...here. * sigtramp-armdroid.c: Moved to... * sigtramp-armdroid.cc: ...here. * sigtramp-ios.c: Moved to... * sigtramp-ios.cc: ...here. * sigtramp-qnx.c: Moved to... * sigtramp-qnx.cc: ...here. * sigtramp-vxworks.c: Moved to... * sigtramp-vxworks.cc: ...here. * socket.c: Moved to... * socket.cc: ...here. * tracebak.c: Moved to... * tracebak.cc: ...here. * version.c: Moved to... * version.cc: ...here. * vx_stack_info.c: Moved to... * vx_stack_info.cc: ...here. gcc/ChangeLog: * adjust-alignment.c: Moved to... * adjust-alignment.cc: ...here. * alias.c: Moved to... * alias.cc: ...here. * alloc-pool.c: Moved to... * alloc-pool.cc: ...here. * asan.c: Moved to... * asan.cc: ...here. * attribs.c: Moved to... * attribs.cc: ...here. * auto-inc-dec.c: Moved to... * auto-inc-dec.cc: ...here. * auto-profile.c: Moved to... * auto-profile.cc: ...here. * bb-reorder.c: Moved to... * bb-reorder.cc: ...here. * bitmap.c: Moved to... * bitmap.cc: ...here. * btfout.c: Moved to... * btfout.cc: ...here. * builtins.c: Moved to... * builtins.cc: ...here. * caller-save.c: Moved to... * caller-save.cc: ...here. * calls.c: Moved to... * calls.cc: ...here. * ccmp.c: Moved to... * ccmp.cc: ...here. * cfg.c: Moved to... * cfg.cc: ...here. * cfganal.c: Moved to... * cfganal.cc: ...here. * cfgbuild.c: Moved to... * cfgbuild.cc: ...here. * cfgcleanup.c: Moved to... * cfgcleanup.cc: ...here. * cfgexpand.c: Moved to... * cfgexpand.cc: ...here. * cfghooks.c: Moved to... * cfghooks.cc: ...here. * cfgloop.c: Moved to... * cfgloop.cc: ...here. * cfgloopanal.c: Moved to... * cfgloopanal.cc: ...here. * cfgloopmanip.c: Moved to... * cfgloopmanip.cc: ...here. * cfgrtl.c: Moved to... * cfgrtl.cc: ...here. * cgraph.c: Moved to... * cgraph.cc: ...here. * cgraphbuild.c: Moved to... * cgraphbuild.cc: ...here. * cgraphclones.c: Moved to... * cgraphclones.cc: ...here. * cgraphunit.c: Moved to... * cgraphunit.cc: ...here. * collect-utils.c: Moved to... * collect-utils.cc: ...here. * collect2-aix.c: Moved to... * collect2-aix.cc: ...here. * collect2.c: Moved to... * collect2.cc: ...here. * combine-stack-adj.c: Moved to... * combine-stack-adj.cc: ...here. * combine.c: Moved to... * combine.cc: ...here. * common/common-targhooks.c: Moved to... * common/common-targhooks.cc: ...here. * common/config/aarch64/aarch64-common.c: Moved to... * common/config/aarch64/aarch64-common.cc: ...here. * common/config/alpha/alpha-common.c: Moved to... * common/config/alpha/alpha-common.cc: ...here. * common/config/arc/arc-common.c: Moved to... * common/config/arc/arc-common.cc: ...here. * common/config/arm/arm-common.c: Moved to... * common/config/arm/arm-common.cc: ...here. * common/config/avr/avr-common.c: Moved to... * common/config/avr/avr-common.cc: ...here. * common/config/bfin/bfin-common.c: Moved to... * common/config/bfin/bfin-common.cc: ...here. * common/config/bpf/bpf-common.c: Moved to... * common/config/bpf/bpf-common.cc: ...here. * common/config/c6x/c6x-common.c: Moved to... * common/config/c6x/c6x-common.cc: ...here. * common/config/cr16/cr16-common.c: Moved to... * common/config/cr16/cr16-common.cc: ...here. * common/config/cris/cris-common.c: Moved to... * common/config/cris/cris-common.cc: ...here. * common/config/csky/csky-common.c: Moved to... * common/config/csky/csky-common.cc: ...here. * common/config/default-common.c: Moved to... * common/config/default-common.cc: ...here. * common/config/epiphany/epiphany-common.c: Moved to... * common/config/epiphany/epiphany-common.cc: ...here. * common/config/fr30/fr30-common.c: Moved to... * common/config/fr30/fr30-common.cc: ...here. * common/config/frv/frv-common.c: Moved to... * common/config/frv/frv-common.cc: ...here. * common/config/gcn/gcn-common.c: Moved to... * common/config/gcn/gcn-common.cc: ...here. * common/config/h8300/h8300-common.c: Moved to... * common/config/h8300/h8300-common.cc: ...here. * common/config/i386/i386-common.c: Moved to... * common/config/i386/i386-common.cc: ...here. * common/config/ia64/ia64-common.c: Moved to... * common/config/ia64/ia64-common.cc: ...here. * common/config/iq2000/iq2000-common.c: Moved to... * common/config/iq2000/iq2000-common.cc: ...here. * common/config/lm32/lm32-common.c: Moved to... * common/config/lm32/lm32-common.cc: ...here. * common/config/m32r/m32r-common.c: Moved to... * common/config/m32r/m32r-common.cc: ...here. * common/config/m68k/m68k-common.c: Moved to... * common/config/m68k/m68k-common.cc: ...here. * common/config/mcore/mcore-common.c: Moved to... * common/config/mcore/mcore-common.cc: ...here. * common/config/microblaze/microblaze-common.c: Moved to... * common/config/microblaze/microblaze-common.cc: ...here. * common/config/mips/mips-common.c: Moved to... * common/config/mips/mips-common.cc: ...here. * common/config/mmix/mmix-common.c: Moved to... * common/config/mmix/mmix-common.cc: ...here. * common/config/mn10300/mn10300-common.c: Moved to... * common/config/mn10300/mn10300-common.cc: ...here. * common/config/msp430/msp430-common.c: Moved to... * common/config/msp430/msp430-common.cc: ...here. * common/config/nds32/nds32-common.c: Moved to... * common/config/nds32/nds32-common.cc: ...here. * common/config/nios2/nios2-common.c: Moved to... * common/config/nios2/nios2-common.cc: ...here. * common/config/nvptx/nvptx-common.c: Moved to... * common/config/nvptx/nvptx-common.cc: ...here. * common/config/or1k/or1k-common.c: Moved to... * common/config/or1k/or1k-common.cc: ...here. * common/config/pa/pa-common.c: Moved to... * common/config/pa/pa-common.cc: ...here. * common/config/pdp11/pdp11-common.c: Moved to... * common/config/pdp11/pdp11-common.cc: ...here. * common/config/pru/pru-common.c: Moved to... * common/config/pru/pru-common.cc: ...here. * common/config/riscv/riscv-common.c: Moved to... * common/config/riscv/riscv-common.cc: ...here. * common/config/rs6000/rs6000-common.c: Moved to... * common/config/rs6000/rs6000-common.cc: ...here. * common/config/rx/rx-common.c: Moved to... * common/config/rx/rx-common.cc: ...here. * common/config/s390/s390-common.c: Moved to... * common/config/s390/s390-common.cc: ...here. * common/config/sh/sh-common.c: Moved to... * common/config/sh/sh-common.cc: ...here. * common/config/sparc/sparc-common.c: Moved to... * common/config/sparc/sparc-common.cc: ...here. * common/config/tilegx/tilegx-common.c: Moved to... * common/config/tilegx/tilegx-common.cc: ...here. * common/config/tilepro/tilepro-common.c: Moved to... * common/config/tilepro/tilepro-common.cc: ...here. * common/config/v850/v850-common.c: Moved to... * common/config/v850/v850-common.cc: ...here. * common/config/vax/vax-common.c: Moved to... * common/config/vax/vax-common.cc: ...here. * common/config/visium/visium-common.c: Moved to... * common/config/visium/visium-common.cc: ...here. * common/config/xstormy16/xstormy16-common.c: Moved to... * common/config/xstormy16/xstormy16-common.cc: ...here. * common/config/xtensa/xtensa-common.c: Moved to... * common/config/xtensa/xtensa-common.cc: ...here. * compare-elim.c: Moved to... * compare-elim.cc: ...here. * config/aarch64/aarch64-bti-insert.c: Moved to... * config/aarch64/aarch64-bti-insert.cc: ...here. * config/aarch64/aarch64-builtins.c: Moved to... * config/aarch64/aarch64-builtins.cc: ...here. * config/aarch64/aarch64-c.c: Moved to... * config/aarch64/aarch64-c.cc: ...here. * config/aarch64/aarch64-d.c: Moved to... * config/aarch64/aarch64-d.cc: ...here. * config/aarch64/aarch64.c: Moved to... * config/aarch64/aarch64.cc: ...here. * config/aarch64/cortex-a57-fma-steering.c: Moved to... * config/aarch64/cortex-a57-fma-steering.cc: ...here. * config/aarch64/driver-aarch64.c: Moved to... * config/aarch64/driver-aarch64.cc: ...here. * config/aarch64/falkor-tag-collision-avoidance.c: Moved to... * config/aarch64/falkor-tag-collision-avoidance.cc: ...here. * config/aarch64/host-aarch64-darwin.c: Moved to... * config/aarch64/host-aarch64-darwin.cc: ...here. * config/alpha/alpha.c: Moved to... * config/alpha/alpha.cc: ...here. * config/alpha/driver-alpha.c: Moved to... * config/alpha/driver-alpha.cc: ...here. * config/arc/arc-c.c: Moved to... * config/arc/arc-c.cc: ...here. * config/arc/arc.c: Moved to... * config/arc/arc.cc: ...here. * config/arc/driver-arc.c: Moved to... * config/arc/driver-arc.cc: ...here. * config/arm/aarch-common.c: Moved to... * config/arm/aarch-common.cc: ...here. * config/arm/arm-builtins.c: Moved to... * config/arm/arm-builtins.cc: ...here. * config/arm/arm-c.c: Moved to... * config/arm/arm-c.cc: ...here. * config/arm/arm-d.c: Moved to... * config/arm/arm-d.cc: ...here. * config/arm/arm.c: Moved to... * config/arm/arm.cc: ...here. * config/arm/driver-arm.c: Moved to... * config/arm/driver-arm.cc: ...here. * config/avr/avr-c.c: Moved to... * config/avr/avr-c.cc: ...here. * config/avr/avr-devices.c: Moved to... * config/avr/avr-devices.cc: ...here. * config/avr/avr-log.c: Moved to... * config/avr/avr-log.cc: ...here. * config/avr/avr.c: Moved to... * config/avr/avr.cc: ...here. * config/avr/driver-avr.c: Moved to... * config/avr/driver-avr.cc: ...here. * config/avr/gen-avr-mmcu-specs.c: Moved to... * config/avr/gen-avr-mmcu-specs.cc: ...here. * config/avr/gen-avr-mmcu-texi.c: Moved to... * config/avr/gen-avr-mmcu-texi.cc: ...here. * config/bfin/bfin.c: Moved to... * config/bfin/bfin.cc: ...here. * config/bpf/bpf.c: Moved to... * config/bpf/bpf.cc: ...here. * config/bpf/coreout.c: Moved to... * config/bpf/coreout.cc: ...here. * config/c6x/c6x.c: Moved to... * config/c6x/c6x.cc: ...here. * config/cr16/cr16.c: Moved to... * config/cr16/cr16.cc: ...here. * config/cris/cris.c: Moved to... * config/cris/cris.cc: ...here. * config/csky/csky.c: Moved to... * config/csky/csky.cc: ...here. * config/darwin-c.c: Moved to... * config/darwin-c.cc: ...here. * config/darwin-d.c: Moved to... * config/darwin-d.cc: ...here. * config/darwin-driver.c: Moved to... * config/darwin-driver.cc: ...here. * config/darwin-f.c: Moved to... * config/darwin-f.cc: ...here. * config/darwin.c: Moved to... * config/darwin.cc: ...here. * config/default-c.c: Moved to... * config/default-c.cc: ...here. * config/default-d.c: Moved to... * config/default-d.cc: ...here. * config/dragonfly-d.c: Moved to... * config/dragonfly-d.cc: ...here. * config/epiphany/epiphany.c: Moved to... * config/epiphany/epiphany.cc: ...here. * config/epiphany/mode-switch-use.c: Moved to... * config/epiphany/mode-switch-use.cc: ...here. * config/epiphany/resolve-sw-modes.c: Moved to... * config/epiphany/resolve-sw-modes.cc: ...here. * config/fr30/fr30.c: Moved to... * config/fr30/fr30.cc: ...here. * config/freebsd-d.c: Moved to... * config/freebsd-d.cc: ...here. * config/frv/frv.c: Moved to... * config/frv/frv.cc: ...here. * config/ft32/ft32.c: Moved to... * config/ft32/ft32.cc: ...here. * config/gcn/driver-gcn.c: Moved to... * config/gcn/driver-gcn.cc: ...here. * config/gcn/gcn-run.c: Moved to... * config/gcn/gcn-run.cc: ...here. * config/gcn/gcn-tree.c: Moved to... * config/gcn/gcn-tree.cc: ...here. * config/gcn/gcn.c: Moved to... * config/gcn/gcn.cc: ...here. * config/gcn/mkoffload.c: Moved to... * config/gcn/mkoffload.cc: ...here. * config/glibc-c.c: Moved to... * config/glibc-c.cc: ...here. * config/glibc-d.c: Moved to... * config/glibc-d.cc: ...here. * config/h8300/h8300.c: Moved to... * config/h8300/h8300.cc: ...here. * config/host-darwin.c: Moved to... * config/host-darwin.cc: ...here. * config/host-hpux.c: Moved to... * config/host-hpux.cc: ...here. * config/host-linux.c: Moved to... * config/host-linux.cc: ...here. * config/host-netbsd.c: Moved to... * config/host-netbsd.cc: ...here. * config/host-openbsd.c: Moved to... * config/host-openbsd.cc: ...here. * config/host-solaris.c: Moved to... * config/host-solaris.cc: ...here. * config/i386/djgpp.c: Moved to... * config/i386/djgpp.cc: ...here. * config/i386/driver-i386.c: Moved to... * config/i386/driver-i386.cc: ...here. * config/i386/driver-mingw32.c: Moved to... * config/i386/driver-mingw32.cc: ...here. * config/i386/gnu-property.c: Moved to... * config/i386/gnu-property.cc: ...here. * config/i386/host-cygwin.c: Moved to... * config/i386/host-cygwin.cc: ...here. * config/i386/host-i386-darwin.c: Moved to... * config/i386/host-i386-darwin.cc: ...here. * config/i386/host-mingw32.c: Moved to... * config/i386/host-mingw32.cc: ...here. * config/i386/i386-builtins.c: Moved to... * config/i386/i386-builtins.cc: ...here. * config/i386/i386-c.c: Moved to... * config/i386/i386-c.cc: ...here. * config/i386/i386-d.c: Moved to... * config/i386/i386-d.cc: ...here. * config/i386/i386-expand.c: Moved to... * config/i386/i386-expand.cc: ...here. * config/i386/i386-features.c: Moved to... * config/i386/i386-features.cc: ...here. * config/i386/i386-options.c: Moved to... * config/i386/i386-options.cc: ...here. * config/i386/i386.c: Moved to... * config/i386/i386.cc: ...here. * config/i386/intelmic-mkoffload.c: Moved to... * config/i386/intelmic-mkoffload.cc: ...here. * config/i386/msformat-c.c: Moved to... * config/i386/msformat-c.cc: ...here. * config/i386/winnt-cxx.c: Moved to... * config/i386/winnt-cxx.cc: ...here. * config/i386/winnt-d.c: Moved to... * config/i386/winnt-d.cc: ...here. * config/i386/winnt-stubs.c: Moved to... * config/i386/winnt-stubs.cc: ...here. * config/i386/winnt.c: Moved to... * config/i386/winnt.cc: ...here. * config/i386/x86-tune-sched-atom.c: Moved to... * config/i386/x86-tune-sched-atom.cc: ...here. * config/i386/x86-tune-sched-bd.c: Moved to... * config/i386/x86-tune-sched-bd.cc: ...here. * config/i386/x86-tune-sched-core.c: Moved to... * config/i386/x86-tune-sched-core.cc: ...here. * config/i386/x86-tune-sched.c: Moved to... * config/i386/x86-tune-sched.cc: ...here. * config/ia64/ia64-c.c: Moved to... * config/ia64/ia64-c.cc: ...here. * config/ia64/ia64.c: Moved to... * config/ia64/ia64.cc: ...here. * config/iq2000/iq2000.c: Moved to... * config/iq2000/iq2000.cc: ...here. * config/linux.c: Moved to... * config/linux.cc: ...here. * config/lm32/lm32.c: Moved to... * config/lm32/lm32.cc: ...here. * config/m32c/m32c-pragma.c: Moved to... * config/m32c/m32c-pragma.cc: ...here. * config/m32c/m32c.c: Moved to... * config/m32c/m32c.cc: ...here. * config/m32r/m32r.c: Moved to... * config/m32r/m32r.cc: ...here. * config/m68k/m68k.c: Moved to... * config/m68k/m68k.cc: ...here. * config/mcore/mcore.c: Moved to... * config/mcore/mcore.cc: ...here. * config/microblaze/microblaze-c.c: Moved to... * config/microblaze/microblaze-c.cc: ...here. * config/microblaze/microblaze.c: Moved to... * config/microblaze/microblaze.cc: ...here. * config/mips/driver-native.c: Moved to... * config/mips/driver-native.cc: ...here. * config/mips/frame-header-opt.c: Moved to... * config/mips/frame-header-opt.cc: ...here. * config/mips/mips-d.c: Moved to... * config/mips/mips-d.cc: ...here. * config/mips/mips.c: Moved to... * config/mips/mips.cc: ...here. * config/mmix/mmix.c: Moved to... * config/mmix/mmix.cc: ...here. * config/mn10300/mn10300.c: Moved to... * config/mn10300/mn10300.cc: ...here. * config/moxie/moxie.c: Moved to... * config/moxie/moxie.cc: ...here. * config/msp430/driver-msp430.c: Moved to... * config/msp430/driver-msp430.cc: ...here. * config/msp430/msp430-c.c: Moved to... * config/msp430/msp430-c.cc: ...here. * config/msp430/msp430-devices.c: Moved to... * config/msp430/msp430-devices.cc: ...here. * config/msp430/msp430.c: Moved to... * config/msp430/msp430.cc: ...here. * config/nds32/nds32-cost.c: Moved to... * config/nds32/nds32-cost.cc: ...here. * config/nds32/nds32-fp-as-gp.c: Moved to... * config/nds32/nds32-fp-as-gp.cc: ...here. * config/nds32/nds32-intrinsic.c: Moved to... * config/nds32/nds32-intrinsic.cc: ...here. * config/nds32/nds32-isr.c: Moved to... * config/nds32/nds32-isr.cc: ...here. * config/nds32/nds32-md-auxiliary.c: Moved to... * config/nds32/nds32-md-auxiliary.cc: ...here. * config/nds32/nds32-memory-manipulation.c: Moved to... * config/nds32/nds32-memory-manipulation.cc: ...here. * config/nds32/nds32-pipelines-auxiliary.c: Moved to... * config/nds32/nds32-pipelines-auxiliary.cc: ...here. * config/nds32/nds32-predicates.c: Moved to... * config/nds32/nds32-predicates.cc: ...here. * config/nds32/nds32-relax-opt.c: Moved to... * config/nds32/nds32-relax-opt.cc: ...here. * config/nds32/nds32-utils.c: Moved to... * config/nds32/nds32-utils.cc: ...here. * config/nds32/nds32.c: Moved to... * config/nds32/nds32.cc: ...here. * config/netbsd-d.c: Moved to... * config/netbsd-d.cc: ...here. * config/netbsd.c: Moved to... * config/netbsd.cc: ...here. * config/nios2/nios2.c: Moved to... * config/nios2/nios2.cc: ...here. * config/nvptx/mkoffload.c: Moved to... * config/nvptx/mkoffload.cc: ...here. * config/nvptx/nvptx-c.c: Moved to... * config/nvptx/nvptx-c.cc: ...here. * config/nvptx/nvptx.c: Moved to... * config/nvptx/nvptx.cc: ...here. * config/openbsd-d.c: Moved to... * config/openbsd-d.cc: ...here. * config/or1k/or1k.c: Moved to... * config/or1k/or1k.cc: ...here. * config/pa/pa-d.c: Moved to... * config/pa/pa-d.cc: ...here. * config/pa/pa.c: Moved to... * config/pa/pa.cc: ...here. * config/pdp11/pdp11.c: Moved to... * config/pdp11/pdp11.cc: ...here. * config/pru/pru-passes.c: Moved to... * config/pru/pru-passes.cc: ...here. * config/pru/pru-pragma.c: Moved to... * config/pru/pru-pragma.cc: ...here. * config/pru/pru.c: Moved to... * config/pru/pru.cc: ...here. * config/riscv/riscv-builtins.c: Moved to... * config/riscv/riscv-builtins.cc: ...here. * config/riscv/riscv-c.c: Moved to... * config/riscv/riscv-c.cc: ...here. * config/riscv/riscv-d.c: Moved to... * config/riscv/riscv-d.cc: ...here. * config/riscv/riscv-shorten-memrefs.c: Moved to... * config/riscv/riscv-shorten-memrefs.cc: ...here. * config/riscv/riscv-sr.c: Moved to... * config/riscv/riscv-sr.cc: ...here. * config/riscv/riscv.c: Moved to... * config/riscv/riscv.cc: ...here. * config/rl78/rl78-c.c: Moved to... * config/rl78/rl78-c.cc: ...here. * config/rl78/rl78.c: Moved to... * config/rl78/rl78.cc: ...here. * config/rs6000/driver-rs6000.c: Moved to... * config/rs6000/driver-rs6000.cc: ...here. * config/rs6000/host-darwin.c: Moved to... * config/rs6000/host-darwin.cc: ...here. * config/rs6000/host-ppc64-darwin.c: Moved to... * config/rs6000/host-ppc64-darwin.cc: ...here. * config/rs6000/rbtree.c: Moved to... * config/rs6000/rbtree.cc: ...here. * config/rs6000/rs6000-c.c: Moved to... * config/rs6000/rs6000-c.cc: ...here. * config/rs6000/rs6000-call.c: Moved to... * config/rs6000/rs6000-call.cc: ...here. * config/rs6000/rs6000-d.c: Moved to... * config/rs6000/rs6000-d.cc: ...here. * config/rs6000/rs6000-gen-builtins.c: Moved to... * config/rs6000/rs6000-gen-builtins.cc: ...here. * config/rs6000/rs6000-linux.c: Moved to... * config/rs6000/rs6000-linux.cc: ...here. * config/rs6000/rs6000-logue.c: Moved to... * config/rs6000/rs6000-logue.cc: ...here. * config/rs6000/rs6000-p8swap.c: Moved to... * config/rs6000/rs6000-p8swap.cc: ...here. * config/rs6000/rs6000-pcrel-opt.c: Moved to... * config/rs6000/rs6000-pcrel-opt.cc: ...here. * config/rs6000/rs6000-string.c: Moved to... * config/rs6000/rs6000-string.cc: ...here. * config/rs6000/rs6000.c: Moved to... * config/rs6000/rs6000.cc: ...here. * config/rx/rx.c: Moved to... * config/rx/rx.cc: ...here. * config/s390/driver-native.c: Moved to... * config/s390/driver-native.cc: ...here. * config/s390/s390-c.c: Moved to... * config/s390/s390-c.cc: ...here. * config/s390/s390-d.c: Moved to... * config/s390/s390-d.cc: ...here. * config/s390/s390.c: Moved to... * config/s390/s390.cc: ...here. * config/sh/divtab-sh4-300.c: Moved to... * config/sh/divtab-sh4-300.cc: ...here. * config/sh/divtab-sh4.c: Moved to... * config/sh/divtab-sh4.cc: ...here. * config/sh/divtab.c: Moved to... * config/sh/divtab.cc: ...here. * config/sh/sh-c.c: Moved to... * config/sh/sh-c.cc: ...here. * config/sh/sh.c: Moved to... * config/sh/sh.cc: ...here. * config/sol2-c.c: Moved to... * config/sol2-c.cc: ...here. * config/sol2-cxx.c: Moved to... * config/sol2-cxx.cc: ...here. * config/sol2-d.c: Moved to... * config/sol2-d.cc: ...here. * config/sol2-stubs.c: Moved to... * config/sol2-stubs.cc: ...here. * config/sol2.c: Moved to... * config/sol2.cc: ...here. * config/sparc/driver-sparc.c: Moved to... * config/sparc/driver-sparc.cc: ...here. * config/sparc/sparc-c.c: Moved to... * config/sparc/sparc-c.cc: ...here. * config/sparc/sparc-d.c: Moved to... * config/sparc/sparc-d.cc: ...here. * config/sparc/sparc.c: Moved to... * config/sparc/sparc.cc: ...here. * config/stormy16/stormy16.c: Moved to... * config/stormy16/stormy16.cc: ...here. * config/tilegx/mul-tables.c: Moved to... * config/tilegx/mul-tables.cc: ...here. * config/tilegx/tilegx-c.c: Moved to... * config/tilegx/tilegx-c.cc: ...here. * config/tilegx/tilegx.c: Moved to... * config/tilegx/tilegx.cc: ...here. * config/tilepro/mul-tables.c: Moved to... * config/tilepro/mul-tables.cc: ...here. * config/tilepro/tilepro-c.c: Moved to... * config/tilepro/tilepro-c.cc: ...here. * config/tilepro/tilepro.c: Moved to... * config/tilepro/tilepro.cc: ...here. * config/v850/v850-c.c: Moved to... * config/v850/v850-c.cc: ...here. * config/v850/v850.c: Moved to... * config/v850/v850.cc: ...here. * config/vax/vax.c: Moved to... * config/vax/vax.cc: ...here. * config/visium/visium.c: Moved to... * config/visium/visium.cc: ...here. * config/vms/vms-c.c: Moved to... * config/vms/vms-c.cc: ...here. * config/vms/vms-f.c: Moved to... * config/vms/vms-f.cc: ...here. * config/vms/vms.c: Moved to... * config/vms/vms.cc: ...here. * config/vxworks-c.c: Moved to... * config/vxworks-c.cc: ...here. * config/vxworks.c: Moved to... * config/vxworks.cc: ...here. * config/winnt-c.c: Moved to... * config/winnt-c.cc: ...here. * config/xtensa/xtensa.c: Moved to... * config/xtensa/xtensa.cc: ...here. * context.c: Moved to... * context.cc: ...here. * convert.c: Moved to... * convert.cc: ...here. * coverage.c: Moved to... * coverage.cc: ...here. * cppbuiltin.c: Moved to... * cppbuiltin.cc: ...here. * cppdefault.c: Moved to... * cppdefault.cc: ...here. * cprop.c: Moved to... * cprop.cc: ...here. * cse.c: Moved to... * cse.cc: ...here. * cselib.c: Moved to... * cselib.cc: ...here. * ctfc.c: Moved to... * ctfc.cc: ...here. * ctfout.c: Moved to... * ctfout.cc: ...here. * data-streamer-in.c: Moved to... * data-streamer-in.cc: ...here. * data-streamer-out.c: Moved to... * data-streamer-out.cc: ...here. * data-streamer.c: Moved to... * data-streamer.cc: ...here. * dbgcnt.c: Moved to... * dbgcnt.cc: ...here. * dbxout.c: Moved to... * dbxout.cc: ...here. * dce.c: Moved to... * dce.cc: ...here. * ddg.c: Moved to... * ddg.cc: ...here. * debug.c: Moved to... * debug.cc: ...here. * df-core.c: Moved to... * df-core.cc: ...here. * df-problems.c: Moved to... * df-problems.cc: ...here. * df-scan.c: Moved to... * df-scan.cc: ...here. * dfp.c: Moved to... * dfp.cc: ...here. * diagnostic-color.c: Moved to... * diagnostic-color.cc: ...here. * diagnostic-show-locus.c: Moved to... * diagnostic-show-locus.cc: ...here. * diagnostic-spec.c: Moved to... * diagnostic-spec.cc: ...here. * diagnostic.c: Moved to... * diagnostic.cc: ...here. * dojump.c: Moved to... * dojump.cc: ...here. * dominance.c: Moved to... * dominance.cc: ...here. * domwalk.c: Moved to... * domwalk.cc: ...here. * double-int.c: Moved to... * double-int.cc: ...here. * dse.c: Moved to... * dse.cc: ...here. * dumpfile.c: Moved to... * dumpfile.cc: ...here. * dwarf2asm.c: Moved to... * dwarf2asm.cc: ...here. * dwarf2cfi.c: Moved to... * dwarf2cfi.cc: ...here. * dwarf2ctf.c: Moved to... * dwarf2ctf.cc: ...here. * dwarf2out.c: Moved to... * dwarf2out.cc: ...here. * early-remat.c: Moved to... * early-remat.cc: ...here. * edit-context.c: Moved to... * edit-context.cc: ...here. * emit-rtl.c: Moved to... * emit-rtl.cc: ...here. * errors.c: Moved to... * errors.cc: ...here. * et-forest.c: Moved to... * et-forest.cc: ...here. * except.c: Moved to... * except.cc: ...here. * explow.c: Moved to... * explow.cc: ...here. * expmed.c: Moved to... * expmed.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * fibonacci_heap.c: Moved to... * fibonacci_heap.cc: ...here. * file-find.c: Moved to... * file-find.cc: ...here. * file-prefix-map.c: Moved to... * file-prefix-map.cc: ...here. * final.c: Moved to... * final.cc: ...here. * fixed-value.c: Moved to... * fixed-value.cc: ...here. * fold-const-call.c: Moved to... * fold-const-call.cc: ...here. * fold-const.c: Moved to... * fold-const.cc: ...here. * fp-test.c: Moved to... * fp-test.cc: ...here. * function-tests.c: Moved to... * function-tests.cc: ...here. * function.c: Moved to... * function.cc: ...here. * fwprop.c: Moved to... * fwprop.cc: ...here. * gcc-ar.c: Moved to... * gcc-ar.cc: ...here. * gcc-main.c: Moved to... * gcc-main.cc: ...here. * gcc-rich-location.c: Moved to... * gcc-rich-location.cc: ...here. * gcc.c: Moved to... * gcc.cc: ...here. * gcov-dump.c: Moved to... * gcov-dump.cc: ...here. * gcov-io.c: Moved to... * gcov-io.cc: ...here. * gcov-tool.c: Moved to... * gcov-tool.cc: ...here. * gcov.c: Moved to... * gcov.cc: ...here. * gcse-common.c: Moved to... * gcse-common.cc: ...here. * gcse.c: Moved to... * gcse.cc: ...here. * genattr-common.c: Moved to... * genattr-common.cc: ...here. * genattr.c: Moved to... * genattr.cc: ...here. * genattrtab.c: Moved to... * genattrtab.cc: ...here. * genautomata.c: Moved to... * genautomata.cc: ...here. * gencfn-macros.c: Moved to... * gencfn-macros.cc: ...here. * gencheck.c: Moved to... * gencheck.cc: ...here. * genchecksum.c: Moved to... * genchecksum.cc: ...here. * gencodes.c: Moved to... * gencodes.cc: ...here. * genconditions.c: Moved to... * genconditions.cc: ...here. * genconfig.c: Moved to... * genconfig.cc: ...here. * genconstants.c: Moved to... * genconstants.cc: ...here. * genemit.c: Moved to... * genemit.cc: ...here. * genenums.c: Moved to... * genenums.cc: ...here. * generic-match-head.c: Moved to... * generic-match-head.cc: ...here. * genextract.c: Moved to... * genextract.cc: ...here. * genflags.c: Moved to... * genflags.cc: ...here. * gengenrtl.c: Moved to... * gengenrtl.cc: ...here. * gengtype-parse.c: Moved to... * gengtype-parse.cc: ...here. * gengtype-state.c: Moved to... * gengtype-state.cc: ...here. * gengtype.c: Moved to... * gengtype.cc: ...here. * genhooks.c: Moved to... * genhooks.cc: ...here. * genmatch.c: Moved to... * genmatch.cc: ...here. * genmddeps.c: Moved to... * genmddeps.cc: ...here. * genmddump.c: Moved to... * genmddump.cc: ...here. * genmodes.c: Moved to... * genmodes.cc: ...here. * genopinit.c: Moved to... * genopinit.cc: ...here. * genoutput.c: Moved to... * genoutput.cc: ...here. * genpeep.c: Moved to... * genpeep.cc: ...here. * genpreds.c: Moved to... * genpreds.cc: ...here. * genrecog.c: Moved to... * genrecog.cc: ...here. * gensupport.c: Moved to... * gensupport.cc: ...here. * gentarget-def.c: Moved to... * gentarget-def.cc: ...here. * genversion.c: Moved to... * genversion.cc: ...here. * ggc-common.c: Moved to... * ggc-common.cc: ...here. * ggc-none.c: Moved to... * ggc-none.cc: ...here. * ggc-page.c: Moved to... * ggc-page.cc: ...here. * ggc-tests.c: Moved to... * ggc-tests.cc: ...here. * gimple-builder.c: Moved to... * gimple-builder.cc: ...here. * gimple-expr.c: Moved to... * gimple-expr.cc: ...here. * gimple-fold.c: Moved to... * gimple-fold.cc: ...here. * gimple-iterator.c: Moved to... * gimple-iterator.cc: ...here. * gimple-laddress.c: Moved to... * gimple-laddress.cc: ...here. * gimple-loop-jam.c: Moved to... * gimple-loop-jam.cc: ...here. * gimple-low.c: Moved to... * gimple-low.cc: ...here. * gimple-match-head.c: Moved to... * gimple-match-head.cc: ...here. * gimple-pretty-print.c: Moved to... * gimple-pretty-print.cc: ...here. * gimple-ssa-backprop.c: Moved to... * gimple-ssa-backprop.cc: ...here. * gimple-ssa-evrp-analyze.c: Moved to... * gimple-ssa-evrp-analyze.cc: ...here. * gimple-ssa-evrp.c: Moved to... * gimple-ssa-evrp.cc: ...here. * gimple-ssa-isolate-paths.c: Moved to... * gimple-ssa-isolate-paths.cc: ...here. * gimple-ssa-nonnull-compare.c: Moved to... * gimple-ssa-nonnull-compare.cc: ...here. * gimple-ssa-split-paths.c: Moved to... * gimple-ssa-split-paths.cc: ...here. * gimple-ssa-sprintf.c: Moved to... * gimple-ssa-sprintf.cc: ...here. * gimple-ssa-store-merging.c: Moved to... * gimple-ssa-store-merging.cc: ...here. * gimple-ssa-strength-reduction.c: Moved to... * gimple-ssa-strength-reduction.cc: ...here. * gimple-ssa-warn-alloca.c: Moved to... * gimple-ssa-warn-alloca.cc: ...here. * gimple-ssa-warn-restrict.c: Moved to... * gimple-ssa-warn-restrict.cc: ...here. * gimple-streamer-in.c: Moved to... * gimple-streamer-in.cc: ...here. * gimple-streamer-out.c: Moved to... * gimple-streamer-out.cc: ...here. * gimple-walk.c: Moved to... * gimple-walk.cc: ...here. * gimple-warn-recursion.c: Moved to... * gimple-warn-recursion.cc: ...here. * gimple.c: Moved to... * gimple.cc: ...here. * gimplify-me.c: Moved to... * gimplify-me.cc: ...here. * gimplify.c: Moved to... * gimplify.cc: ...here. * godump.c: Moved to... * godump.cc: ...here. * graph.c: Moved to... * graph.cc: ...here. * graphds.c: Moved to... * graphds.cc: ...here. * graphite-dependences.c: Moved to... * graphite-dependences.cc: ...here. * graphite-isl-ast-to-gimple.c: Moved to... * graphite-isl-ast-to-gimple.cc: ...here. * graphite-optimize-isl.c: Moved to... * graphite-optimize-isl.cc: ...here. * graphite-poly.c: Moved to... * graphite-poly.cc: ...here. * graphite-scop-detection.c: Moved to... * graphite-scop-detection.cc: ...here. * graphite-sese-to-poly.c: Moved to... * graphite-sese-to-poly.cc: ...here. * graphite.c: Moved to... * graphite.cc: ...here. * haifa-sched.c: Moved to... * haifa-sched.cc: ...here. * hash-map-tests.c: Moved to... * hash-map-tests.cc: ...here. * hash-set-tests.c: Moved to... * hash-set-tests.cc: ...here. * hash-table.c: Moved to... * hash-table.cc: ...here. * hooks.c: Moved to... * hooks.cc: ...here. * host-default.c: Moved to... * host-default.cc: ...here. * hw-doloop.c: Moved to... * hw-doloop.cc: ...here. * hwint.c: Moved to... * hwint.cc: ...here. * ifcvt.c: Moved to... * ifcvt.cc: ...here. * inchash.c: Moved to... * inchash.cc: ...here. * incpath.c: Moved to... * incpath.cc: ...here. * init-regs.c: Moved to... * init-regs.cc: ...here. * input.c: Moved to... * input.cc: ...here. * internal-fn.c: Moved to... * internal-fn.cc: ...here. * intl.c: Moved to... * intl.cc: ...here. * ipa-comdats.c: Moved to... * ipa-comdats.cc: ...here. * ipa-cp.c: Moved to... * ipa-cp.cc: ...here. * ipa-devirt.c: Moved to... * ipa-devirt.cc: ...here. * ipa-fnsummary.c: Moved to... * ipa-fnsummary.cc: ...here. * ipa-icf-gimple.c: Moved to... * ipa-icf-gimple.cc: ...here. * ipa-icf.c: Moved to... * ipa-icf.cc: ...here. * ipa-inline-analysis.c: Moved to... * ipa-inline-analysis.cc: ...here. * ipa-inline-transform.c: Moved to... * ipa-inline-transform.cc: ...here. * ipa-inline.c: Moved to... * ipa-inline.cc: ...here. * ipa-modref-tree.c: Moved to... * ipa-modref-tree.cc: ...here. * ipa-modref.c: Moved to... * ipa-modref.cc: ...here. * ipa-param-manipulation.c: Moved to... * ipa-param-manipulation.cc: ...here. * ipa-polymorphic-call.c: Moved to... * ipa-polymorphic-call.cc: ...here. * ipa-predicate.c: Moved to... * ipa-predicate.cc: ...here. * ipa-profile.c: Moved to... * ipa-profile.cc: ...here. * ipa-prop.c: Moved to... * ipa-prop.cc: ...here. * ipa-pure-const.c: Moved to... * ipa-pure-const.cc: ...here. * ipa-ref.c: Moved to... * ipa-ref.cc: ...here. * ipa-reference.c: Moved to... * ipa-reference.cc: ...here. * ipa-split.c: Moved to... * ipa-split.cc: ...here. * ipa-sra.c: Moved to... * ipa-sra.cc: ...here. * ipa-utils.c: Moved to... * ipa-utils.cc: ...here. * ipa-visibility.c: Moved to... * ipa-visibility.cc: ...here. * ipa.c: Moved to... * ipa.cc: ...here. * ira-build.c: Moved to... * ira-build.cc: ...here. * ira-color.c: Moved to... * ira-color.cc: ...here. * ira-conflicts.c: Moved to... * ira-conflicts.cc: ...here. * ira-costs.c: Moved to... * ira-costs.cc: ...here. * ira-emit.c: Moved to... * ira-emit.cc: ...here. * ira-lives.c: Moved to... * ira-lives.cc: ...here. * ira.c: Moved to... * ira.cc: ...here. * jump.c: Moved to... * jump.cc: ...here. * langhooks.c: Moved to... * langhooks.cc: ...here. * lcm.c: Moved to... * lcm.cc: ...here. * lists.c: Moved to... * lists.cc: ...here. * loop-doloop.c: Moved to... * loop-doloop.cc: ...here. * loop-init.c: Moved to... * loop-init.cc: ...here. * loop-invariant.c: Moved to... * loop-invariant.cc: ...here. * loop-iv.c: Moved to... * loop-iv.cc: ...here. * loop-unroll.c: Moved to... * loop-unroll.cc: ...here. * lower-subreg.c: Moved to... * lower-subreg.cc: ...here. * lra-assigns.c: Moved to... * lra-assigns.cc: ...here. * lra-coalesce.c: Moved to... * lra-coalesce.cc: ...here. * lra-constraints.c: Moved to... * lra-constraints.cc: ...here. * lra-eliminations.c: Moved to... * lra-eliminations.cc: ...here. * lra-lives.c: Moved to... * lra-lives.cc: ...here. * lra-remat.c: Moved to... * lra-remat.cc: ...here. * lra-spills.c: Moved to... * lra-spills.cc: ...here. * lra.c: Moved to... * lra.cc: ...here. * lto-cgraph.c: Moved to... * lto-cgraph.cc: ...here. * lto-compress.c: Moved to... * lto-compress.cc: ...here. * lto-opts.c: Moved to... * lto-opts.cc: ...here. * lto-section-in.c: Moved to... * lto-section-in.cc: ...here. * lto-section-out.c: Moved to... * lto-section-out.cc: ...here. * lto-streamer-in.c: Moved to... * lto-streamer-in.cc: ...here. * lto-streamer-out.c: Moved to... * lto-streamer-out.cc: ...here. * lto-streamer.c: Moved to... * lto-streamer.cc: ...here. * lto-wrapper.c: Moved to... * lto-wrapper.cc: ...here. * main.c: Moved to... * main.cc: ...here. * mcf.c: Moved to... * mcf.cc: ...here. * mode-switching.c: Moved to... * mode-switching.cc: ...here. * modulo-sched.c: Moved to... * modulo-sched.cc: ...here. * multiple_target.c: Moved to... * multiple_target.cc: ...here. * omp-expand.c: Moved to... * omp-expand.cc: ...here. * omp-general.c: Moved to... * omp-general.cc: ...here. * omp-low.c: Moved to... * omp-low.cc: ...here. * omp-offload.c: Moved to... * omp-offload.cc: ...here. * omp-simd-clone.c: Moved to... * omp-simd-clone.cc: ...here. * opt-suggestions.c: Moved to... * opt-suggestions.cc: ...here. * optabs-libfuncs.c: Moved to... * optabs-libfuncs.cc: ...here. * optabs-query.c: Moved to... * optabs-query.cc: ...here. * optabs-tree.c: Moved to... * optabs-tree.cc: ...here. * optabs.c: Moved to... * optabs.cc: ...here. * opts-common.c: Moved to... * opts-common.cc: ...here. * opts-global.c: Moved to... * opts-global.cc: ...here. * opts.c: Moved to... * opts.cc: ...here. * passes.c: Moved to... * passes.cc: ...here. * plugin.c: Moved to... * plugin.cc: ...here. * postreload-gcse.c: Moved to... * postreload-gcse.cc: ...here. * postreload.c: Moved to... * postreload.cc: ...here. * predict.c: Moved to... * predict.cc: ...here. * prefix.c: Moved to... * prefix.cc: ...here. * pretty-print.c: Moved to... * pretty-print.cc: ...here. * print-rtl-function.c: Moved to... * print-rtl-function.cc: ...here. * print-rtl.c: Moved to... * print-rtl.cc: ...here. * print-tree.c: Moved to... * print-tree.cc: ...here. * profile-count.c: Moved to... * profile-count.cc: ...here. * profile.c: Moved to... * profile.cc: ...here. * read-md.c: Moved to... * read-md.cc: ...here. * read-rtl-function.c: Moved to... * read-rtl-function.cc: ...here. * read-rtl.c: Moved to... * read-rtl.cc: ...here. * real.c: Moved to... * real.cc: ...here. * realmpfr.c: Moved to... * realmpfr.cc: ...here. * recog.c: Moved to... * recog.cc: ...here. * ree.c: Moved to... * ree.cc: ...here. * reg-stack.c: Moved to... * reg-stack.cc: ...here. * regcprop.c: Moved to... * regcprop.cc: ...here. * reginfo.c: Moved to... * reginfo.cc: ...here. * regrename.c: Moved to... * regrename.cc: ...here. * regstat.c: Moved to... * regstat.cc: ...here. * reload.c: Moved to... * reload.cc: ...here. * reload1.c: Moved to... * reload1.cc: ...here. * reorg.c: Moved to... * reorg.cc: ...here. * resource.c: Moved to... * resource.cc: ...here. * rtl-error.c: Moved to... * rtl-error.cc: ...here. * rtl-tests.c: Moved to... * rtl-tests.cc: ...here. * rtl.c: Moved to... * rtl.cc: ...here. * rtlanal.c: Moved to... * rtlanal.cc: ...here. * rtlhash.c: Moved to... * rtlhash.cc: ...here. * rtlhooks.c: Moved to... * rtlhooks.cc: ...here. * rtx-vector-builder.c: Moved to... * rtx-vector-builder.cc: ...here. * run-rtl-passes.c: Moved to... * run-rtl-passes.cc: ...here. * sancov.c: Moved to... * sancov.cc: ...here. * sanopt.c: Moved to... * sanopt.cc: ...here. * sbitmap.c: Moved to... * sbitmap.cc: ...here. * sched-deps.c: Moved to... * sched-deps.cc: ...here. * sched-ebb.c: Moved to... * sched-ebb.cc: ...here. * sched-rgn.c: Moved to... * sched-rgn.cc: ...here. * sel-sched-dump.c: Moved to... * sel-sched-dump.cc: ...here. * sel-sched-ir.c: Moved to... * sel-sched-ir.cc: ...here. * sel-sched.c: Moved to... * sel-sched.cc: ...here. * selftest-diagnostic.c: Moved to... * selftest-diagnostic.cc: ...here. * selftest-rtl.c: Moved to... * selftest-rtl.cc: ...here. * selftest-run-tests.c: Moved to... * selftest-run-tests.cc: ...here. * selftest.c: Moved to... * selftest.cc: ...here. * sese.c: Moved to... * sese.cc: ...here. * shrink-wrap.c: Moved to... * shrink-wrap.cc: ...here. * simplify-rtx.c: Moved to... * simplify-rtx.cc: ...here. * sparseset.c: Moved to... * sparseset.cc: ...here. * spellcheck-tree.c: Moved to... * spellcheck-tree.cc: ...here. * spellcheck.c: Moved to... * spellcheck.cc: ...here. * sreal.c: Moved to... * sreal.cc: ...here. * stack-ptr-mod.c: Moved to... * stack-ptr-mod.cc: ...here. * statistics.c: Moved to... * statistics.cc: ...here. * stmt.c: Moved to... * stmt.cc: ...here. * stor-layout.c: Moved to... * stor-layout.cc: ...here. * store-motion.c: Moved to... * store-motion.cc: ...here. * streamer-hooks.c: Moved to... * streamer-hooks.cc: ...here. * stringpool.c: Moved to... * stringpool.cc: ...here. * substring-locations.c: Moved to... * substring-locations.cc: ...here. * symtab.c: Moved to... * symtab.cc: ...here. * target-globals.c: Moved to... * target-globals.cc: ...here. * targhooks.c: Moved to... * targhooks.cc: ...here. * timevar.c: Moved to... * timevar.cc: ...here. * toplev.c: Moved to... * toplev.cc: ...here. * tracer.c: Moved to... * tracer.cc: ...here. * trans-mem.c: Moved to... * trans-mem.cc: ...here. * tree-affine.c: Moved to... * tree-affine.cc: ...here. * tree-call-cdce.c: Moved to... * tree-call-cdce.cc: ...here. * tree-cfg.c: Moved to... * tree-cfg.cc: ...here. * tree-cfgcleanup.c: Moved to... * tree-cfgcleanup.cc: ...here. * tree-chrec.c: Moved to... * tree-chrec.cc: ...here. * tree-complex.c: Moved to... * tree-complex.cc: ...here. * tree-data-ref.c: Moved to... * tree-data-ref.cc: ...here. * tree-dfa.c: Moved to... * tree-dfa.cc: ...here. * tree-diagnostic.c: Moved to... * tree-diagnostic.cc: ...here. * tree-dump.c: Moved to... * tree-dump.cc: ...here. * tree-eh.c: Moved to... * tree-eh.cc: ...here. * tree-emutls.c: Moved to... * tree-emutls.cc: ...here. * tree-if-conv.c: Moved to... * tree-if-conv.cc: ...here. * tree-inline.c: Moved to... * tree-inline.cc: ...here. * tree-into-ssa.c: Moved to... * tree-into-ssa.cc: ...here. * tree-iterator.c: Moved to... * tree-iterator.cc: ...here. * tree-loop-distribution.c: Moved to... * tree-loop-distribution.cc: ...here. * tree-nested.c: Moved to... * tree-nested.cc: ...here. * tree-nrv.c: Moved to... * tree-nrv.cc: ...here. * tree-object-size.c: Moved to... * tree-object-size.cc: ...here. * tree-outof-ssa.c: Moved to... * tree-outof-ssa.cc: ...here. * tree-parloops.c: Moved to... * tree-parloops.cc: ...here. * tree-phinodes.c: Moved to... * tree-phinodes.cc: ...here. * tree-predcom.c: Moved to... * tree-predcom.cc: ...here. * tree-pretty-print.c: Moved to... * tree-pretty-print.cc: ...here. * tree-profile.c: Moved to... * tree-profile.cc: ...here. * tree-scalar-evolution.c: Moved to... * tree-scalar-evolution.cc: ...here. * tree-sra.c: Moved to... * tree-sra.cc: ...here. * tree-ssa-address.c: Moved to... * tree-ssa-address.cc: ...here. * tree-ssa-alias.c: Moved to... * tree-ssa-alias.cc: ...here. * tree-ssa-ccp.c: Moved to... * tree-ssa-ccp.cc: ...here. * tree-ssa-coalesce.c: Moved to... * tree-ssa-coalesce.cc: ...here. * tree-ssa-copy.c: Moved to... * tree-ssa-copy.cc: ...here. * tree-ssa-dce.c: Moved to... * tree-ssa-dce.cc: ...here. * tree-ssa-dom.c: Moved to... * tree-ssa-dom.cc: ...here. * tree-ssa-dse.c: Moved to... * tree-ssa-dse.cc: ...here. * tree-ssa-forwprop.c: Moved to... * tree-ssa-forwprop.cc: ...here. * tree-ssa-ifcombine.c: Moved to... * tree-ssa-ifcombine.cc: ...here. * tree-ssa-live.c: Moved to... * tree-ssa-live.cc: ...here. * tree-ssa-loop-ch.c: Moved to... * tree-ssa-loop-ch.cc: ...here. * tree-ssa-loop-im.c: Moved to... * tree-ssa-loop-im.cc: ...here. * tree-ssa-loop-ivcanon.c: Moved to... * tree-ssa-loop-ivcanon.cc: ...here. * tree-ssa-loop-ivopts.c: Moved to... * tree-ssa-loop-ivopts.cc: ...here. * tree-ssa-loop-manip.c: Moved to... * tree-ssa-loop-manip.cc: ...here. * tree-ssa-loop-niter.c: Moved to... * tree-ssa-loop-niter.cc: ...here. * tree-ssa-loop-prefetch.c: Moved to... * tree-ssa-loop-prefetch.cc: ...here. * tree-ssa-loop-split.c: Moved to... * tree-ssa-loop-split.cc: ...here. * tree-ssa-loop-unswitch.c: Moved to... * tree-ssa-loop-unswitch.cc: ...here. * tree-ssa-loop.c: Moved to... * tree-ssa-loop.cc: ...here. * tree-ssa-math-opts.c: Moved to... * tree-ssa-math-opts.cc: ...here. * tree-ssa-operands.c: Moved to... * tree-ssa-operands.cc: ...here. * tree-ssa-phiopt.c: Moved to... * tree-ssa-phiopt.cc: ...here. * tree-ssa-phiprop.c: Moved to... * tree-ssa-phiprop.cc: ...here. * tree-ssa-pre.c: Moved to... * tree-ssa-pre.cc: ...here. * tree-ssa-propagate.c: Moved to... * tree-ssa-propagate.cc: ...here. * tree-ssa-reassoc.c: Moved to... * tree-ssa-reassoc.cc: ...here. * tree-ssa-sccvn.c: Moved to... * tree-ssa-sccvn.cc: ...here. * tree-ssa-scopedtables.c: Moved to... * tree-ssa-scopedtables.cc: ...here. * tree-ssa-sink.c: Moved to... * tree-ssa-sink.cc: ...here. * tree-ssa-strlen.c: Moved to... * tree-ssa-strlen.cc: ...here. * tree-ssa-structalias.c: Moved to... * tree-ssa-structalias.cc: ...here. * tree-ssa-tail-merge.c: Moved to... * tree-ssa-tail-merge.cc: ...here. * tree-ssa-ter.c: Moved to... * tree-ssa-ter.cc: ...here. * tree-ssa-threadbackward.c: Moved to... * tree-ssa-threadbackward.cc: ...here. * tree-ssa-threadedge.c: Moved to... * tree-ssa-threadedge.cc: ...here. * tree-ssa-threadupdate.c: Moved to... * tree-ssa-threadupdate.cc: ...here. * tree-ssa-uncprop.c: Moved to... * tree-ssa-uncprop.cc: ...here. * tree-ssa-uninit.c: Moved to... * tree-ssa-uninit.cc: ...here. * tree-ssa.c: Moved to... * tree-ssa.cc: ...here. * tree-ssanames.c: Moved to... * tree-ssanames.cc: ...here. * tree-stdarg.c: Moved to... * tree-stdarg.cc: ...here. * tree-streamer-in.c: Moved to... * tree-streamer-in.cc: ...here. * tree-streamer-out.c: Moved to... * tree-streamer-out.cc: ...here. * tree-streamer.c: Moved to... * tree-streamer.cc: ...here. * tree-switch-conversion.c: Moved to... * tree-switch-conversion.cc: ...here. * tree-tailcall.c: Moved to... * tree-tailcall.cc: ...here. * tree-vect-data-refs.c: Moved to... * tree-vect-data-refs.cc: ...here. * tree-vect-generic.c: Moved to... * tree-vect-generic.cc: ...here. * tree-vect-loop-manip.c: Moved to... * tree-vect-loop-manip.cc: ...here. * tree-vect-loop.c: Moved to... * tree-vect-loop.cc: ...here. * tree-vect-patterns.c: Moved to... * tree-vect-patterns.cc: ...here. * tree-vect-slp-patterns.c: Moved to... * tree-vect-slp-patterns.cc: ...here. * tree-vect-slp.c: Moved to... * tree-vect-slp.cc: ...here. * tree-vect-stmts.c: Moved to... * tree-vect-stmts.cc: ...here. * tree-vector-builder.c: Moved to... * tree-vector-builder.cc: ...here. * tree-vectorizer.c: Moved to... * tree-vectorizer.cc: ...here. * tree-vrp.c: Moved to... * tree-vrp.cc: ...here. * tree.c: Moved to... * tree.cc: ...here. * tsan.c: Moved to... * tsan.cc: ...here. * typed-splay-tree.c: Moved to... * typed-splay-tree.cc: ...here. * ubsan.c: Moved to... * ubsan.cc: ...here. * valtrack.c: Moved to... * valtrack.cc: ...here. * value-prof.c: Moved to... * value-prof.cc: ...here. * var-tracking.c: Moved to... * var-tracking.cc: ...here. * varasm.c: Moved to... * varasm.cc: ...here. * varpool.c: Moved to... * varpool.cc: ...here. * vec-perm-indices.c: Moved to... * vec-perm-indices.cc: ...here. * vec.c: Moved to... * vec.cc: ...here. * vmsdbgout.c: Moved to... * vmsdbgout.cc: ...here. * vr-values.c: Moved to... * vr-values.cc: ...here. * vtable-verify.c: Moved to... * vtable-verify.cc: ...here. * web.c: Moved to... * web.cc: ...here. * xcoffout.c: Moved to... * xcoffout.cc: ...here. gcc/c-family/ChangeLog: * c-ada-spec.c: Moved to... * c-ada-spec.cc: ...here. * c-attribs.c: Moved to... * c-attribs.cc: ...here. * c-common.c: Moved to... * c-common.cc: ...here. * c-cppbuiltin.c: Moved to... * c-cppbuiltin.cc: ...here. * c-dump.c: Moved to... * c-dump.cc: ...here. * c-format.c: Moved to... * c-format.cc: ...here. * c-gimplify.c: Moved to... * c-gimplify.cc: ...here. * c-indentation.c: Moved to... * c-indentation.cc: ...here. * c-lex.c: Moved to... * c-lex.cc: ...here. * c-omp.c: Moved to... * c-omp.cc: ...here. * c-opts.c: Moved to... * c-opts.cc: ...here. * c-pch.c: Moved to... * c-pch.cc: ...here. * c-ppoutput.c: Moved to... * c-ppoutput.cc: ...here. * c-pragma.c: Moved to... * c-pragma.cc: ...here. * c-pretty-print.c: Moved to... * c-pretty-print.cc: ...here. * c-semantics.c: Moved to... * c-semantics.cc: ...here. * c-ubsan.c: Moved to... * c-ubsan.cc: ...here. * c-warn.c: Moved to... * c-warn.cc: ...here. * cppspec.c: Moved to... * cppspec.cc: ...here. * stub-objc.c: Moved to... * stub-objc.cc: ...here. gcc/c/ChangeLog: * c-aux-info.c: Moved to... * c-aux-info.cc: ...here. * c-convert.c: Moved to... * c-convert.cc: ...here. * c-decl.c: Moved to... * c-decl.cc: ...here. * c-errors.c: Moved to... * c-errors.cc: ...here. * c-fold.c: Moved to... * c-fold.cc: ...here. * c-lang.c: Moved to... * c-lang.cc: ...here. * c-objc-common.c: Moved to... * c-objc-common.cc: ...here. * c-parser.c: Moved to... * c-parser.cc: ...here. * c-typeck.c: Moved to... * c-typeck.cc: ...here. * gccspec.c: Moved to... * gccspec.cc: ...here. * gimple-parser.c: Moved to... * gimple-parser.cc: ...here. gcc/cp/ChangeLog: * call.c: Moved to... * call.cc: ...here. * class.c: Moved to... * class.cc: ...here. * constexpr.c: Moved to... * constexpr.cc: ...here. * cp-gimplify.c: Moved to... * cp-gimplify.cc: ...here. * cp-lang.c: Moved to... * cp-lang.cc: ...here. * cp-objcp-common.c: Moved to... * cp-objcp-common.cc: ...here. * cp-ubsan.c: Moved to... * cp-ubsan.cc: ...here. * cvt.c: Moved to... * cvt.cc: ...here. * cxx-pretty-print.c: Moved to... * cxx-pretty-print.cc: ...here. * decl.c: Moved to... * decl.cc: ...here. * decl2.c: Moved to... * decl2.cc: ...here. * dump.c: Moved to... * dump.cc: ...here. * error.c: Moved to... * error.cc: ...here. * except.c: Moved to... * except.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * friend.c: Moved to... * friend.cc: ...here. * g++spec.c: Moved to... * g++spec.cc: ...here. * init.c: Moved to... * init.cc: ...here. * lambda.c: Moved to... * lambda.cc: ...here. * lex.c: Moved to... * lex.cc: ...here. * mangle.c: Moved to... * mangle.cc: ...here. * method.c: Moved to... * method.cc: ...here. * name-lookup.c: Moved to... * name-lookup.cc: ...here. * optimize.c: Moved to... * optimize.cc: ...here. * parser.c: Moved to... * parser.cc: ...here. * pt.c: Moved to... * pt.cc: ...here. * ptree.c: Moved to... * ptree.cc: ...here. * rtti.c: Moved to... * rtti.cc: ...here. * search.c: Moved to... * search.cc: ...here. * semantics.c: Moved to... * semantics.cc: ...here. * tree.c: Moved to... * tree.cc: ...here. * typeck.c: Moved to... * typeck.cc: ...here. * typeck2.c: Moved to... * typeck2.cc: ...here. * vtable-class-hierarchy.c: Moved to... * vtable-class-hierarchy.cc: ...here. gcc/fortran/ChangeLog: * arith.c: Moved to... * arith.cc: ...here. * array.c: Moved to... * array.cc: ...here. * bbt.c: Moved to... * bbt.cc: ...here. * check.c: Moved to... * check.cc: ...here. * class.c: Moved to... * class.cc: ...here. * constructor.c: Moved to... * constructor.cc: ...here. * convert.c: Moved to... * convert.cc: ...here. * cpp.c: Moved to... * cpp.cc: ...here. * data.c: Moved to... * data.cc: ...here. * decl.c: Moved to... * decl.cc: ...here. * dependency.c: Moved to... * dependency.cc: ...here. * dump-parse-tree.c: Moved to... * dump-parse-tree.cc: ...here. * error.c: Moved to... * error.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * f95-lang.c: Moved to... * f95-lang.cc: ...here. * frontend-passes.c: Moved to... * frontend-passes.cc: ...here. * gfortranspec.c: Moved to... * gfortranspec.cc: ...here. * interface.c: Moved to... * interface.cc: ...here. * intrinsic.c: Moved to... * intrinsic.cc: ...here. * io.c: Moved to... * io.cc: ...here. * iresolve.c: Moved to... * iresolve.cc: ...here. * match.c: Moved to... * match.cc: ...here. * matchexp.c: Moved to... * matchexp.cc: ...here. * misc.c: Moved to... * misc.cc: ...here. * module.c: Moved to... * module.cc: ...here. * openmp.c: Moved to... * openmp.cc: ...here. * options.c: Moved to... * options.cc: ...here. * parse.c: Moved to... * parse.cc: ...here. * primary.c: Moved to... * primary.cc: ...here. * resolve.c: Moved to... * resolve.cc: ...here. * scanner.c: Moved to... * scanner.cc: ...here. * simplify.c: Moved to... * simplify.cc: ...here. * st.c: Moved to... * st.cc: ...here. * symbol.c: Moved to... * symbol.cc: ...here. * target-memory.c: Moved to... * target-memory.cc: ...here. * trans-array.c: Moved to... * trans-array.cc: ...here. * trans-common.c: Moved to... * trans-common.cc: ...here. * trans-const.c: Moved to... * trans-const.cc: ...here. * trans-decl.c: Moved to... * trans-decl.cc: ...here. * trans-expr.c: Moved to... * trans-expr.cc: ...here. * trans-intrinsic.c: Moved to... * trans-intrinsic.cc: ...here. * trans-io.c: Moved to... * trans-io.cc: ...here. * trans-openmp.c: Moved to... * trans-openmp.cc: ...here. * trans-stmt.c: Moved to... * trans-stmt.cc: ...here. * trans-types.c: Moved to... * trans-types.cc: ...here. * trans.c: Moved to... * trans.cc: ...here. gcc/go/ChangeLog: * go-backend.c: Moved to... * go-backend.cc: ...here. * go-lang.c: Moved to... * go-lang.cc: ...here. * gospec.c: Moved to... * gospec.cc: ...here. gcc/jit/ChangeLog: * dummy-frontend.c: Moved to... * dummy-frontend.cc: ...here. * jit-builtins.c: Moved to... * jit-builtins.cc: ...here. * jit-logging.c: Moved to... * jit-logging.cc: ...here. * jit-playback.c: Moved to... * jit-playback.cc: ...here. * jit-recording.c: Moved to... * jit-recording.cc: ...here. * jit-result.c: Moved to... * jit-result.cc: ...here. * jit-spec.c: Moved to... * jit-spec.cc: ...here. * jit-tempdir.c: Moved to... * jit-tempdir.cc: ...here. * jit-w32.c: Moved to... * jit-w32.cc: ...here. * libgccjit.c: Moved to... * libgccjit.cc: ...here. gcc/lto/ChangeLog: * common.c: Moved to... * common.cc: ...here. * lto-common.c: Moved to... * lto-common.cc: ...here. * lto-dump.c: Moved to... * lto-dump.cc: ...here. * lto-lang.c: Moved to... * lto-lang.cc: ...here. * lto-object.c: Moved to... * lto-object.cc: ...here. * lto-partition.c: Moved to... * lto-partition.cc: ...here. * lto-symtab.c: Moved to... * lto-symtab.cc: ...here. * lto.c: Moved to... * lto.cc: ...here. gcc/objc/ChangeLog: * objc-act.c: Moved to... * objc-act.cc: ...here. * objc-encoding.c: Moved to... * objc-encoding.cc: ...here. * objc-gnu-runtime-abi-01.c: Moved to... * objc-gnu-runtime-abi-01.cc: ...here. * objc-lang.c: Moved to... * objc-lang.cc: ...here. * objc-map.c: Moved to... * objc-map.cc: ...here. * objc-next-runtime-abi-01.c: Moved to... * objc-next-runtime-abi-01.cc: ...here. * objc-next-runtime-abi-02.c: Moved to... * objc-next-runtime-abi-02.cc: ...here. * objc-runtime-shared-support.c: Moved to... * objc-runtime-shared-support.cc: ...here. gcc/objcp/ChangeLog: * objcp-decl.c: Moved to... * objcp-decl.cc: ...here. * objcp-lang.c: Moved to... * objcp-lang.cc: ...here. libcpp/ChangeLog: * charset.c: Moved to... * charset.cc: ...here. * directives.c: Moved to... * directives.cc: ...here. * errors.c: Moved to... * errors.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * files.c: Moved to... * files.cc: ...here. * identifiers.c: Moved to... * identifiers.cc: ...here. * init.c: Moved to... * init.cc: ...here. * lex.c: Moved to... * lex.cc: ...here. * line-map.c: Moved to... * line-map.cc: ...here. * macro.c: Moved to... * macro.cc: ...here. * makeucnid.c: Moved to... * makeucnid.cc: ...here. * mkdeps.c: Moved to... * mkdeps.cc: ...here. * pch.c: Moved to... * pch.cc: ...here. * symtab.c: Moved to... * symtab.cc: ...here. * traditional.c: Moved to... * traditional.cc: ...here.
Diffstat (limited to 'gcc/fortran/scanner.c')
-rw-r--r--gcc/fortran/scanner.c2903
1 files changed, 0 insertions, 2903 deletions
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
deleted file mode 100644
index 4df6576..0000000
--- a/gcc/fortran/scanner.c
+++ /dev/null
@@ -1,2903 +0,0 @@
-/* Character scanner.
- Copyright (C) 2000-2022 Free Software Foundation, Inc.
- Contributed by Andy Vaught
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 3, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
-
-/* Set of subroutines to (ultimately) return the next character to the
- various matching subroutines. This file's job is to read files and
- build up lines that are parsed by the parser. This means that we
- handle continuation lines and "include" lines.
-
- The first thing the scanner does is to load an entire file into
- memory. We load the entire file into memory for a couple reasons.
- The first is that we want to be able to deal with nonseekable input
- (pipes, stdin) and there is a lot of backing up involved during
- parsing.
-
- The second is that we want to be able to print the locus of errors,
- and an error on line 999999 could conflict with something on line
- one. Given nonseekable input, we've got to store the whole thing.
-
- One thing that helps are the column truncation limits that give us
- an upper bound on the size of individual lines. We don't store the
- truncated stuff.
-
- From the scanner's viewpoint, the higher level subroutines ask for
- new characters and do a lot of jumping backwards. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "gfortran.h"
-#include "toplev.h" /* For set_src_pwd. */
-#include "debug.h"
-#include "options.h"
-#include "diagnostic-core.h" /* For fatal_error. */
-#include "cpp.h"
-#include "scanner.h"
-
-/* List of include file search directories. */
-gfc_directorylist *include_dirs, *intrinsic_modules_dirs;
-
-static gfc_file *file_head, *current_file;
-
-static int continue_flag, end_flag, gcc_attribute_flag;
-/* If !$omp/!$acc occurred in current comment line. */
-static int openmp_flag, openacc_flag;
-static int continue_count, continue_line;
-static locus openmp_locus;
-static locus openacc_locus;
-static locus gcc_attribute_locus;
-
-gfc_source_form gfc_current_form;
-static gfc_linebuf *line_head, *line_tail;
-
-locus gfc_current_locus;
-const char *gfc_source_file;
-static FILE *gfc_src_file;
-static gfc_char_t *gfc_src_preprocessor_lines[2];
-
-static struct gfc_file_change
-{
- const char *filename;
- gfc_linebuf *lb;
- int line;
-} *file_changes;
-static size_t file_changes_cur, file_changes_count;
-static size_t file_changes_allocated;
-
-static gfc_char_t *last_error_char;
-
-/* Functions dealing with our wide characters (gfc_char_t) and
- sequences of such characters. */
-
-int
-gfc_wide_fits_in_byte (gfc_char_t c)
-{
- return (c <= UCHAR_MAX);
-}
-
-static inline int
-wide_is_ascii (gfc_char_t c)
-{
- return (gfc_wide_fits_in_byte (c) && ((unsigned char) c & ~0x7f) == 0);
-}
-
-int
-gfc_wide_is_printable (gfc_char_t c)
-{
- return (gfc_wide_fits_in_byte (c) && ISPRINT ((unsigned char) c));
-}
-
-gfc_char_t
-gfc_wide_tolower (gfc_char_t c)
-{
- return (wide_is_ascii (c) ? (gfc_char_t) TOLOWER((unsigned char) c) : c);
-}
-
-gfc_char_t
-gfc_wide_toupper (gfc_char_t c)
-{
- return (wide_is_ascii (c) ? (gfc_char_t) TOUPPER((unsigned char) c) : c);
-}
-
-int
-gfc_wide_is_digit (gfc_char_t c)
-{
- return (c >= '0' && c <= '9');
-}
-
-static inline int
-wide_atoi (gfc_char_t *c)
-{
-#define MAX_DIGITS 20
- char buf[MAX_DIGITS+1];
- int i = 0;
-
- while (gfc_wide_is_digit(*c) && i < MAX_DIGITS)
- buf[i++] = *c++;
- buf[i] = '\0';
- return atoi (buf);
-}
-
-size_t
-gfc_wide_strlen (const gfc_char_t *str)
-{
- size_t i;
-
- for (i = 0; str[i]; i++)
- ;
-
- return i;
-}
-
-gfc_char_t *
-gfc_wide_memset (gfc_char_t *b, gfc_char_t c, size_t len)
-{
- size_t i;
-
- for (i = 0; i < len; i++)
- b[i] = c;
-
- return b;
-}
-
-static gfc_char_t *
-wide_strcpy (gfc_char_t *dest, const gfc_char_t *src)
-{
- gfc_char_t *d;
-
- for (d = dest; (*d = *src) != '\0'; ++src, ++d)
- ;
-
- return dest;
-}
-
-static gfc_char_t *
-wide_strchr (const gfc_char_t *s, gfc_char_t c)
-{
- do {
- if (*s == c)
- {
- return CONST_CAST(gfc_char_t *, s);
- }
- } while (*s++);
- return 0;
-}
-
-char *
-gfc_widechar_to_char (const gfc_char_t *s, int length)
-{
- size_t len, i;
- char *res;
-
- if (s == NULL)
- return NULL;
-
- /* Passing a negative length is used to indicate that length should be
- calculated using gfc_wide_strlen(). */
- len = (length >= 0 ? (size_t) length : gfc_wide_strlen (s));
- res = XNEWVEC (char, len + 1);
-
- for (i = 0; i < len; i++)
- {
- gcc_assert (gfc_wide_fits_in_byte (s[i]));
- res[i] = (unsigned char) s[i];
- }
-
- res[len] = '\0';
- return res;
-}
-
-gfc_char_t *
-gfc_char_to_widechar (const char *s)
-{
- size_t len, i;
- gfc_char_t *res;
-
- if (s == NULL)
- return NULL;
-
- len = strlen (s);
- res = gfc_get_wide_string (len + 1);
-
- for (i = 0; i < len; i++)
- res[i] = (unsigned char) s[i];
-
- res[len] = '\0';
- return res;
-}
-
-static int
-wide_strncmp (const gfc_char_t *s1, const char *s2, size_t n)
-{
- gfc_char_t c1, c2;
-
- while (n-- > 0)
- {
- c1 = *s1++;
- c2 = *s2++;
- if (c1 != c2)
- return (c1 > c2 ? 1 : -1);
- if (c1 == '\0')
- return 0;
- }
- return 0;
-}
-
-int
-gfc_wide_strncasecmp (const gfc_char_t *s1, const char *s2, size_t n)
-{
- gfc_char_t c1, c2;
-
- while (n-- > 0)
- {
- c1 = gfc_wide_tolower (*s1++);
- c2 = TOLOWER (*s2++);
- if (c1 != c2)
- return (c1 > c2 ? 1 : -1);
- if (c1 == '\0')
- return 0;
- }
- return 0;
-}
-
-
-/* Main scanner initialization. */
-
-void
-gfc_scanner_init_1 (void)
-{
- file_head = NULL;
- line_head = NULL;
- line_tail = NULL;
-
- continue_count = 0;
- continue_line = 0;
-
- end_flag = 0;
- last_error_char = NULL;
-}
-
-
-/* Main scanner destructor. */
-
-void
-gfc_scanner_done_1 (void)
-{
- gfc_linebuf *lb;
- gfc_file *f;
-
- while(line_head != NULL)
- {
- lb = line_head->next;
- free (line_head);
- line_head = lb;
- }
-
- while(file_head != NULL)
- {
- f = file_head->next;
- free (file_head->filename);
- free (file_head);
- file_head = f;
- }
-}
-
-static bool
-gfc_do_check_include_dir (const char *path, bool warn)
-{
- struct stat st;
- if (stat (path, &st))
- {
- if (errno != ENOENT)
- gfc_warning_now (0, "Include directory %qs: %s",
- path, xstrerror(errno));
- else if (warn)
- gfc_warning_now (OPT_Wmissing_include_dirs,
- "Nonexistent include directory %qs", path);
- return false;
- }
- else if (!S_ISDIR (st.st_mode))
- {
- gfc_fatal_error ("%qs is not a directory", path);
- return false;
- }
- return true;
-}
-
-/* In order that -W(no-)missing-include-dirs works, the diagnostic can only be
- run after processing the commandline. */
-static void
-gfc_do_check_include_dirs (gfc_directorylist **list, bool do_warn)
-{
- gfc_directorylist *prev, *q, *n;
- prev = NULL;
- n = *list;
- while (n)
- {
- q = n; n = n->next;
- if (gfc_do_check_include_dir (q->path, q->warn && do_warn))
- {
- prev = q;
- continue;
- }
- if (prev == NULL)
- *list = n;
- else
- prev->next = n;
- free (q->path);
- free (q);
- }
-}
-
-void
-gfc_check_include_dirs (bool verbose_missing_dir_warn)
-{
- /* This is a bit convoluted: If gfc_cpp_enabled () and
- verbose_missing_dir_warn, the warning is shown by libcpp. Otherwise,
- it is shown here, still conditional on OPT_Wmissing_include_dirs. */
- bool warn = !gfc_cpp_enabled () || !verbose_missing_dir_warn;
- gfc_do_check_include_dirs (&include_dirs, warn);
- gfc_do_check_include_dirs (&intrinsic_modules_dirs, verbose_missing_dir_warn);
- if (gfc_option.module_dir && gfc_cpp_enabled ())
- gfc_do_check_include_dirs (&include_dirs, true);
-}
-
-/* Adds path to the list pointed to by list. */
-
-static void
-add_path_to_list (gfc_directorylist **list, const char *path,
- bool use_for_modules, bool head, bool warn, bool defer_warn)
-{
- gfc_directorylist *dir;
- const char *p;
- char *q;
- size_t len;
- int i;
-
- p = path;
- while (*p == ' ' || *p == '\t') /* someone might do "-I include" */
- if (*p++ == '\0')
- return;
-
- /* Strip trailing directory separators from the path, as this
- will confuse Windows systems. */
- len = strlen (p);
- q = (char *) alloca (len + 1);
- memcpy (q, p, len + 1);
- i = len - 1;
- while (i >=0 && IS_DIR_SEPARATOR (q[i]))
- q[i--] = '\0';
-
- if (!defer_warn && !gfc_do_check_include_dir (q, warn))
- return;
-
- if (head || *list == NULL)
- {
- dir = XCNEW (gfc_directorylist);
- if (!head)
- *list = dir;
- }
- else
- {
- dir = *list;
- while (dir->next)
- dir = dir->next;
-
- dir->next = XCNEW (gfc_directorylist);
- dir = dir->next;
- }
-
- dir->next = head ? *list : NULL;
- if (head)
- *list = dir;
- dir->use_for_modules = use_for_modules;
- dir->warn = warn;
- dir->path = XCNEWVEC (char, strlen (p) + 2);
- strcpy (dir->path, p);
- strcat (dir->path, "/"); /* make '/' last character */
-}
-
-/* defer_warn is set to true while parsing the commandline. */
-
-void
-gfc_add_include_path (const char *path, bool use_for_modules, bool file_dir,
- bool warn, bool defer_warn)
-{
- add_path_to_list (&include_dirs, path, use_for_modules, file_dir, warn,
- defer_warn);
-
- /* For '#include "..."' these directories are automatically searched. */
- if (!file_dir)
- gfc_cpp_add_include_path (xstrdup(path), true);
-}
-
-
-void
-gfc_add_intrinsic_modules_path (const char *path)
-{
- add_path_to_list (&intrinsic_modules_dirs, path, true, false, false, false);
-}
-
-
-/* Release resources allocated for options. */
-
-void
-gfc_release_include_path (void)
-{
- gfc_directorylist *p;
-
- while (include_dirs != NULL)
- {
- p = include_dirs;
- include_dirs = include_dirs->next;
- free (p->path);
- free (p);
- }
-
- while (intrinsic_modules_dirs != NULL)
- {
- p = intrinsic_modules_dirs;
- intrinsic_modules_dirs = intrinsic_modules_dirs->next;
- free (p->path);
- free (p);
- }
-
- free (gfc_option.module_dir);
-}
-
-
-static FILE *
-open_included_file (const char *name, gfc_directorylist *list,
- bool module, bool system)
-{
- char *fullname;
- gfc_directorylist *p;
- FILE *f;
-
- for (p = list; p; p = p->next)
- {
- if (module && !p->use_for_modules)
- continue;
-
- fullname = (char *) alloca(strlen (p->path) + strlen (name) + 1);
- strcpy (fullname, p->path);
- strcat (fullname, name);
-
- f = gfc_open_file (fullname);
- if (f != NULL)
- {
- if (gfc_cpp_makedep ())
- gfc_cpp_add_dep (fullname, system);
-
- return f;
- }
- }
-
- return NULL;
-}
-
-
-/* Opens file for reading, searching through the include directories
- given if necessary. If the include_cwd argument is true, we try
- to open the file in the current directory first. */
-
-FILE *
-gfc_open_included_file (const char *name, bool include_cwd, bool module)
-{
- FILE *f = NULL;
-
- if (IS_ABSOLUTE_PATH (name) || include_cwd)
- {
- f = gfc_open_file (name);
- if (f && gfc_cpp_makedep ())
- gfc_cpp_add_dep (name, false);
- }
-
- if (!f)
- f = open_included_file (name, include_dirs, module, false);
-
- return f;
-}
-
-
-/* Test to see if we're at the end of the main source file. */
-
-int
-gfc_at_end (void)
-{
- return end_flag;
-}
-
-
-/* Test to see if we're at the end of the current file. */
-
-int
-gfc_at_eof (void)
-{
- if (gfc_at_end ())
- return 1;
-
- if (line_head == NULL)
- return 1; /* Null file */
-
- if (gfc_current_locus.lb == NULL)
- return 1;
-
- return 0;
-}
-
-
-/* Test to see if we're at the beginning of a new line. */
-
-int
-gfc_at_bol (void)
-{
- if (gfc_at_eof ())
- return 1;
-
- return (gfc_current_locus.nextc == gfc_current_locus.lb->line);
-}
-
-
-/* Test to see if we're at the end of a line. */
-
-int
-gfc_at_eol (void)
-{
- if (gfc_at_eof ())
- return 1;
-
- return (*gfc_current_locus.nextc == '\0');
-}
-
-static void
-add_file_change (const char *filename, int line)
-{
- if (file_changes_count == file_changes_allocated)
- {
- if (file_changes_allocated)
- file_changes_allocated *= 2;
- else
- file_changes_allocated = 16;
- file_changes = XRESIZEVEC (struct gfc_file_change, file_changes,
- file_changes_allocated);
- }
- file_changes[file_changes_count].filename = filename;
- file_changes[file_changes_count].lb = NULL;
- file_changes[file_changes_count++].line = line;
-}
-
-static void
-report_file_change (gfc_linebuf *lb)
-{
- size_t c = file_changes_cur;
- while (c < file_changes_count
- && file_changes[c].lb == lb)
- {
- if (file_changes[c].filename)
- (*debug_hooks->start_source_file) (file_changes[c].line,
- file_changes[c].filename);
- else
- (*debug_hooks->end_source_file) (file_changes[c].line);
- ++c;
- }
- file_changes_cur = c;
-}
-
-void
-gfc_start_source_files (void)
-{
- /* If the debugger wants the name of the main source file,
- we give it. */
- if (debug_hooks->start_end_main_source_file)
- (*debug_hooks->start_source_file) (0, gfc_source_file);
-
- file_changes_cur = 0;
- report_file_change (gfc_current_locus.lb);
-}
-
-void
-gfc_end_source_files (void)
-{
- report_file_change (NULL);
-
- if (debug_hooks->start_end_main_source_file)
- (*debug_hooks->end_source_file) (0);
-}
-
-/* Advance the current line pointer to the next line. */
-
-void
-gfc_advance_line (void)
-{
- if (gfc_at_end ())
- return;
-
- if (gfc_current_locus.lb == NULL)
- {
- end_flag = 1;
- return;
- }
-
- if (gfc_current_locus.lb->next
- && !gfc_current_locus.lb->next->dbg_emitted)
- {
- report_file_change (gfc_current_locus.lb->next);
- gfc_current_locus.lb->next->dbg_emitted = true;
- }
-
- gfc_current_locus.lb = gfc_current_locus.lb->next;
-
- if (gfc_current_locus.lb != NULL)
- gfc_current_locus.nextc = gfc_current_locus.lb->line;
- else
- {
- gfc_current_locus.nextc = NULL;
- end_flag = 1;
- }
-}
-
-
-/* Get the next character from the input, advancing gfc_current_file's
- locus. When we hit the end of the line or the end of the file, we
- start returning a '\n' in order to complete the current statement.
- No Fortran line conventions are implemented here.
-
- Requiring explicit advances to the next line prevents the parse
- pointer from being on the wrong line if the current statement ends
- prematurely. */
-
-static gfc_char_t
-next_char (void)
-{
- gfc_char_t c;
-
- if (gfc_current_locus.nextc == NULL)
- return '\n';
-
- c = *gfc_current_locus.nextc++;
- if (c == '\0')
- {
- gfc_current_locus.nextc--; /* Remain on this line. */
- c = '\n';
- }
-
- return c;
-}
-
-
-/* Skip a comment. When we come here the parse pointer is positioned
- immediately after the comment character. If we ever implement
- compiler directives within comments, here is where we parse the
- directive. */
-
-static void
-skip_comment_line (void)
-{
- gfc_char_t c;
-
- do
- {
- c = next_char ();
- }
- while (c != '\n');
-
- gfc_advance_line ();
-}
-
-
-int
-gfc_define_undef_line (void)
-{
- char *tmp;
-
- /* All lines beginning with '#' are either #define or #undef. */
- if (debug_info_level != DINFO_LEVEL_VERBOSE || gfc_peek_ascii_char () != '#')
- return 0;
-
- if (wide_strncmp (gfc_current_locus.nextc, "#define ", 8) == 0)
- {
- tmp = gfc_widechar_to_char (&gfc_current_locus.nextc[8], -1);
- (*debug_hooks->define) (gfc_linebuf_linenum (gfc_current_locus.lb),
- tmp);
- free (tmp);
- }
-
- if (wide_strncmp (gfc_current_locus.nextc, "#undef ", 7) == 0)
- {
- tmp = gfc_widechar_to_char (&gfc_current_locus.nextc[7], -1);
- (*debug_hooks->undef) (gfc_linebuf_linenum (gfc_current_locus.lb),
- tmp);
- free (tmp);
- }
-
- /* Skip the rest of the line. */
- skip_comment_line ();
-
- return 1;
-}
-
-
-/* Return true if GCC$ was matched. */
-static bool
-skip_gcc_attribute (locus start)
-{
- bool r = false;
- char c;
- locus old_loc = gfc_current_locus;
-
- if ((c = next_char ()) == 'g' || c == 'G')
- if ((c = next_char ()) == 'c' || c == 'C')
- if ((c = next_char ()) == 'c' || c == 'C')
- if ((c = next_char ()) == '$')
- r = true;
-
- if (r == false)
- gfc_current_locus = old_loc;
- else
- {
- gcc_attribute_flag = 1;
- gcc_attribute_locus = old_loc;
- gfc_current_locus = start;
- }
-
- return r;
-}
-
-/* Return true if CC was matched. */
-static bool
-skip_free_oacc_sentinel (locus start, locus old_loc)
-{
- bool r = false;
- char c;
-
- if ((c = next_char ()) == 'c' || c == 'C')
- if ((c = next_char ()) == 'c' || c == 'C')
- r = true;
-
- if (r)
- {
- if ((c = next_char ()) == ' ' || c == '\t'
- || continue_flag)
- {
- while (gfc_is_whitespace (c))
- c = next_char ();
- if (c != '\n' && c != '!')
- {
- openacc_flag = 1;
- openacc_locus = old_loc;
- gfc_current_locus = start;
- }
- else
- r = false;
- }
- else
- {
- gfc_warning_now (0, "!$ACC at %C starts a commented "
- "line as it neither is followed "
- "by a space nor is a "
- "continuation line");
- r = false;
- }
- }
-
- return r;
-}
-
-/* Return true if MP was matched. */
-static bool
-skip_free_omp_sentinel (locus start, locus old_loc)
-{
- bool r = false;
- char c;
-
- if ((c = next_char ()) == 'm' || c == 'M')
- if ((c = next_char ()) == 'p' || c == 'P')
- r = true;
-
- if (r)
- {
- if ((c = next_char ()) == ' ' || c == '\t'
- || continue_flag)
- {
- while (gfc_is_whitespace (c))
- c = next_char ();
- if (c != '\n' && c != '!')
- {
- openmp_flag = 1;
- openmp_locus = old_loc;
- gfc_current_locus = start;
- }
- else
- r = false;
- }
- else
- {
- gfc_warning_now (0, "!$OMP at %C starts a commented "
- "line as it neither is followed "
- "by a space nor is a "
- "continuation line");
- r = false;
- }
- }
-
- return r;
-}
-
-/* Comment lines are null lines, lines containing only blanks or lines
- on which the first nonblank line is a '!'.
- Return true if !$ openmp or openacc conditional compilation sentinel was
- seen. */
-
-static bool
-skip_free_comments (void)
-{
- locus start;
- gfc_char_t c;
- int at_bol;
-
- for (;;)
- {
- at_bol = gfc_at_bol ();
- start = gfc_current_locus;
- if (gfc_at_eof ())
- break;
-
- do
- c = next_char ();
- while (gfc_is_whitespace (c));
-
- if (c == '\n')
- {
- gfc_advance_line ();
- continue;
- }
-
- if (c == '!')
- {
- /* Keep the !GCC$ line. */
- if (at_bol && skip_gcc_attribute (start))
- return false;
-
- /* If -fopenmp/-fopenacc, we need to handle here 2 things:
- 1) don't treat !$omp/!$acc as comments, but directives
- 2) handle OpenMP/OpenACC conditional compilation, where
- !$ should be treated as 2 spaces (for initial lines
- only if followed by space). */
- if (at_bol)
- {
- if ((flag_openmp || flag_openmp_simd)
- && flag_openacc)
- {
- locus old_loc = gfc_current_locus;
- if (next_char () == '$')
- {
- c = next_char ();
- if (c == 'o' || c == 'O')
- {
- if (skip_free_omp_sentinel (start, old_loc))
- return false;
- gfc_current_locus = old_loc;
- next_char ();
- c = next_char ();
- }
- else if (c == 'a' || c == 'A')
- {
- if (skip_free_oacc_sentinel (start, old_loc))
- return false;
- gfc_current_locus = old_loc;
- next_char ();
- c = next_char ();
- }
- if (continue_flag || c == ' ' || c == '\t')
- {
- gfc_current_locus = old_loc;
- next_char ();
- openmp_flag = openacc_flag = 0;
- return true;
- }
- }
- gfc_current_locus = old_loc;
- }
- else if ((flag_openmp || flag_openmp_simd)
- && !flag_openacc)
- {
- locus old_loc = gfc_current_locus;
- if (next_char () == '$')
- {
- c = next_char ();
- if (c == 'o' || c == 'O')
- {
- if (skip_free_omp_sentinel (start, old_loc))
- return false;
- gfc_current_locus = old_loc;
- next_char ();
- c = next_char ();
- }
- if (continue_flag || c == ' ' || c == '\t')
- {
- gfc_current_locus = old_loc;
- next_char ();
- openmp_flag = 0;
- return true;
- }
- }
- gfc_current_locus = old_loc;
- }
- else if (flag_openacc
- && !(flag_openmp || flag_openmp_simd))
- {
- locus old_loc = gfc_current_locus;
- if (next_char () == '$')
- {
- c = next_char ();
- if (c == 'a' || c == 'A')
- {
- if (skip_free_oacc_sentinel (start, old_loc))
- return false;
- gfc_current_locus = old_loc;
- next_char();
- c = next_char();
- }
- }
- gfc_current_locus = old_loc;
- }
- }
- skip_comment_line ();
- continue;
- }
-
- break;
- }
-
- if (openmp_flag && at_bol)
- openmp_flag = 0;
-
- if (openacc_flag && at_bol)
- openacc_flag = 0;
-
- gcc_attribute_flag = 0;
- gfc_current_locus = start;
- return false;
-}
-
-/* Return true if MP was matched in fixed form. */
-static bool
-skip_fixed_omp_sentinel (locus *start)
-{
- gfc_char_t c;
- if (((c = next_char ()) == 'm' || c == 'M')
- && ((c = next_char ()) == 'p' || c == 'P'))
- {
- c = next_char ();
- if (c != '\n'
- && (continue_flag
- || c == ' ' || c == '\t' || c == '0'))
- {
- if (c == ' ' || c == '\t' || c == '0')
- openacc_flag = 0;
- do
- c = next_char ();
- while (gfc_is_whitespace (c));
- if (c != '\n' && c != '!')
- {
- /* Canonicalize to *$omp. */
- *start->nextc = '*';
- openmp_flag = 1;
- gfc_current_locus = *start;
- return true;
- }
- }
- }
- return false;
-}
-
-/* Return true if CC was matched in fixed form. */
-static bool
-skip_fixed_oacc_sentinel (locus *start)
-{
- gfc_char_t c;
- if (((c = next_char ()) == 'c' || c == 'C')
- && ((c = next_char ()) == 'c' || c == 'C'))
- {
- c = next_char ();
- if (c != '\n'
- && (continue_flag
- || c == ' ' || c == '\t' || c == '0'))
- {
- if (c == ' ' || c == '\t' || c == '0')
- openmp_flag = 0;
- do
- c = next_char ();
- while (gfc_is_whitespace (c));
- if (c != '\n' && c != '!')
- {
- /* Canonicalize to *$acc. */
- *start->nextc = '*';
- openacc_flag = 1;
- gfc_current_locus = *start;
- return true;
- }
- }
- }
- return false;
-}
-
-/* Skip comment lines in fixed source mode. We have the same rules as
- in skip_free_comment(), except that we can have a 'c', 'C' or '*'
- in column 1, and a '!' cannot be in column 6. Also, we deal with
- lines with 'd' or 'D' in column 1, if the user requested this. */
-
-static void
-skip_fixed_comments (void)
-{
- locus start;
- int col;
- gfc_char_t c;
-
- if (! gfc_at_bol ())
- {
- start = gfc_current_locus;
- if (! gfc_at_eof ())
- {
- do
- c = next_char ();
- while (gfc_is_whitespace (c));
-
- if (c == '\n')
- gfc_advance_line ();
- else if (c == '!')
- skip_comment_line ();
- }
-
- if (! gfc_at_bol ())
- {
- gfc_current_locus = start;
- return;
- }
- }
-
- for (;;)
- {
- start = gfc_current_locus;
- if (gfc_at_eof ())
- break;
-
- c = next_char ();
- if (c == '\n')
- {
- gfc_advance_line ();
- continue;
- }
-
- if (c == '!' || c == 'c' || c == 'C' || c == '*')
- {
- if (skip_gcc_attribute (start))
- {
- /* Canonicalize to *$omp. */
- *start.nextc = '*';
- return;
- }
-
- if (gfc_current_locus.lb != NULL
- && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
- continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
-
- /* If -fopenmp/-fopenacc, we need to handle here 2 things:
- 1) don't treat !$omp/!$acc|c$omp/c$acc|*$omp / *$acc as comments,
- but directives
- 2) handle OpenMP/OpenACC conditional compilation, where
- !$|c$|*$ should be treated as 2 spaces if the characters
- in columns 3 to 6 are valid fixed form label columns
- characters. */
- if ((flag_openmp || flag_openmp_simd) && !flag_openacc)
- {
- if (next_char () == '$')
- {
- c = next_char ();
- if (c == 'o' || c == 'O')
- {
- if (skip_fixed_omp_sentinel (&start))
- return;
- }
- else
- goto check_for_digits;
- }
- gfc_current_locus = start;
- }
- else if (flag_openacc && !(flag_openmp || flag_openmp_simd))
- {
- if (next_char () == '$')
- {
- c = next_char ();
- if (c == 'a' || c == 'A')
- {
- if (skip_fixed_oacc_sentinel (&start))
- return;
- }
- }
- gfc_current_locus = start;
- }
- else if (flag_openacc || flag_openmp || flag_openmp_simd)
- {
- if (next_char () == '$')
- {
- c = next_char ();
- if (c == 'a' || c == 'A')
- {
- if (skip_fixed_oacc_sentinel (&start))
- return;
- }
- else if (c == 'o' || c == 'O')
- {
- if (skip_fixed_omp_sentinel (&start))
- return;
- }
- else
- goto check_for_digits;
- }
- gfc_current_locus = start;
- }
-
- skip_comment_line ();
- continue;
-
-check_for_digits:
- {
- /* Required for OpenMP's conditional compilation sentinel. */
- int digit_seen = 0;
-
- for (col = 3; col < 6; col++, c = next_char ())
- if (c == ' ')
- continue;
- else if (c == '\t')
- {
- col = 6;
- break;
- }
- else if (c < '0' || c > '9')
- break;
- else
- digit_seen = 1;
-
- if (col == 6 && c != '\n'
- && ((continue_flag && !digit_seen)
- || c == ' ' || c == '\t' || c == '0'))
- {
- gfc_current_locus = start;
- start.nextc[0] = ' ';
- start.nextc[1] = ' ';
- continue;
- }
- }
- skip_comment_line ();
- continue;
- }
-
- if (gfc_option.flag_d_lines != -1 && (c == 'd' || c == 'D'))
- {
- if (gfc_option.flag_d_lines == 0)
- {
- skip_comment_line ();
- continue;
- }
- else
- *start.nextc = c = ' ';
- }
-
- col = 1;
-
- while (gfc_is_whitespace (c))
- {
- c = next_char ();
- col++;
- }
-
- if (c == '\n')
- {
- gfc_advance_line ();
- continue;
- }
-
- if (col != 6 && c == '!')
- {
- if (gfc_current_locus.lb != NULL
- && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
- continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
- skip_comment_line ();
- continue;
- }
-
- break;
- }
-
- openmp_flag = 0;
- openacc_flag = 0;
- gcc_attribute_flag = 0;
- gfc_current_locus = start;
-}
-
-
-/* Skips the current line if it is a comment. */
-
-void
-gfc_skip_comments (void)
-{
- if (gfc_current_form == FORM_FREE)
- skip_free_comments ();
- else
- skip_fixed_comments ();
-}
-
-
-/* Get the next character from the input, taking continuation lines
- and end-of-line comments into account. This implies that comment
- lines between continued lines must be eaten here. For higher-level
- subroutines, this flattens continued lines into a single logical
- line. The in_string flag denotes whether we're inside a character
- context or not. */
-
-gfc_char_t
-gfc_next_char_literal (gfc_instring in_string)
-{
- static locus omp_acc_err_loc = {};
- locus old_loc;
- int i, prev_openmp_flag, prev_openacc_flag;
- gfc_char_t c;
-
- continue_flag = 0;
- prev_openacc_flag = prev_openmp_flag = 0;
-
-restart:
- c = next_char ();
- if (gfc_at_end ())
- {
- continue_count = 0;
- return c;
- }
-
- if (gfc_current_form == FORM_FREE)
- {
- bool openmp_cond_flag;
-
- if (!in_string && c == '!')
- {
- if (gcc_attribute_flag
- && memcmp (&gfc_current_locus, &gcc_attribute_locus,
- sizeof (gfc_current_locus)) == 0)
- goto done;
-
- if (openmp_flag
- && memcmp (&gfc_current_locus, &openmp_locus,
- sizeof (gfc_current_locus)) == 0)
- goto done;
-
- if (openacc_flag
- && memcmp (&gfc_current_locus, &openacc_locus,
- sizeof (gfc_current_locus)) == 0)
- goto done;
-
- /* This line can't be continued */
- do
- {
- c = next_char ();
- }
- while (c != '\n');
-
- /* Avoid truncation warnings for comment ending lines. */
- gfc_current_locus.lb->truncated = 0;
-
- goto done;
- }
-
- /* Check to see if the continuation line was truncated. */
- if (warn_line_truncation && gfc_current_locus.lb != NULL
- && gfc_current_locus.lb->truncated)
- {
- int maxlen = flag_free_line_length;
- gfc_char_t *current_nextc = gfc_current_locus.nextc;
-
- gfc_current_locus.lb->truncated = 0;
- gfc_current_locus.nextc = gfc_current_locus.lb->line + maxlen;
- gfc_warning_now (OPT_Wline_truncation,
- "Line truncated at %L", &gfc_current_locus);
- gfc_current_locus.nextc = current_nextc;
- }
-
- if (c != '&')
- goto done;
-
- /* If the next nonblank character is a ! or \n, we've got a
- continuation line. */
- old_loc = gfc_current_locus;
-
- c = next_char ();
- while (gfc_is_whitespace (c))
- c = next_char ();
-
- /* Character constants to be continued cannot have commentary
- after the '&'. However, there are cases where we may think we
- are still in a string and we are looking for a possible
- doubled quote and we end up here. See PR64506. */
-
- if (in_string && c != '\n')
- {
- gfc_current_locus = old_loc;
- c = '&';
- goto done;
- }
-
- if (c != '!' && c != '\n')
- {
- gfc_current_locus = old_loc;
- c = '&';
- goto done;
- }
-
- if (flag_openmp)
- prev_openmp_flag = openmp_flag;
- if (flag_openacc)
- prev_openacc_flag = openacc_flag;
-
- /* This can happen if the input file changed or via cpp's #line
- without getting reset (e.g. via input_stmt). It also happens
- when pre-including files via -fpre-include=. */
- if (continue_count == 0
- && gfc_current_locus.lb
- && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1)
- continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1;
-
- continue_flag = 1;
- if (c == '!')
- skip_comment_line ();
- else
- gfc_advance_line ();
-
- if (gfc_at_eof ())
- goto not_continuation;
-
- /* We've got a continuation line. If we are on the very next line after
- the last continuation, increment the continuation line count and
- check whether the limit has been exceeded. */
- if (gfc_linebuf_linenum (gfc_current_locus.lb) == continue_line + 1)
- {
- if (++continue_count == gfc_option.max_continue_free)
- {
- if (gfc_notification_std (GFC_STD_GNU) || pedantic)
- gfc_warning (0, "Limit of %d continuations exceeded in "
- "statement at %C", gfc_option.max_continue_free);
- }
- }
-
- /* Now find where it continues. First eat any comment lines. */
- openmp_cond_flag = skip_free_comments ();
-
- if (gfc_current_locus.lb != NULL
- && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
- continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
-
- if (flag_openmp)
- if (prev_openmp_flag != openmp_flag && !openacc_flag)
- {
- gfc_current_locus = old_loc;
- openmp_flag = prev_openmp_flag;
- c = '&';
- goto done;
- }
-
- if (flag_openacc)
- if (prev_openacc_flag != openacc_flag && !openmp_flag)
- {
- gfc_current_locus = old_loc;
- openacc_flag = prev_openacc_flag;
- c = '&';
- goto done;
- }
-
- /* Now that we have a non-comment line, probe ahead for the
- first non-whitespace character. If it is another '&', then
- reading starts at the next character, otherwise we must back
- up to where the whitespace started and resume from there. */
-
- old_loc = gfc_current_locus;
-
- c = next_char ();
- while (gfc_is_whitespace (c))
- c = next_char ();
-
- if (openmp_flag && !openacc_flag)
- {
- for (i = 0; i < 5; i++, c = next_char ())
- {
- gcc_assert (gfc_wide_tolower (c) == (unsigned char) "!$omp"[i]);
- if (i == 4)
- old_loc = gfc_current_locus;
- }
- while (gfc_is_whitespace (c))
- c = next_char ();
- }
- if (openacc_flag && !openmp_flag)
- {
- for (i = 0; i < 5; i++, c = next_char ())
- {
- gcc_assert (gfc_wide_tolower (c) == (unsigned char) "!$acc"[i]);
- if (i == 4)
- old_loc = gfc_current_locus;
- }
- while (gfc_is_whitespace (c))
- c = next_char ();
- }
-
- /* In case we have an OpenMP directive continued by OpenACC
- sentinel, or vice versa, we get both openmp_flag and
- openacc_flag on. */
-
- if (openacc_flag && openmp_flag)
- {
- int is_openmp = 0;
- for (i = 0; i < 5; i++, c = next_char ())
- {
- if (gfc_wide_tolower (c) != (unsigned char) "!$acc"[i])
- is_openmp = 1;
- }
- if (omp_acc_err_loc.nextc != gfc_current_locus.nextc
- || omp_acc_err_loc.lb != gfc_current_locus.lb)
- gfc_error_now (is_openmp
- ? G_("Wrong OpenACC continuation at %C: "
- "expected !$ACC, got !$OMP")
- : G_("Wrong OpenMP continuation at %C: "
- "expected !$OMP, got !$ACC"));
- omp_acc_err_loc = gfc_current_locus;
- goto not_continuation;
- }
-
- if (c != '&')
- {
- if (in_string && gfc_current_locus.nextc)
- {
- gfc_current_locus.nextc--;
- if (warn_ampersand && in_string == INSTRING_WARN)
- gfc_warning (OPT_Wampersand,
- "Missing %<&%> in continued character "
- "constant at %C");
- }
- else if (!in_string && (c == '\'' || c == '"'))
- goto done;
- /* Both !$omp and !$ -fopenmp continuation lines have & on the
- continuation line only optionally. */
- else if (openmp_flag || openacc_flag || openmp_cond_flag)
- {
- if (gfc_current_locus.nextc)
- gfc_current_locus.nextc--;
- }
- else
- {
- c = ' ';
- gfc_current_locus = old_loc;
- goto done;
- }
- }
- }
- else /* Fixed form. */
- {
- /* Fixed form continuation. */
- if (in_string != INSTRING_WARN && c == '!')
- {
- /* Skip comment at end of line. */
- do
- {
- c = next_char ();
- }
- while (c != '\n');
-
- /* Avoid truncation warnings for comment ending lines. */
- gfc_current_locus.lb->truncated = 0;
- }
-
- if (c != '\n')
- goto done;
-
- /* Check to see if the continuation line was truncated. */
- if (warn_line_truncation && gfc_current_locus.lb != NULL
- && gfc_current_locus.lb->truncated)
- {
- gfc_current_locus.lb->truncated = 0;
- gfc_warning_now (OPT_Wline_truncation,
- "Line truncated at %L", &gfc_current_locus);
- }
-
- if (flag_openmp)
- prev_openmp_flag = openmp_flag;
- if (flag_openacc)
- prev_openacc_flag = openacc_flag;
-
- /* This can happen if the input file changed or via cpp's #line
- without getting reset (e.g. via input_stmt). It also happens
- when pre-including files via -fpre-include=. */
- if (continue_count == 0
- && gfc_current_locus.lb
- && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1)
- continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1;
-
- continue_flag = 1;
- old_loc = gfc_current_locus;
-
- gfc_advance_line ();
- skip_fixed_comments ();
-
- /* See if this line is a continuation line. */
- if (flag_openmp && openmp_flag != prev_openmp_flag && !openacc_flag)
- {
- openmp_flag = prev_openmp_flag;
- goto not_continuation;
- }
- if (flag_openacc && openacc_flag != prev_openacc_flag && !openmp_flag)
- {
- openacc_flag = prev_openacc_flag;
- goto not_continuation;
- }
-
- /* In case we have an OpenMP directive continued by OpenACC
- sentinel, or vice versa, we get both openmp_flag and
- openacc_flag on. */
- if (openacc_flag && openmp_flag)
- {
- int is_openmp = 0;
- for (i = 0; i < 5; i++)
- {
- c = next_char ();
- if (gfc_wide_tolower (c) != (unsigned char) "*$acc"[i])
- is_openmp = 1;
- }
- if (omp_acc_err_loc.nextc != gfc_current_locus.nextc
- || omp_acc_err_loc.lb != gfc_current_locus.lb)
- gfc_error_now (is_openmp
- ? G_("Wrong OpenACC continuation at %C: "
- "expected !$ACC, got !$OMP")
- : G_("Wrong OpenMP continuation at %C: "
- "expected !$OMP, got !$ACC"));
- omp_acc_err_loc = gfc_current_locus;
- goto not_continuation;
- }
- else if (!openmp_flag && !openacc_flag)
- for (i = 0; i < 5; i++)
- {
- c = next_char ();
- if (c != ' ')
- goto not_continuation;
- }
- else if (openmp_flag)
- for (i = 0; i < 5; i++)
- {
- c = next_char ();
- if (gfc_wide_tolower (c) != (unsigned char) "*$omp"[i])
- goto not_continuation;
- }
- else if (openacc_flag)
- for (i = 0; i < 5; i++)
- {
- c = next_char ();
- if (gfc_wide_tolower (c) != (unsigned char) "*$acc"[i])
- goto not_continuation;
- }
-
- c = next_char ();
- if (c == '0' || c == ' ' || c == '\n')
- goto not_continuation;
-
- /* We've got a continuation line. If we are on the very next line after
- the last continuation, increment the continuation line count and
- check whether the limit has been exceeded. */
- if (gfc_linebuf_linenum (gfc_current_locus.lb) == continue_line + 1)
- {
- if (++continue_count == gfc_option.max_continue_fixed)
- {
- if (gfc_notification_std (GFC_STD_GNU) || pedantic)
- gfc_warning (0, "Limit of %d continuations exceeded in "
- "statement at %C",
- gfc_option.max_continue_fixed);
- }
- }
-
- if (gfc_current_locus.lb != NULL
- && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
- continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
- }
-
- /* Ready to read first character of continuation line, which might
- be another continuation line! */
- goto restart;
-
-not_continuation:
- c = '\n';
- gfc_current_locus = old_loc;
- end_flag = 0;
-
-done:
- if (c == '\n')
- continue_count = 0;
- continue_flag = 0;
- return c;
-}
-
-
-/* Get the next character of input, folded to lowercase. In fixed
- form mode, we also ignore spaces. When matcher subroutines are
- parsing character literals, they have to call
- gfc_next_char_literal(). */
-
-gfc_char_t
-gfc_next_char (void)
-{
- gfc_char_t c;
-
- do
- {
- c = gfc_next_char_literal (NONSTRING);
- }
- while (gfc_current_form == FORM_FIXED && gfc_is_whitespace (c));
-
- return gfc_wide_tolower (c);
-}
-
-char
-gfc_next_ascii_char (void)
-{
- gfc_char_t c = gfc_next_char ();
-
- return (gfc_wide_fits_in_byte (c) ? (unsigned char) c
- : (unsigned char) UCHAR_MAX);
-}
-
-
-gfc_char_t
-gfc_peek_char (void)
-{
- locus old_loc;
- gfc_char_t c;
-
- old_loc = gfc_current_locus;
- c = gfc_next_char ();
- gfc_current_locus = old_loc;
-
- return c;
-}
-
-
-char
-gfc_peek_ascii_char (void)
-{
- gfc_char_t c = gfc_peek_char ();
-
- return (gfc_wide_fits_in_byte (c) ? (unsigned char) c
- : (unsigned char) UCHAR_MAX);
-}
-
-
-/* Recover from an error. We try to get past the current statement
- and get lined up for the next. The next statement follows a '\n'
- or a ';'. We also assume that we are not within a character
- constant, and deal with finding a '\'' or '"'. */
-
-void
-gfc_error_recovery (void)
-{
- gfc_char_t c, delim;
-
- if (gfc_at_eof ())
- return;
-
- for (;;)
- {
- c = gfc_next_char ();
- if (c == '\n' || c == ';')
- break;
-
- if (c != '\'' && c != '"')
- {
- if (gfc_at_eof ())
- break;
- continue;
- }
- delim = c;
-
- for (;;)
- {
- c = next_char ();
-
- if (c == delim)
- break;
- if (c == '\n')
- return;
- if (c == '\\')
- {
- c = next_char ();
- if (c == '\n')
- return;
- }
- }
- if (gfc_at_eof ())
- break;
- }
-}
-
-
-/* Read ahead until the next character to be read is not whitespace. */
-
-void
-gfc_gobble_whitespace (void)
-{
- static int linenum = 0;
- locus old_loc;
- gfc_char_t c;
-
- do
- {
- old_loc = gfc_current_locus;
- c = gfc_next_char_literal (NONSTRING);
- /* Issue a warning for nonconforming tabs. We keep track of the line
- number because the Fortran matchers will often back up and the same
- line will be scanned multiple times. */
- if (warn_tabs && c == '\t')
- {
- int cur_linenum = LOCATION_LINE (gfc_current_locus.lb->location);
- if (cur_linenum != linenum)
- {
- linenum = cur_linenum;
- gfc_warning_now (OPT_Wtabs, "Nonconforming tab character at %C");
- }
- }
- }
- while (gfc_is_whitespace (c));
-
- if (!ISPRINT(c) && c != '\n' && last_error_char != gfc_current_locus.nextc)
- {
- char buf[20];
- last_error_char = gfc_current_locus.nextc;
- snprintf (buf, 20, "%2.2X", c);
- gfc_error_now ("Invalid character 0x%s at %C", buf);
- }
-
- gfc_current_locus = old_loc;
-}
-
-
-/* Load a single line into pbuf.
-
- If pbuf points to a NULL pointer, it is allocated.
- We truncate lines that are too long, unless we're dealing with
- preprocessor lines or if the option -ffixed-line-length-none is set,
- in which case we reallocate the buffer to fit the entire line, if
- need be.
- In fixed mode, we expand a tab that occurs within the statement
- label region to expand to spaces that leave the next character in
- the source region.
-
- If first_char is not NULL, it's a pointer to a single char value holding
- the first character of the line, which has already been read by the
- caller. This avoids the use of ungetc().
-
- load_line returns whether the line was truncated.
-
- NOTE: The error machinery isn't available at this point, so we can't
- easily report line and column numbers consistent with other
- parts of gfortran. */
-
-static int
-load_line (FILE *input, gfc_char_t **pbuf, int *pbuflen, const int *first_char)
-{
- int c, maxlen, i, preprocessor_flag, buflen = *pbuflen;
- int quoted = ' ', comment_ix = -1;
- bool seen_comment = false;
- bool first_comment = true;
- bool trunc_flag = false;
- bool seen_printable = false;
- bool seen_ampersand = false;
- bool found_tab = false;
- bool warned_tabs = false;
- gfc_char_t *buffer;
-
- /* Determine the maximum allowed line length. */
- if (gfc_current_form == FORM_FREE)
- maxlen = flag_free_line_length;
- else if (gfc_current_form == FORM_FIXED)
- maxlen = flag_fixed_line_length;
- else
- maxlen = 72;
-
- if (*pbuf == NULL)
- {
- /* Allocate the line buffer, storing its length into buflen.
- Note that if maxlen==0, indicating that arbitrary-length lines
- are allowed, the buffer will be reallocated if this length is
- insufficient; since 132 characters is the length of a standard
- free-form line, we use that as a starting guess. */
- if (maxlen > 0)
- buflen = maxlen;
- else
- buflen = 132;
-
- *pbuf = gfc_get_wide_string (buflen + 1);
- }
-
- i = 0;
- buffer = *pbuf;
-
- if (first_char)
- c = *first_char;
- else
- c = getc (input);
-
- /* In order to not truncate preprocessor lines, we have to
- remember that this is one. */
- preprocessor_flag = (c == '#');
-
- for (;;)
- {
- if (c == EOF)
- break;
-
- if (c == '\n')
- {
- /* Check for illegal use of ampersand. See F95 Standard 3.3.1.3. */
- if (gfc_current_form == FORM_FREE
- && !seen_printable && seen_ampersand)
- {
- if (pedantic)
- gfc_error_now ("%<&%> not allowed by itself in line %d",
- current_file->line);
- else
- gfc_warning_now (0, "%<&%> not allowed by itself in line %d",
- current_file->line);
- }
- break;
- }
-
- if (c == '\r' || c == '\0')
- goto next_char; /* Gobble characters. */
-
- if (c == '&')
- {
- if (seen_ampersand)
- {
- seen_ampersand = false;
- seen_printable = true;
- }
- else
- seen_ampersand = true;
- }
-
- if ((c != '&' && c != '!' && c != ' ') || (c == '!' && !seen_ampersand))
- seen_printable = true;
-
- /* Is this a fixed-form comment? */
- if (gfc_current_form == FORM_FIXED && i == 0
- && (c == '*' || c == 'c' || c == 'C'
- || (gfc_option.flag_d_lines != -1 && (c == 'd' || c == 'D'))))
- {
- seen_comment = true;
- comment_ix = i;
- }
-
- if (quoted == ' ')
- {
- if (c == '\'' || c == '"')
- quoted = c;
- }
- else if (c == quoted)
- quoted = ' ';
-
- /* Is this a free-form comment? */
- if (c == '!' && quoted == ' ')
- {
- if (seen_comment)
- first_comment = false;
- seen_comment = true;
- comment_ix = i;
- }
-
- /* For truncation and tab warnings, set seen_comment to false if one has
- either an OpenMP or OpenACC directive - or a !GCC$ attribute. If
- OpenMP is enabled, use '!$' as as conditional compilation sentinel
- and OpenMP directive ('!$omp'). */
- if (seen_comment && first_comment && flag_openmp && comment_ix + 1 == i
- && c == '$')
- first_comment = seen_comment = false;
- if (seen_comment && first_comment && comment_ix + 4 == i)
- {
- if (((*pbuf)[comment_ix+1] == 'g' || (*pbuf)[comment_ix+1] == 'G')
- && ((*pbuf)[comment_ix+2] == 'c' || (*pbuf)[comment_ix+2] == 'C')
- && ((*pbuf)[comment_ix+3] == 'c' || (*pbuf)[comment_ix+3] == 'C')
- && c == '$')
- first_comment = seen_comment = false;
- if (flag_openacc
- && (*pbuf)[comment_ix+1] == '$'
- && ((*pbuf)[comment_ix+2] == 'a' || (*pbuf)[comment_ix+2] == 'A')
- && ((*pbuf)[comment_ix+3] == 'c' || (*pbuf)[comment_ix+3] == 'C')
- && (c == 'c' || c == 'C'))
- first_comment = seen_comment = false;
- }
-
- /* Vendor extension: "<tab>1" marks a continuation line. */
- if (found_tab)
- {
- found_tab = false;
- if (c >= '1' && c <= '9')
- {
- *(buffer-1) = c;
- goto next_char;
- }
- }
-
- if (gfc_current_form == FORM_FIXED && c == '\t' && i < 6)
- {
- found_tab = true;
-
- if (warn_tabs && seen_comment == 0 && !warned_tabs)
- {
- warned_tabs = true;
- gfc_warning_now (OPT_Wtabs,
- "Nonconforming tab character in column %d "
- "of line %d", i + 1, current_file->line);
- }
-
- while (i < 6)
- {
- *buffer++ = ' ';
- i++;
- }
-
- goto next_char;
- }
-
- *buffer++ = c;
- i++;
-
- if (maxlen == 0 || preprocessor_flag)
- {
- if (i >= buflen)
- {
- /* Reallocate line buffer to double size to hold the
- overlong line. */
- buflen = buflen * 2;
- *pbuf = XRESIZEVEC (gfc_char_t, *pbuf, (buflen + 1));
- buffer = (*pbuf) + i;
- }
- }
- else if (i >= maxlen)
- {
- bool trunc_warn = true;
-
- /* Enhancement, if the very next non-space character is an ampersand
- or comment that we would otherwise warn about, don't mark as
- truncated. */
-
- /* Truncate the rest of the line. */
- for (;;)
- {
- c = getc (input);
- if (c == '\r' || c == ' ')
- continue;
-
- if (c == '\n' || c == EOF)
- break;
-
- if (!trunc_warn && c != '!')
- trunc_warn = true;
-
- if (trunc_warn && ((gfc_current_form == FORM_FIXED && c == '&')
- || c == '!'))
- trunc_warn = false;
-
- if (c == '!')
- seen_comment = 1;
-
- if (trunc_warn && !seen_comment)
- trunc_flag = 1;
- }
-
- c = '\n';
- continue;
- }
-
-next_char:
- c = getc (input);
- }
-
- /* Pad lines to the selected line length in fixed form. */
- if (gfc_current_form == FORM_FIXED
- && flag_fixed_line_length != 0
- && flag_pad_source
- && !preprocessor_flag
- && c != EOF)
- {
- while (i++ < maxlen)
- *buffer++ = ' ';
- }
-
- *buffer = '\0';
- *pbuflen = buflen;
-
- return trunc_flag;
-}
-
-
-/* Get a gfc_file structure, initialize it and add it to
- the file stack. */
-
-static gfc_file *
-get_file (const char *name, enum lc_reason reason)
-{
- gfc_file *f;
-
- f = XCNEW (gfc_file);
-
- f->filename = xstrdup (name);
-
- f->next = file_head;
- file_head = f;
-
- f->up = current_file;
- if (current_file != NULL)
- f->inclusion_line = current_file->line;
-
- linemap_add (line_table, reason, false, f->filename, 1);
-
- return f;
-}
-
-
-/* Deal with a line from the C preprocessor. The
- initial octothorp has already been seen. */
-
-static void
-preprocessor_line (gfc_char_t *c)
-{
- bool flag[5];
- int i, line;
- gfc_char_t *wide_filename;
- gfc_file *f;
- int escaped, unescape;
- char *filename;
-
- c++;
- while (*c == ' ' || *c == '\t')
- c++;
-
- if (*c < '0' || *c > '9')
- goto bad_cpp_line;
-
- line = wide_atoi (c);
-
- c = wide_strchr (c, ' ');
- if (c == NULL)
- {
- /* No file name given. Set new line number. */
- current_file->line = line;
- return;
- }
-
- /* Skip spaces. */
- while (*c == ' ' || *c == '\t')
- c++;
-
- /* Skip quote. */
- if (*c != '"')
- goto bad_cpp_line;
- ++c;
-
- wide_filename = c;
-
- /* Make filename end at quote. */
- unescape = 0;
- escaped = false;
- while (*c && ! (!escaped && *c == '"'))
- {
- if (escaped)
- escaped = false;
- else if (*c == '\\')
- {
- escaped = true;
- unescape++;
- }
- ++c;
- }
-
- if (! *c)
- /* Preprocessor line has no closing quote. */
- goto bad_cpp_line;
-
- *c++ = '\0';
-
- /* Undo effects of cpp_quote_string. */
- if (unescape)
- {
- gfc_char_t *s = wide_filename;
- gfc_char_t *d = gfc_get_wide_string (c - wide_filename - unescape);
-
- wide_filename = d;
- while (*s)
- {
- if (*s == '\\')
- *d++ = *++s;
- else
- *d++ = *s;
- s++;
- }
- *d = '\0';
- }
-
- /* Get flags. */
-
- flag[1] = flag[2] = flag[3] = flag[4] = false;
-
- for (;;)
- {
- c = wide_strchr (c, ' ');
- if (c == NULL)
- break;
-
- c++;
- i = wide_atoi (c);
-
- if (i >= 1 && i <= 4)
- flag[i] = true;
- }
-
- /* Convert the filename in wide characters into a filename in narrow
- characters. */
- filename = gfc_widechar_to_char (wide_filename, -1);
-
- /* Interpret flags. */
-
- if (flag[1]) /* Starting new file. */
- {
- f = get_file (filename, LC_RENAME);
- add_file_change (f->filename, f->inclusion_line);
- current_file = f;
- }
-
- if (flag[2]) /* Ending current file. */
- {
- if (!current_file->up
- || filename_cmp (current_file->up->filename, filename) != 0)
- {
- linemap_line_start (line_table, current_file->line, 80);
- /* ??? One could compute the exact column where the filename
- starts and compute the exact location here. */
- gfc_warning_now_at (linemap_position_for_column (line_table, 1),
- 0, "file %qs left but not entered",
- filename);
- current_file->line++;
- if (unescape)
- free (wide_filename);
- free (filename);
- return;
- }
-
- add_file_change (NULL, line);
- current_file = current_file->up;
- linemap_add (line_table, LC_RENAME, false, current_file->filename,
- current_file->line);
- }
-
- /* The name of the file can be a temporary file produced by
- cpp. Replace the name if it is different. */
-
- if (filename_cmp (current_file->filename, filename) != 0)
- {
- /* FIXME: we leak the old filename because a pointer to it may be stored
- in the linemap. Alternative could be using GC or updating linemap to
- point to the new name, but there is no API for that currently. */
- current_file->filename = xstrdup (filename);
-
- /* We need to tell the linemap API that the filename changed. Just
- changing current_file is insufficient. */
- linemap_add (line_table, LC_RENAME, false, current_file->filename, line);
- }
-
- /* Set new line number. */
- current_file->line = line;
- if (unescape)
- free (wide_filename);
- free (filename);
- return;
-
- bad_cpp_line:
- linemap_line_start (line_table, current_file->line, 80);
- /* ??? One could compute the exact column where the directive
- starts and compute the exact location here. */
- gfc_warning_now_at (linemap_position_for_column (line_table, 2), 0,
- "Illegal preprocessor directive");
- current_file->line++;
-}
-
-
-static void load_file (const char *, const char *, bool);
-
-/* include_line()-- Checks a line buffer to see if it is an include
- line. If so, we call load_file() recursively to load the included
- file. We never return a syntax error because a statement like
- "include = 5" is perfectly legal. We return 0 if no include was
- processed, 1 if we matched an include or -1 if include was
- partially processed, but will need continuation lines. */
-
-static int
-include_line (gfc_char_t *line)
-{
- gfc_char_t quote, *c, *begin, *stop;
- char *filename;
- const char *include = "include";
- bool allow_continuation = flag_dec_include;
- int i;
-
- c = line;
-
- if (flag_openmp || flag_openmp_simd)
- {
- if (gfc_current_form == FORM_FREE)
- {
- while (*c == ' ' || *c == '\t')
- c++;
- if (*c == '!' && c[1] == '$' && (c[2] == ' ' || c[2] == '\t'))
- c += 3;
- }
- else
- {
- if ((*c == '!' || *c == 'c' || *c == 'C' || *c == '*')
- && c[1] == '$' && c[2] == ' ')
- c += 3;
- }
- }
-
- if (gfc_current_form == FORM_FREE)
- {
- while (*c == ' ' || *c == '\t')
- c++;
- if (gfc_wide_strncasecmp (c, "include", 7))
- {
- if (!allow_continuation)
- return 0;
- for (i = 0; i < 7; ++i)
- {
- gfc_char_t c1 = gfc_wide_tolower (*c);
- if (c1 != (unsigned char) include[i])
- break;
- c++;
- }
- if (i == 0 || *c != '&')
- return 0;
- c++;
- while (*c == ' ' || *c == '\t')
- c++;
- if (*c == '\0' || *c == '!')
- return -1;
- return 0;
- }
-
- c += 7;
- }
- else
- {
- while (*c == ' ' || *c == '\t')
- c++;
- if (flag_dec_include && *c == '0' && c - line == 5)
- {
- c++;
- while (*c == ' ' || *c == '\t')
- c++;
- }
- if (c - line < 6)
- allow_continuation = false;
- for (i = 0; i < 7; ++i)
- {
- gfc_char_t c1 = gfc_wide_tolower (*c);
- if (c1 != (unsigned char) include[i])
- break;
- c++;
- while (*c == ' ' || *c == '\t')
- c++;
- }
- if (!allow_continuation)
- {
- if (i != 7)
- return 0;
- }
- else if (i != 7)
- {
- if (i == 0)
- return 0;
-
- /* At the end of line or comment this might be continued. */
- if (*c == '\0' || *c == '!')
- return -1;
-
- return 0;
- }
- }
-
- while (*c == ' ' || *c == '\t')
- c++;
-
- /* Find filename between quotes. */
-
- quote = *c++;
- if (quote != '"' && quote != '\'')
- {
- if (allow_continuation)
- {
- if (gfc_current_form == FORM_FREE)
- {
- if (quote == '&')
- {
- while (*c == ' ' || *c == '\t')
- c++;
- if (*c == '\0' || *c == '!')
- return -1;
- }
- }
- else if (quote == '\0' || quote == '!')
- return -1;
- }
- return 0;
- }
-
- begin = c;
-
- bool cont = false;
- while (*c != quote && *c != '\0')
- {
- if (allow_continuation && gfc_current_form == FORM_FREE)
- {
- if (*c == '&')
- cont = true;
- else if (*c != ' ' && *c != '\t')
- cont = false;
- }
- c++;
- }
-
- if (*c == '\0')
- {
- if (allow_continuation
- && (cont || gfc_current_form != FORM_FREE))
- return -1;
- return 0;
- }
-
- stop = c++;
-
- while (*c == ' ' || *c == '\t')
- c++;
-
- if (*c != '\0' && *c != '!')
- return 0;
-
- /* We have an include line at this point. */
-
- *stop = '\0'; /* It's ok to trash the buffer, as this line won't be
- read by anything else. */
-
- filename = gfc_widechar_to_char (begin, -1);
- load_file (filename, NULL, false);
- free (filename);
- return 1;
-}
-
-/* Similarly, but try to parse an INCLUDE statement, using gfc_next_char etc.
- APIs. Return 1 if recognized as valid INCLUDE statement and load_file has
- been called, 0 if it is not a valid INCLUDE statement and -1 if eof has
- been encountered while parsing it. */
-static int
-include_stmt (gfc_linebuf *b)
-{
- int ret = 0, i, length;
- const char *include = "include";
- gfc_char_t c, quote = 0;
- locus str_locus;
- char *filename;
-
- continue_flag = 0;
- end_flag = 0;
- gcc_attribute_flag = 0;
- openmp_flag = 0;
- openacc_flag = 0;
- continue_count = 0;
- continue_line = 0;
- gfc_current_locus.lb = b;
- gfc_current_locus.nextc = b->line;
-
- gfc_skip_comments ();
- gfc_gobble_whitespace ();
-
- for (i = 0; i < 7; i++)
- {
- c = gfc_next_char ();
- if (c != (unsigned char) include[i])
- {
- if (gfc_current_form == FORM_FIXED
- && i == 0
- && c == '0'
- && gfc_current_locus.nextc == b->line + 6)
- {
- gfc_gobble_whitespace ();
- i--;
- continue;
- }
- gcc_assert (i != 0);
- if (c == '\n')
- {
- gfc_advance_line ();
- gfc_skip_comments ();
- if (gfc_at_eof ())
- ret = -1;
- }
- goto do_ret;
- }
- }
- gfc_gobble_whitespace ();
-
- c = gfc_next_char ();
- if (c == '\'' || c == '"')
- quote = c;
- else
- {
- if (c == '\n')
- {
- gfc_advance_line ();
- gfc_skip_comments ();
- if (gfc_at_eof ())
- ret = -1;
- }
- goto do_ret;
- }
-
- str_locus = gfc_current_locus;
- length = 0;
- do
- {
- c = gfc_next_char_literal (INSTRING_NOWARN);
- if (c == quote)
- break;
- if (c == '\n')
- {
- gfc_advance_line ();
- gfc_skip_comments ();
- if (gfc_at_eof ())
- ret = -1;
- goto do_ret;
- }
- length++;
- }
- while (1);
-
- gfc_gobble_whitespace ();
- c = gfc_next_char ();
- if (c != '\n')
- goto do_ret;
-
- gfc_current_locus = str_locus;
- ret = 1;
- filename = XNEWVEC (char, length + 1);
- for (i = 0; i < length; i++)
- {
- c = gfc_next_char_literal (INSTRING_WARN);
- gcc_assert (gfc_wide_fits_in_byte (c));
- filename[i] = (unsigned char) c;
- }
- filename[length] = '\0';
- load_file (filename, NULL, false);
- free (filename);
-
-do_ret:
- continue_flag = 0;
- end_flag = 0;
- gcc_attribute_flag = 0;
- openmp_flag = 0;
- openacc_flag = 0;
- continue_count = 0;
- continue_line = 0;
- memset (&gfc_current_locus, '\0', sizeof (locus));
- memset (&openmp_locus, '\0', sizeof (locus));
- memset (&openacc_locus, '\0', sizeof (locus));
- memset (&gcc_attribute_locus, '\0', sizeof (locus));
- return ret;
-}
-
-
-
-/* Load a file into memory by calling load_line until the file ends. */
-
-static void
-load_file (const char *realfilename, const char *displayedname, bool initial)
-{
- gfc_char_t *line;
- gfc_linebuf *b, *include_b = NULL;
- gfc_file *f;
- FILE *input;
- int len, line_len;
- bool first_line;
- struct stat st;
- int stat_result;
- const char *filename;
- /* If realfilename and displayedname are different and non-null then
- surely realfilename is the preprocessed form of
- displayedname. */
- bool preprocessed_p = (realfilename && displayedname
- && strcmp (realfilename, displayedname));
-
- filename = displayedname ? displayedname : realfilename;
-
- for (f = current_file; f; f = f->up)
- if (filename_cmp (filename, f->filename) == 0)
- fatal_error (linemap_line_start (line_table, current_file->line, 0),
- "File %qs is being included recursively", filename);
- if (initial)
- {
- if (gfc_src_file)
- {
- input = gfc_src_file;
- gfc_src_file = NULL;
- }
- else
- input = gfc_open_file (realfilename);
-
- if (input == NULL)
- gfc_fatal_error ("Cannot open file %qs", filename);
- }
- else
- {
- input = gfc_open_included_file (realfilename, false, false);
- if (input == NULL)
- {
- /* For -fpre-include file, current_file is NULL. */
- if (current_file)
- fatal_error (linemap_line_start (line_table, current_file->line, 0),
- "Cannot open included file %qs", filename);
- else
- gfc_fatal_error ("Cannot open pre-included file %qs", filename);
- }
- stat_result = stat (realfilename, &st);
- if (stat_result == 0 && !S_ISREG (st.st_mode))
- {
- fclose (input);
- if (current_file)
- fatal_error (linemap_line_start (line_table, current_file->line, 0),
- "Included file %qs is not a regular file", filename);
- else
- gfc_fatal_error ("Included file %qs is not a regular file", filename);
- }
- }
-
- /* Load the file.
-
- A "non-initial" file means a file that is being included. In
- that case we are creating an LC_ENTER map.
-
- An "initial" file means a main file; one that is not included.
- That file has already got at least one (surely more) line map(s)
- created by gfc_init. So the subsequent map created in that case
- must have LC_RENAME reason.
-
- This latter case is not true for a preprocessed file. In that
- case, although the file is "initial", the line maps created by
- gfc_init was used during the preprocessing of the file. Now that
- the preprocessing is over and we are being fed the result of that
- preprocessing, we need to create a brand new line map for the
- preprocessed file, so the reason is going to be LC_ENTER. */
-
- f = get_file (filename, (initial && !preprocessed_p) ? LC_RENAME : LC_ENTER);
- if (!initial)
- add_file_change (f->filename, f->inclusion_line);
- current_file = f;
- current_file->line = 1;
- line = NULL;
- line_len = 0;
- first_line = true;
-
- if (initial && gfc_src_preprocessor_lines[0])
- {
- preprocessor_line (gfc_src_preprocessor_lines[0]);
- free (gfc_src_preprocessor_lines[0]);
- gfc_src_preprocessor_lines[0] = NULL;
- if (gfc_src_preprocessor_lines[1])
- {
- preprocessor_line (gfc_src_preprocessor_lines[1]);
- free (gfc_src_preprocessor_lines[1]);
- gfc_src_preprocessor_lines[1] = NULL;
- }
- }
-
- for (;;)
- {
- int trunc = load_line (input, &line, &line_len, NULL);
- int inc_line;
-
- len = gfc_wide_strlen (line);
- if (feof (input) && len == 0)
- break;
-
- /* If this is the first line of the file, it can contain a byte
- order mark (BOM), which we will ignore:
- FF FE is UTF-16 little endian,
- FE FF is UTF-16 big endian,
- EF BB BF is UTF-8. */
- if (first_line
- && ((line_len >= 2 && line[0] == (unsigned char) '\xFF'
- && line[1] == (unsigned char) '\xFE')
- || (line_len >= 2 && line[0] == (unsigned char) '\xFE'
- && line[1] == (unsigned char) '\xFF')
- || (line_len >= 3 && line[0] == (unsigned char) '\xEF'
- && line[1] == (unsigned char) '\xBB'
- && line[2] == (unsigned char) '\xBF')))
- {
- int n = line[1] == (unsigned char) '\xBB' ? 3 : 2;
- gfc_char_t *new_char = gfc_get_wide_string (line_len);
-
- wide_strcpy (new_char, &line[n]);
- free (line);
- line = new_char;
- len -= n;
- }
-
- /* There are three things this line can be: a line of Fortran
- source, an include line or a C preprocessor directive. */
-
- if (line[0] == '#')
- {
- /* When -g3 is specified, it's possible that we emit #define
- and #undef lines, which we need to pass to the middle-end
- so that it can emit correct debug info. */
- if (debug_info_level == DINFO_LEVEL_VERBOSE
- && (wide_strncmp (line, "#define ", 8) == 0
- || wide_strncmp (line, "#undef ", 7) == 0))
- ;
- else
- {
- preprocessor_line (line);
- continue;
- }
- }
-
- /* Preprocessed files have preprocessor lines added before the byte
- order mark, so first_line is not about the first line of the file
- but the first line that's not a preprocessor line. */
- first_line = false;
-
- inc_line = include_line (line);
- if (inc_line > 0)
- {
- current_file->line++;
- continue;
- }
-
- /* Add line. */
-
- b = XCNEWVAR (gfc_linebuf, gfc_linebuf_header_size
- + (len + 1) * sizeof (gfc_char_t));
-
-
- b->location
- = linemap_line_start (line_table, current_file->line++, len);
- /* ??? We add the location for the maximum column possible here,
- because otherwise if the next call creates a new line-map, it
- will not reserve space for any offset. */
- if (len > 0)
- linemap_position_for_column (line_table, len);
-
- b->file = current_file;
- b->truncated = trunc;
- wide_strcpy (b->line, line);
-
- if (line_head == NULL)
- line_head = b;
- else
- line_tail->next = b;
-
- line_tail = b;
-
- while (file_changes_cur < file_changes_count)
- file_changes[file_changes_cur++].lb = b;
-
- if (flag_dec_include)
- {
- if (include_b && b != include_b)
- {
- int inc_line2 = include_stmt (include_b);
- if (inc_line2 == 0)
- include_b = NULL;
- else if (inc_line2 > 0)
- {
- do
- {
- if (gfc_current_form == FORM_FIXED)
- {
- for (gfc_char_t *p = include_b->line; *p; p++)
- *p = ' ';
- }
- else
- include_b->line[0] = '\0';
- if (include_b == b)
- break;
- include_b = include_b->next;
- }
- while (1);
- include_b = NULL;
- }
- }
- if (inc_line == -1 && !include_b)
- include_b = b;
- }
- }
-
- /* Release the line buffer allocated in load_line. */
- free (line);
-
- fclose (input);
-
- if (!initial)
- add_file_change (NULL, current_file->inclusion_line + 1);
- current_file = current_file->up;
- linemap_add (line_table, LC_LEAVE, 0, NULL, 0);
-}
-
-
-/* Open a new file and start scanning from that file. Returns true
- if everything went OK, false otherwise. If form == FORM_UNKNOWN
- it tries to determine the source form from the filename, defaulting
- to free form. */
-
-void
-gfc_new_file (void)
-{
- if (flag_pre_include != NULL)
- load_file (flag_pre_include, NULL, false);
-
- if (gfc_cpp_enabled ())
- {
- gfc_cpp_preprocess (gfc_source_file);
- if (!gfc_cpp_preprocess_only ())
- load_file (gfc_cpp_temporary_file (), gfc_source_file, true);
- }
- else
- load_file (gfc_source_file, NULL, true);
-
- gfc_current_locus.lb = line_head;
- gfc_current_locus.nextc = (line_head == NULL) ? NULL : line_head->line;
-
-#if 0 /* Debugging aid. */
- for (; line_head; line_head = line_head->next)
- printf ("%s:%3d %s\n", LOCATION_FILE (line_head->location),
- LOCATION_LINE (line_head->location), line_head->line);
-
- exit (SUCCESS_EXIT_CODE);
-#endif
-}
-
-static char *
-unescape_filename (const char *ptr)
-{
- const char *p = ptr, *s;
- char *d, *ret;
- int escaped, unescape = 0;
-
- /* Make filename end at quote. */
- escaped = false;
- while (*p && ! (! escaped && *p == '"'))
- {
- if (escaped)
- escaped = false;
- else if (*p == '\\')
- {
- escaped = true;
- unescape++;
- }
- ++p;
- }
-
- if (!*p || p[1])
- return NULL;
-
- /* Undo effects of cpp_quote_string. */
- s = ptr;
- d = XCNEWVEC (char, p + 1 - ptr - unescape);
- ret = d;
-
- while (s != p)
- {
- if (*s == '\\')
- *d++ = *++s;
- else
- *d++ = *s;
- s++;
- }
- *d = '\0';
- return ret;
-}
-
-/* For preprocessed files, if the first tokens are of the form # NUM.
- handle the directives so we know the original file name. */
-
-const char *
-gfc_read_orig_filename (const char *filename, const char **canon_source_file)
-{
- int c, len;
- char *dirname, *tmp;
-
- gfc_src_file = gfc_open_file (filename);
- if (gfc_src_file == NULL)
- return NULL;
-
- c = getc (gfc_src_file);
-
- if (c != '#')
- return NULL;
-
- len = 0;
- load_line (gfc_src_file, &gfc_src_preprocessor_lines[0], &len, &c);
-
- if (wide_strncmp (gfc_src_preprocessor_lines[0], "# 1 \"", 5) != 0)
- return NULL;
-
- tmp = gfc_widechar_to_char (&gfc_src_preprocessor_lines[0][5], -1);
- filename = unescape_filename (tmp);
- free (tmp);
- if (filename == NULL)
- return NULL;
-
- c = getc (gfc_src_file);
-
- if (c != '#')
- return filename;
-
- len = 0;
- load_line (gfc_src_file, &gfc_src_preprocessor_lines[1], &len, &c);
-
- if (wide_strncmp (gfc_src_preprocessor_lines[1], "# 1 \"", 5) != 0)
- return filename;
-
- tmp = gfc_widechar_to_char (&gfc_src_preprocessor_lines[1][5], -1);
- dirname = unescape_filename (tmp);
- free (tmp);
- if (dirname == NULL)
- return filename;
-
- len = strlen (dirname);
- if (len < 3 || dirname[len - 1] != '/' || dirname[len - 2] != '/')
- {
- free (dirname);
- return filename;
- }
- dirname[len - 2] = '\0';
- set_src_pwd (dirname);
-
- if (! IS_ABSOLUTE_PATH (filename))
- {
- char *p = XCNEWVEC (char, len + strlen (filename));
-
- memcpy (p, dirname, len - 2);
- p[len - 2] = '/';
- strcpy (p + len - 1, filename);
- *canon_source_file = p;
- }
-
- free (dirname);
- return filename;
-}