diff options
author | Martin Liska <mliska@suse.cz> | 2022-01-14 16:56:44 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2022-01-17 22:12:04 +0100 |
commit | 5c69acb32329d49e58c26fa41ae74229a52b9106 (patch) | |
tree | ddb05f9d73afb6f998457d2ac4b720e3b3b60483 /gcc/opts.c | |
parent | 490e23032baaece71f2ec09fa1805064b150fbc2 (diff) | |
download | gcc-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/opts.c')
-rw-r--r-- | gcc/opts.c | 3722 |
1 files changed, 0 insertions, 3722 deletions
diff --git a/gcc/opts.c b/gcc/opts.c deleted file mode 100644 index 17e1884..0000000 --- a/gcc/opts.c +++ /dev/null @@ -1,3722 +0,0 @@ -/* Command line option handling. - Copyright (C) 2002-2022 Free Software Foundation, Inc. - Contributed by Neil Booth. - -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/>. */ - -#include "config.h" -#include "system.h" -#include "intl.h" -#include "coretypes.h" -#include "opts.h" -#include "tm.h" -#include "flags.h" -#include "diagnostic.h" -#include "opts-diagnostic.h" -#include "insn-attr-common.h" -#include "common/common-target.h" -#include "spellcheck.h" -#include "opt-suggestions.h" -#include "diagnostic-color.h" -#include "version.h" -#include "selftest.h" - -static void set_Wstrict_aliasing (struct gcc_options *opts, int onoff); - -/* Names of fundamental debug info formats indexed by enum - debug_info_type. */ - -const char *const debug_type_names[] = -{ - "none", "stabs", "dwarf-2", "xcoff", "vms", "ctf", "btf" -}; - -/* Bitmasks of fundamental debug info formats indexed by enum - debug_info_type. */ - -static uint32_t debug_type_masks[] = -{ - NO_DEBUG, DBX_DEBUG, DWARF2_DEBUG, XCOFF_DEBUG, VMS_DEBUG, - CTF_DEBUG, BTF_DEBUG -}; - -/* Names of the set of debug formats requested by user. Updated and accessed - via debug_set_names. */ - -static char df_set_names[sizeof "none stabs dwarf-2 xcoff vms ctf btf"]; - -/* Get enum debug_info_type of the specified debug format, for error messages. - Can be used only for individual debug format types. */ - -enum debug_info_type -debug_set_to_format (uint32_t debug_info_set) -{ - int idx = 0; - enum debug_info_type dinfo_type = DINFO_TYPE_NONE; - /* Find first set bit. */ - if (debug_info_set) - idx = exact_log2 (debug_info_set & - debug_info_set); - /* Check that only one bit is set, if at all. This function is meant to be - used only for vanilla debug_info_set bitmask values, i.e. for individual - debug format types upto DINFO_TYPE_MAX. */ - gcc_assert ((debug_info_set & (debug_info_set - 1)) == 0); - dinfo_type = (enum debug_info_type)idx; - gcc_assert (dinfo_type <= DINFO_TYPE_MAX); - return dinfo_type; -} - -/* Get the number of debug formats enabled for output. */ - -unsigned int -debug_set_count (uint32_t w_symbols) -{ - unsigned int count = 0; - while (w_symbols) - { - ++ count; - w_symbols &= ~ (w_symbols & - w_symbols); - } - return count; -} - -/* Get the names of the debug formats enabled for output. */ - -const char * -debug_set_names (uint32_t w_symbols) -{ - uint32_t df_mask = 0; - /* Reset the string to be returned. */ - memset (df_set_names, 0, sizeof (df_set_names)); - /* Get the popcount. */ - int num_set_df = debug_set_count (w_symbols); - /* Iterate over the debug formats. Add name string for those enabled. */ - for (int i = DINFO_TYPE_NONE; i <= DINFO_TYPE_MAX; i++) - { - df_mask = debug_type_masks[i]; - if (w_symbols & df_mask) - { - strcat (df_set_names, debug_type_names[i]); - num_set_df--; - if (num_set_df) - strcat (df_set_names, " "); - else - break; - } - else if (!w_symbols) - { - /* No debug formats enabled. */ - gcc_assert (i == DINFO_TYPE_NONE); - strcat (df_set_names, debug_type_names[i]); - break; - } - } - return df_set_names; -} - -/* Return TRUE iff BTF debug info is enabled. */ - -bool -btf_debuginfo_p () -{ - return (write_symbols & BTF_DEBUG); -} - -/* Return TRUE iff BTF with CO-RE debug info is enabled. */ - -bool -btf_with_core_debuginfo_p () -{ - return (write_symbols & BTF_WITH_CORE_DEBUG); -} - -/* Return TRUE iff CTF debug info is enabled. */ - -bool -ctf_debuginfo_p () -{ - return (write_symbols & CTF_DEBUG); -} - -/* Return TRUE iff dwarf2 debug info is enabled. */ - -bool -dwarf_debuginfo_p () -{ - return (write_symbols & DWARF2_DEBUG); -} - -/* Return true iff the debug info format is to be generated based on DWARF - DIEs (like CTF and BTF debug info formats). */ - -bool dwarf_based_debuginfo_p () -{ - return ((write_symbols & CTF_DEBUG) - || (write_symbols & BTF_DEBUG)); -} - -/* Parse the -femit-struct-debug-detailed option value - and set the flag variables. */ - -#define MATCH( prefix, string ) \ - ((strncmp (prefix, string, sizeof prefix - 1) == 0) \ - ? ((string += sizeof prefix - 1), 1) : 0) - -void -set_struct_debug_option (struct gcc_options *opts, location_t loc, - const char *spec) -{ - /* various labels for comparison */ - static const char dfn_lbl[] = "dfn:", dir_lbl[] = "dir:", ind_lbl[] = "ind:"; - static const char ord_lbl[] = "ord:", gen_lbl[] = "gen:"; - static const char none_lbl[] = "none", any_lbl[] = "any"; - static const char base_lbl[] = "base", sys_lbl[] = "sys"; - - enum debug_struct_file files = DINFO_STRUCT_FILE_ANY; - /* Default is to apply to as much as possible. */ - enum debug_info_usage usage = DINFO_USAGE_NUM_ENUMS; - int ord = 1, gen = 1; - - /* What usage? */ - if (MATCH (dfn_lbl, spec)) - usage = DINFO_USAGE_DFN; - else if (MATCH (dir_lbl, spec)) - usage = DINFO_USAGE_DIR_USE; - else if (MATCH (ind_lbl, spec)) - usage = DINFO_USAGE_IND_USE; - - /* Generics or not? */ - if (MATCH (ord_lbl, spec)) - gen = 0; - else if (MATCH (gen_lbl, spec)) - ord = 0; - - /* What allowable environment? */ - if (MATCH (none_lbl, spec)) - files = DINFO_STRUCT_FILE_NONE; - else if (MATCH (any_lbl, spec)) - files = DINFO_STRUCT_FILE_ANY; - else if (MATCH (sys_lbl, spec)) - files = DINFO_STRUCT_FILE_SYS; - else if (MATCH (base_lbl, spec)) - files = DINFO_STRUCT_FILE_BASE; - else - error_at (loc, - "argument %qs to %<-femit-struct-debug-detailed%> " - "not recognized", - spec); - - /* Effect the specification. */ - if (usage == DINFO_USAGE_NUM_ENUMS) - { - if (ord) - { - opts->x_debug_struct_ordinary[DINFO_USAGE_DFN] = files; - opts->x_debug_struct_ordinary[DINFO_USAGE_DIR_USE] = files; - opts->x_debug_struct_ordinary[DINFO_USAGE_IND_USE] = files; - } - if (gen) - { - opts->x_debug_struct_generic[DINFO_USAGE_DFN] = files; - opts->x_debug_struct_generic[DINFO_USAGE_DIR_USE] = files; - opts->x_debug_struct_generic[DINFO_USAGE_IND_USE] = files; - } - } - else - { - if (ord) - opts->x_debug_struct_ordinary[usage] = files; - if (gen) - opts->x_debug_struct_generic[usage] = files; - } - - if (*spec == ',') - set_struct_debug_option (opts, loc, spec+1); - else - { - /* No more -femit-struct-debug-detailed specifications. - Do final checks. */ - if (*spec != '\0') - error_at (loc, - "argument %qs to %<-femit-struct-debug-detailed%> unknown", - spec); - if (opts->x_debug_struct_ordinary[DINFO_USAGE_DIR_USE] - < opts->x_debug_struct_ordinary[DINFO_USAGE_IND_USE] - || opts->x_debug_struct_generic[DINFO_USAGE_DIR_USE] - < opts->x_debug_struct_generic[DINFO_USAGE_IND_USE]) - error_at (loc, - "%<-femit-struct-debug-detailed=dir:...%> must allow " - "at least as much as " - "%<-femit-struct-debug-detailed=ind:...%>"); - } -} - -/* Strip off a legitimate source ending from the input string NAME of - length LEN. Rather than having to know the names used by all of - our front ends, we strip off an ending of a period followed by - up to fource characters. (C++ uses ".cpp".) */ - -void -strip_off_ending (char *name, int len) -{ - int i; - for (i = 2; i < 5 && len > i; i++) - { - if (name[len - i] == '.') - { - name[len - i] = '\0'; - break; - } - } -} - -/* Find the base name of a path, stripping off both directories and - a single final extension. */ -int -base_of_path (const char *path, const char **base_out) -{ - const char *base = path; - const char *dot = 0; - const char *p = path; - char c = *p; - while (c) - { - if (IS_DIR_SEPARATOR (c)) - { - base = p + 1; - dot = 0; - } - else if (c == '.') - dot = p; - c = *++p; - } - if (!dot) - dot = p; - *base_out = base; - return dot - base; -} - -/* What to print when a switch has no documentation. */ -static const char undocumented_msg[] = N_("This option lacks documentation."); -static const char use_diagnosed_msg[] = N_("Uses of this option are diagnosed."); - -typedef char *char_p; /* For DEF_VEC_P. */ - -static void set_debug_level (uint32_t dinfo, int extended, - const char *arg, struct gcc_options *opts, - struct gcc_options *opts_set, - location_t loc); -static void set_fast_math_flags (struct gcc_options *opts, int set); -static void decode_d_option (const char *arg, struct gcc_options *opts, - location_t loc, diagnostic_context *dc); -static void set_unsafe_math_optimizations_flags (struct gcc_options *opts, - int set); -static void enable_warning_as_error (const char *arg, int value, - unsigned int lang_mask, - const struct cl_option_handlers *handlers, - struct gcc_options *opts, - struct gcc_options *opts_set, - location_t loc, - diagnostic_context *dc); - -/* Handle a back-end option; arguments and return value as for - handle_option. */ - -bool -target_handle_option (struct gcc_options *opts, - struct gcc_options *opts_set, - const struct cl_decoded_option *decoded, - unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, - location_t loc, - const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED, - diagnostic_context *dc, void (*) (void)) -{ - gcc_assert (dc == global_dc); - gcc_assert (kind == DK_UNSPECIFIED); - return targetm_common.handle_option (opts, opts_set, decoded, loc); -} - -/* Add comma-separated strings to a char_p vector. */ - -static void -add_comma_separated_to_vector (void **pvec, const char *arg) -{ - char *tmp; - char *r; - char *w; - char *token_start; - vec<char_p> *v = (vec<char_p> *) *pvec; - - vec_check_alloc (v, 1); - - /* We never free this string. */ - tmp = xstrdup (arg); - - r = tmp; - w = tmp; - token_start = tmp; - - while (*r != '\0') - { - if (*r == ',') - { - *w++ = '\0'; - ++r; - v->safe_push (token_start); - token_start = w; - } - if (*r == '\\' && r[1] == ',') - { - *w++ = ','; - r += 2; - } - else - *w++ = *r++; - } - - *w = '\0'; - if (*token_start != '\0') - v->safe_push (token_start); - - *pvec = v; -} - -/* Initialize opts_obstack. */ - -void -init_opts_obstack (void) -{ - gcc_obstack_init (&opts_obstack); -} - -/* Initialize OPTS and OPTS_SET before using them in parsing options. */ - -void -init_options_struct (struct gcc_options *opts, struct gcc_options *opts_set) -{ - /* Ensure that opts_obstack has already been initialized by the time - that we initialize any gcc_options instances (PR jit/68446). */ - gcc_assert (opts_obstack.chunk_size > 0); - - *opts = global_options_init; - - if (opts_set) - memset (opts_set, 0, sizeof (*opts_set)); - - /* Initialize whether `char' is signed. */ - opts->x_flag_signed_char = DEFAULT_SIGNED_CHAR; - /* Set this to a special "uninitialized" value. The actual default - is set after target options have been processed. */ - opts->x_flag_short_enums = 2; - - /* Initialize target_flags before default_options_optimization - so the latter can modify it. */ - opts->x_target_flags = targetm_common.default_target_flags; - - /* Some targets have ABI-specified unwind tables. */ - opts->x_flag_unwind_tables = targetm_common.unwind_tables_default; - - /* Some targets have other target-specific initialization. */ - targetm_common.option_init_struct (opts); -} - -/* If indicated by the optimization level LEVEL (-Os if SIZE is set, - -Ofast if FAST is set, -Og if DEBUG is set), apply the option DEFAULT_OPT - to OPTS and OPTS_SET, diagnostic context DC, location LOC, with language - mask LANG_MASK and option handlers HANDLERS. */ - -static void -maybe_default_option (struct gcc_options *opts, - struct gcc_options *opts_set, - const struct default_options *default_opt, - int level, bool size, bool fast, bool debug, - unsigned int lang_mask, - const struct cl_option_handlers *handlers, - location_t loc, - diagnostic_context *dc) -{ - const struct cl_option *option = &cl_options[default_opt->opt_index]; - bool enabled; - - if (size) - gcc_assert (level == 2); - if (fast) - gcc_assert (level == 3); - if (debug) - gcc_assert (level == 1); - - switch (default_opt->levels) - { - case OPT_LEVELS_ALL: - enabled = true; - break; - - case OPT_LEVELS_0_ONLY: - enabled = (level == 0); - break; - - case OPT_LEVELS_1_PLUS: - enabled = (level >= 1); - break; - - case OPT_LEVELS_1_PLUS_SPEED_ONLY: - enabled = (level >= 1 && !size && !debug); - break; - - case OPT_LEVELS_1_PLUS_NOT_DEBUG: - enabled = (level >= 1 && !debug); - break; - - case OPT_LEVELS_2_PLUS: - enabled = (level >= 2); - break; - - case OPT_LEVELS_2_PLUS_SPEED_ONLY: - enabled = (level >= 2 && !size && !debug); - break; - - case OPT_LEVELS_3_PLUS: - enabled = (level >= 3); - break; - - case OPT_LEVELS_3_PLUS_AND_SIZE: - enabled = (level >= 3 || size); - break; - - case OPT_LEVELS_SIZE: - enabled = size; - break; - - case OPT_LEVELS_FAST: - enabled = fast; - break; - - case OPT_LEVELS_NONE: - default: - gcc_unreachable (); - } - - if (enabled) - handle_generated_option (opts, opts_set, default_opt->opt_index, - default_opt->arg, default_opt->value, - lang_mask, DK_UNSPECIFIED, loc, - handlers, true, dc); - else if (default_opt->arg == NULL - && !option->cl_reject_negative - && !(option->flags & CL_PARAMS)) - handle_generated_option (opts, opts_set, default_opt->opt_index, - default_opt->arg, !default_opt->value, - lang_mask, DK_UNSPECIFIED, loc, - handlers, true, dc); -} - -/* As indicated by the optimization level LEVEL (-Os if SIZE is set, - -Ofast if FAST is set), apply the options in array DEFAULT_OPTS to - OPTS and OPTS_SET, diagnostic context DC, location LOC, with - language mask LANG_MASK and option handlers HANDLERS. */ - -static void -maybe_default_options (struct gcc_options *opts, - struct gcc_options *opts_set, - const struct default_options *default_opts, - int level, bool size, bool fast, bool debug, - unsigned int lang_mask, - const struct cl_option_handlers *handlers, - location_t loc, - diagnostic_context *dc) -{ - size_t i; - - for (i = 0; default_opts[i].levels != OPT_LEVELS_NONE; i++) - maybe_default_option (opts, opts_set, &default_opts[i], - level, size, fast, debug, - lang_mask, handlers, loc, dc); -} - -/* Table of options enabled by default at different levels. - Please keep this list sorted by level and alphabetized within - each level; this makes it easier to keep the documentation - in sync. */ - -static const struct default_options default_options_table[] = - { - /* -O1 and -Og optimizations. */ - { OPT_LEVELS_1_PLUS, OPT_fcombine_stack_adjustments, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fcompare_elim, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fcprop_registers, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fdefer_pop, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fforward_propagate, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fguess_branch_probability, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fipa_profile, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fipa_pure_const, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fipa_reference, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fipa_reference_addressable, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fmerge_constants, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_freorder_blocks, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fshrink_wrap, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fsplit_wide_types, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fthread_jumps, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_builtin_call_dce, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_ccp, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_ch, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_coalesce_vars, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_copy_prop, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_dce, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_dominator_opts, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_fre, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_sink, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_slsr, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_ftree_ter, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fvar_tracking, NULL, 1 }, - - /* -O1 (and not -Og) optimizations. */ - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fbranch_count_reg, NULL, 1 }, -#if DELAY_SLOTS - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fdelayed_branch, NULL, 1 }, -#endif - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fdse, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion2, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_finline_functions_called_once, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fmove_loop_invariants, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fmove_loop_stores, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fssa_phiopt, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fipa_modref, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_bit_ccp, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_dse, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_pta, NULL, 1 }, - { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_sra, NULL, 1 }, - - /* -O2 and -Os optimizations. */ - { OPT_LEVELS_2_PLUS, OPT_fcaller_saves, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fcode_hoisting, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fcrossjumping, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fcse_follow_jumps, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fdevirtualize, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fdevirtualize_speculatively, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fexpensive_optimizations, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fgcse, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fhoist_adjacent_loads, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_findirect_inlining, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_finline_small_functions, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fipa_bit_cp, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fipa_cp, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fipa_icf, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fipa_ra, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fipa_sra, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fipa_vrp, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fisolate_erroneous_paths_dereference, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_flra_remat, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_foptimize_sibling_calls, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fpartial_inlining, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fpeephole2, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_freorder_functions, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_frerun_cse_after_loop, NULL, 1 }, -#ifdef INSN_SCHEDULING - { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 }, -#endif - { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fstore_merging, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_ftree_pre, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_ftree_switch_conversion, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_ftree_tail_merge, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_fvect_cost_model_, NULL, - VECT_COST_MODEL_VERY_CHEAP }, - { OPT_LEVELS_2_PLUS, OPT_finline_functions, NULL, 1 }, - { OPT_LEVELS_2_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 }, - - /* -O2 and above optimizations, but not -Os or -Og. */ - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_functions, NULL, 1 }, - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_jumps, NULL, 1 }, - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_labels, NULL, 1 }, - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_loops, NULL, 1 }, - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_foptimize_strlen, NULL, 1 }, - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_freorder_blocks_algorithm_, NULL, - REORDER_BLOCKS_ALGORITHM_STC }, - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_ftree_loop_vectorize, NULL, 1 }, - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_ftree_slp_vectorize, NULL, 1 }, -#ifdef INSN_SCHEDULING - /* Only run the pre-regalloc scheduling pass if optimizing for speed. */ - { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_fschedule_insns, NULL, 1 }, -#endif - - /* -O3 and -Os optimizations. */ - - /* -O3 optimizations. */ - { OPT_LEVELS_3_PLUS, OPT_fgcse_after_reload, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_fipa_cp_clone, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_floop_interchange, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_floop_unroll_and_jam, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_fpeel_loops, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_fsplit_loops, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribution, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_ftree_partial_pre, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_funswitch_loops, NULL, 1 }, - { OPT_LEVELS_3_PLUS, OPT_fvect_cost_model_, NULL, VECT_COST_MODEL_DYNAMIC }, - { OPT_LEVELS_3_PLUS, OPT_fversion_loops_for_strides, NULL, 1 }, - - /* -O3 parameters. */ - { OPT_LEVELS_3_PLUS, OPT__param_max_inline_insns_auto_, NULL, 30 }, - { OPT_LEVELS_3_PLUS, OPT__param_early_inlining_insns_, NULL, 14 }, - { OPT_LEVELS_3_PLUS, OPT__param_inline_heuristics_hint_percent_, NULL, 600 }, - { OPT_LEVELS_3_PLUS, OPT__param_inline_min_speedup_, NULL, 15 }, - { OPT_LEVELS_3_PLUS, OPT__param_max_inline_insns_single_, NULL, 200 }, - - /* -Ofast adds optimizations to -O3. */ - { OPT_LEVELS_FAST, OPT_ffast_math, NULL, 1 }, - { OPT_LEVELS_FAST, OPT_fallow_store_data_races, NULL, 1 }, - { OPT_LEVELS_FAST, OPT_fsemantic_interposition, NULL, 0 }, - - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -/* Default the options in OPTS and OPTS_SET based on the optimization - settings in DECODED_OPTIONS and DECODED_OPTIONS_COUNT. */ -void -default_options_optimization (struct gcc_options *opts, - struct gcc_options *opts_set, - struct cl_decoded_option *decoded_options, - unsigned int decoded_options_count, - location_t loc, - unsigned int lang_mask, - const struct cl_option_handlers *handlers, - diagnostic_context *dc) -{ - unsigned int i; - int opt2; - bool openacc_mode = false; - - /* Scan to see what optimization level has been specified. That will - determine the default value of many flags. */ - for (i = 1; i < decoded_options_count; i++) - { - struct cl_decoded_option *opt = &decoded_options[i]; - switch (opt->opt_index) - { - case OPT_O: - if (*opt->arg == '\0') - { - opts->x_optimize = 1; - opts->x_optimize_size = 0; - opts->x_optimize_fast = 0; - opts->x_optimize_debug = 0; - } - else - { - const int optimize_val = integral_argument (opt->arg); - if (optimize_val == -1) - error_at (loc, "argument to %<-O%> should be a non-negative " - "integer, %<g%>, %<s%>, %<z%> or %<fast%>"); - else - { - opts->x_optimize = optimize_val; - if ((unsigned int) opts->x_optimize > 255) - opts->x_optimize = 255; - opts->x_optimize_size = 0; - opts->x_optimize_fast = 0; - opts->x_optimize_debug = 0; - } - } - break; - - case OPT_Os: - opts->x_optimize_size = 1; - - /* Optimizing for size forces optimize to be 2. */ - opts->x_optimize = 2; - opts->x_optimize_fast = 0; - opts->x_optimize_debug = 0; - break; - - case OPT_Oz: - opts->x_optimize_size = 2; - - /* Optimizing for size forces optimize to be 2. */ - opts->x_optimize = 2; - opts->x_optimize_fast = 0; - opts->x_optimize_debug = 0; - break; - - case OPT_Ofast: - /* -Ofast only adds flags to -O3. */ - opts->x_optimize_size = 0; - opts->x_optimize = 3; - opts->x_optimize_fast = 1; - opts->x_optimize_debug = 0; - break; - - case OPT_Og: - /* -Og selects optimization level 1. */ - opts->x_optimize_size = 0; - opts->x_optimize = 1; - opts->x_optimize_fast = 0; - opts->x_optimize_debug = 1; - break; - - case OPT_fopenacc: - if (opt->value) - openacc_mode = true; - break; - - default: - /* Ignore other options in this prescan. */ - break; - } - } - - maybe_default_options (opts, opts_set, default_options_table, - opts->x_optimize, opts->x_optimize_size, - opts->x_optimize_fast, opts->x_optimize_debug, - lang_mask, handlers, loc, dc); - - /* -O2 param settings. */ - opt2 = (opts->x_optimize >= 2); - - if (openacc_mode) - SET_OPTION_IF_UNSET (opts, opts_set, flag_ipa_pta, true); - - /* Track fields in field-sensitive alias analysis. */ - if (opt2) - SET_OPTION_IF_UNSET (opts, opts_set, param_max_fields_for_field_sensitive, - 100); - - if (opts->x_optimize_size) - /* We want to crossjump as much as possible. */ - SET_OPTION_IF_UNSET (opts, opts_set, param_min_crossjump_insns, 1); - - /* Restrict the amount of work combine does at -Og while retaining - most of its useful transforms. */ - if (opts->x_optimize_debug) - SET_OPTION_IF_UNSET (opts, opts_set, param_max_combine_insns, 2); - - /* Allow default optimizations to be specified on a per-machine basis. */ - maybe_default_options (opts, opts_set, - targetm_common.option_optimization_table, - opts->x_optimize, opts->x_optimize_size, - opts->x_optimize_fast, opts->x_optimize_debug, - lang_mask, handlers, loc, dc); -} - -/* Control IPA optimizations based on different live patching LEVEL. */ -static void -control_options_for_live_patching (struct gcc_options *opts, - struct gcc_options *opts_set, - enum live_patching_level level, - location_t loc) -{ - gcc_assert (level > LIVE_PATCHING_NONE); - - switch (level) - { - case LIVE_PATCHING_INLINE_ONLY_STATIC: -#define LIVE_PATCHING_OPTION "-flive-patching=inline-only-static" - if (opts_set->x_flag_ipa_cp_clone && opts->x_flag_ipa_cp_clone) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-cp-clone", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_cp_clone = 0; - - if (opts_set->x_flag_ipa_sra && opts->x_flag_ipa_sra) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-sra", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_sra = 0; - - if (opts_set->x_flag_partial_inlining && opts->x_flag_partial_inlining) - error_at (loc, "%qs is incompatible with %qs", - "-fpartial-inlining", LIVE_PATCHING_OPTION); - else - opts->x_flag_partial_inlining = 0; - - if (opts_set->x_flag_ipa_cp && opts->x_flag_ipa_cp) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-cp", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_cp = 0; - - /* FALLTHROUGH. */ - case LIVE_PATCHING_INLINE_CLONE: -#undef LIVE_PATCHING_OPTION -#define LIVE_PATCHING_OPTION "-flive-patching=inline-only-static|inline-clone" - /* live patching should disable whole-program optimization. */ - if (opts_set->x_flag_whole_program && opts->x_flag_whole_program) - error_at (loc, "%qs is incompatible with %qs", - "-fwhole-program", LIVE_PATCHING_OPTION); - else - opts->x_flag_whole_program = 0; - - /* visibility change should be excluded by !flag_whole_program - && !in_lto_p && !flag_ipa_cp_clone && !flag_ipa_sra - && !flag_partial_inlining. */ - - if (opts_set->x_flag_ipa_pta && opts->x_flag_ipa_pta) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-pta", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_pta = 0; - - if (opts_set->x_flag_ipa_reference && opts->x_flag_ipa_reference) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-reference", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_reference = 0; - - if (opts_set->x_flag_ipa_ra && opts->x_flag_ipa_ra) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-ra", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_ra = 0; - - if (opts_set->x_flag_ipa_icf && opts->x_flag_ipa_icf) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-icf", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_icf = 0; - - if (opts_set->x_flag_ipa_icf_functions && opts->x_flag_ipa_icf_functions) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-icf-functions", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_icf_functions = 0; - - if (opts_set->x_flag_ipa_icf_variables && opts->x_flag_ipa_icf_variables) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-icf-variables", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_icf_variables = 0; - - if (opts_set->x_flag_ipa_bit_cp && opts->x_flag_ipa_bit_cp) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-bit-cp", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_bit_cp = 0; - - if (opts_set->x_flag_ipa_vrp && opts->x_flag_ipa_vrp) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-vrp", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_vrp = 0; - - if (opts_set->x_flag_ipa_pure_const && opts->x_flag_ipa_pure_const) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-pure-const", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_pure_const = 0; - - if (opts_set->x_flag_ipa_modref && opts->x_flag_ipa_modref) - error_at (loc, - "%<-fipa-modref%> is incompatible with %qs", - LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_modref = 0; - - /* FIXME: disable unreachable code removal. */ - - /* discovery of functions/variables with no address taken. */ - if (opts_set->x_flag_ipa_reference_addressable - && opts->x_flag_ipa_reference_addressable) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-reference-addressable", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_reference_addressable = 0; - - /* ipa stack alignment propagation. */ - if (opts_set->x_flag_ipa_stack_alignment - && opts->x_flag_ipa_stack_alignment) - error_at (loc, "%qs is incompatible with %qs", - "-fipa-stack-alignment", LIVE_PATCHING_OPTION); - else - opts->x_flag_ipa_stack_alignment = 0; - break; - default: - gcc_unreachable (); - } - -#undef LIVE_PATCHING_OPTION -} - -/* --help option argument if set. */ -vec<const char *> help_option_arguments; - -/* Return the string name describing a sanitizer argument which has been - provided on the command line and has set this particular flag. */ -const char * -find_sanitizer_argument (struct gcc_options *opts, unsigned int flags) -{ - for (int i = 0; sanitizer_opts[i].name != NULL; ++i) - { - /* Need to find the sanitizer_opts element which: - a) Could have set the flags requested. - b) Has been set on the command line. - - Can have (a) without (b) if the flag requested is e.g. - SANITIZE_ADDRESS, since both -fsanitize=address and - -fsanitize=kernel-address set this flag. - - Can have (b) without (a) by requesting more than one sanitizer on the - command line. */ - if ((sanitizer_opts[i].flag & opts->x_flag_sanitize) - != sanitizer_opts[i].flag) - continue; - if ((sanitizer_opts[i].flag & flags) != flags) - continue; - return sanitizer_opts[i].name; - } - return NULL; -} - - -/* Report an error to the user about sanitizer options they have requested - which have set conflicting flags. - - LEFT and RIGHT indicate sanitizer flags which conflict with each other, this - function reports an error if both have been set in OPTS->x_flag_sanitize and - ensures the error identifies the requested command line options that have - set these flags. */ -static void -report_conflicting_sanitizer_options (struct gcc_options *opts, location_t loc, - unsigned int left, unsigned int right) -{ - unsigned int left_seen = (opts->x_flag_sanitize & left); - unsigned int right_seen = (opts->x_flag_sanitize & right); - if (left_seen && right_seen) - { - const char* left_arg = find_sanitizer_argument (opts, left_seen); - const char* right_arg = find_sanitizer_argument (opts, right_seen); - gcc_assert (left_arg && right_arg); - error_at (loc, - "%<-fsanitize=%s%> is incompatible with %<-fsanitize=%s%>", - left_arg, right_arg); - } -} - -/* After all options at LOC have been read into OPTS and OPTS_SET, - finalize settings of those options and diagnose incompatible - combinations. */ -void -finish_options (struct gcc_options *opts, struct gcc_options *opts_set, - location_t loc) -{ - if (opts->x_dump_base_name - && ! opts->x_dump_base_name_prefixed) - { - const char *sep = opts->x_dump_base_name; - - for (; *sep; sep++) - if (IS_DIR_SEPARATOR (*sep)) - break; - - if (*sep) - /* If dump_base_path contains subdirectories, don't prepend - anything. */; - else if (opts->x_dump_dir_name) - /* We have a DUMP_DIR_NAME, prepend that. */ - opts->x_dump_base_name = opts_concat (opts->x_dump_dir_name, - opts->x_dump_base_name, NULL); - - /* It is definitely prefixed now. */ - opts->x_dump_base_name_prefixed = true; - } - - /* Handle related options for unit-at-a-time, toplevel-reorder, and - section-anchors. */ - if (!opts->x_flag_unit_at_a_time) - { - if (opts->x_flag_section_anchors && opts_set->x_flag_section_anchors) - error_at (loc, "section anchors must be disabled when unit-at-a-time " - "is disabled"); - opts->x_flag_section_anchors = 0; - if (opts->x_flag_toplevel_reorder == 1) - error_at (loc, "toplevel reorder must be disabled when unit-at-a-time " - "is disabled"); - opts->x_flag_toplevel_reorder = 0; - } - - /* -fself-test depends on the state of the compiler prior to - compiling anything. Ideally it should be run on an empty source - file. However, in case we get run with actual source, assume - -fsyntax-only which will inhibit any compiler initialization - which may confuse the self tests. */ - if (opts->x_flag_self_test) - opts->x_flag_syntax_only = 1; - - if (opts->x_flag_tm && opts->x_flag_non_call_exceptions) - sorry ("transactional memory is not supported with non-call exceptions"); - - /* Unless the user has asked for section anchors, we disable toplevel - reordering at -O0 to disable transformations that might be surprising - to end users and to get -fno-toplevel-reorder tested. */ - if (!opts->x_optimize - && opts->x_flag_toplevel_reorder == 2 - && !(opts->x_flag_section_anchors && opts_set->x_flag_section_anchors)) - { - opts->x_flag_toplevel_reorder = 0; - opts->x_flag_section_anchors = 0; - } - if (!opts->x_flag_toplevel_reorder) - { - if (opts->x_flag_section_anchors && opts_set->x_flag_section_anchors) - error_at (loc, "section anchors must be disabled when toplevel reorder" - " is disabled"); - opts->x_flag_section_anchors = 0; - } - - if (!opts->x_flag_opts_finished) - { - /* We initialize opts->x_flag_pie to -1 so that targets can set a - default value. */ - if (opts->x_flag_pie == -1) - { - /* We initialize opts->x_flag_pic to -1 so that we can tell if - -fpic, -fPIC, -fno-pic or -fno-PIC is used. */ - if (opts->x_flag_pic == -1) - opts->x_flag_pie = DEFAULT_FLAG_PIE; - else - opts->x_flag_pie = 0; - } - /* If -fPIE or -fpie is used, turn on PIC. */ - if (opts->x_flag_pie) - opts->x_flag_pic = opts->x_flag_pie; - else if (opts->x_flag_pic == -1) - opts->x_flag_pic = 0; - if (opts->x_flag_pic && !opts->x_flag_pie) - opts->x_flag_shlib = 1; - opts->x_flag_opts_finished = true; - } - - /* We initialize opts->x_flag_stack_protect to -1 so that targets - can set a default value. */ - if (opts->x_flag_stack_protect == -1) - opts->x_flag_stack_protect = DEFAULT_FLAG_SSP; - - if (opts->x_optimize == 0) - { - /* Inlining does not work if not optimizing, - so force it not to be done. */ - opts->x_warn_inline = 0; - opts->x_flag_no_inline = 1; - } - - /* Pipelining of outer loops is only possible when general pipelining - capabilities are requested. */ - if (!opts->x_flag_sel_sched_pipelining) - opts->x_flag_sel_sched_pipelining_outer_loops = 0; - - if (opts->x_flag_conserve_stack) - { - SET_OPTION_IF_UNSET (opts, opts_set, param_large_stack_frame, 100); - SET_OPTION_IF_UNSET (opts, opts_set, param_stack_frame_growth, 40); - } - - if (opts->x_flag_lto) - { -#ifdef ENABLE_LTO - opts->x_flag_generate_lto = 1; - - /* When generating IL, do not operate in whole-program mode. - Otherwise, symbols will be privatized too early, causing link - errors later. */ - opts->x_flag_whole_program = 0; -#else - error_at (loc, "LTO support has not been enabled in this configuration"); -#endif - if (!opts->x_flag_fat_lto_objects - && (!HAVE_LTO_PLUGIN - || (opts_set->x_flag_use_linker_plugin - && !opts->x_flag_use_linker_plugin))) - { - if (opts_set->x_flag_fat_lto_objects) - error_at (loc, "%<-fno-fat-lto-objects%> are supported only with " - "linker plugin"); - opts->x_flag_fat_lto_objects = 1; - } - - /* -gsplit-dwarf isn't compatible with LTO, see PR88389. */ - if (opts->x_dwarf_split_debug_info) - { - inform (loc, "%<-gsplit-dwarf%> is not supported with LTO," - " disabling"); - opts->x_dwarf_split_debug_info = 0; - } - } - - /* We initialize opts->x_flag_split_stack to -1 so that targets can set a - default value if they choose based on other options. */ - if (opts->x_flag_split_stack == -1) - opts->x_flag_split_stack = 0; - else if (opts->x_flag_split_stack) - { - if (!targetm_common.supports_split_stack (true, opts)) - { - error_at (loc, "%<-fsplit-stack%> is not supported by " - "this compiler configuration"); - opts->x_flag_split_stack = 0; - } - } - - /* If stack splitting is turned on, and the user did not explicitly - request function partitioning, turn off partitioning, as it - confuses the linker when trying to handle partitioned split-stack - code that calls a non-split-stack functions. But if partitioning - was turned on explicitly just hope for the best. */ - if (opts->x_flag_split_stack - && opts->x_flag_reorder_blocks_and_partition) - SET_OPTION_IF_UNSET (opts, opts_set, flag_reorder_blocks_and_partition, 0); - - if (opts->x_flag_reorder_blocks_and_partition) - SET_OPTION_IF_UNSET (opts, opts_set, flag_reorder_functions, 1); - - /* The -gsplit-dwarf option requires -ggnu-pubnames. */ - if (opts->x_dwarf_split_debug_info) - opts->x_debug_generate_pub_sections = 2; - - if ((opts->x_flag_sanitize - & (SANITIZE_USER_ADDRESS | SANITIZE_KERNEL_ADDRESS)) == 0) - { - if (opts->x_flag_sanitize & SANITIZE_POINTER_COMPARE) - error_at (loc, - "%<-fsanitize=pointer-compare%> must be combined with " - "%<-fsanitize=address%> or %<-fsanitize=kernel-address%>"); - if (opts->x_flag_sanitize & SANITIZE_POINTER_SUBTRACT) - error_at (loc, - "%<-fsanitize=pointer-subtract%> must be combined with " - "%<-fsanitize=address%> or %<-fsanitize=kernel-address%>"); - } - - /* Address sanitizers conflict with the thread sanitizer. */ - report_conflicting_sanitizer_options (opts, loc, SANITIZE_THREAD, - SANITIZE_ADDRESS | SANITIZE_HWADDRESS); - /* The leak sanitizer conflicts with the thread sanitizer. */ - report_conflicting_sanitizer_options (opts, loc, SANITIZE_LEAK, - SANITIZE_THREAD); - - /* No combination of HWASAN and ASAN work together. */ - report_conflicting_sanitizer_options (opts, loc, - SANITIZE_HWADDRESS, SANITIZE_ADDRESS); - - /* The userspace and kernel address sanitizers conflict with each other. */ - report_conflicting_sanitizer_options (opts, loc, SANITIZE_USER_HWADDRESS, - SANITIZE_KERNEL_HWADDRESS); - report_conflicting_sanitizer_options (opts, loc, SANITIZE_USER_ADDRESS, - SANITIZE_KERNEL_ADDRESS); - - /* Check error recovery for -fsanitize-recover option. */ - for (int i = 0; sanitizer_opts[i].name != NULL; ++i) - if ((opts->x_flag_sanitize_recover & sanitizer_opts[i].flag) - && !sanitizer_opts[i].can_recover) - error_at (loc, "%<-fsanitize-recover=%s%> is not supported", - sanitizer_opts[i].name); - - /* When instrumenting the pointers, we don't want to remove - the null pointer checks. */ - if (opts->x_flag_sanitize & (SANITIZE_NULL | SANITIZE_NONNULL_ATTRIBUTE - | SANITIZE_RETURNS_NONNULL_ATTRIBUTE)) - opts->x_flag_delete_null_pointer_checks = 0; - - /* Aggressive compiler optimizations may cause false negatives. */ - if (opts->x_flag_sanitize & ~(SANITIZE_LEAK | SANITIZE_UNREACHABLE)) - opts->x_flag_aggressive_loop_optimizations = 0; - - /* Enable -fsanitize-address-use-after-scope if either address sanitizer is - enabled. */ - if (opts->x_flag_sanitize - & (SANITIZE_USER_ADDRESS | SANITIZE_USER_HWADDRESS)) - SET_OPTION_IF_UNSET (opts, opts_set, flag_sanitize_address_use_after_scope, - true); - - /* Force -fstack-reuse=none in case -fsanitize-address-use-after-scope - is enabled. */ - if (opts->x_flag_sanitize_address_use_after_scope) - { - if (opts->x_flag_stack_reuse != SR_NONE - && opts_set->x_flag_stack_reuse != SR_NONE) - error_at (loc, - "%<-fsanitize-address-use-after-scope%> requires " - "%<-fstack-reuse=none%> option"); - - opts->x_flag_stack_reuse = SR_NONE; - } - - if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS) && opts->x_flag_tm) - sorry ("transactional memory is not supported with %<-fsanitize=address%>"); - - if ((opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS) && opts->x_flag_tm) - sorry ("transactional memory is not supported with " - "%<-fsanitize=kernel-address%>"); - - /* Currently live patching is not support for LTO. */ - if (opts->x_flag_live_patching && opts->x_flag_lto) - sorry ("live patching is not supported with LTO"); - - /* Currently vtable verification is not supported for LTO */ - if (opts->x_flag_vtable_verify && opts->x_flag_lto) - sorry ("vtable verification is not supported with LTO"); - - /* Control IPA optimizations based on different -flive-patching level. */ - if (opts->x_flag_live_patching) - control_options_for_live_patching (opts, opts_set, - opts->x_flag_live_patching, - loc); - - /* Allow cunroll to grow size accordingly. */ - if (!opts_set->x_flag_cunroll_grow_size) - opts->x_flag_cunroll_grow_size - = (opts->x_flag_unroll_loops - || opts->x_flag_peel_loops - || opts->x_optimize >= 3); - - /* With -fcx-limited-range, we do cheap and quick complex arithmetic. */ - if (opts->x_flag_cx_limited_range) - opts->x_flag_complex_method = 0; - else if (opts_set->x_flag_cx_limited_range) - opts->x_flag_complex_method = opts->x_flag_default_complex_method; - - /* With -fcx-fortran-rules, we do something in-between cheap and C99. */ - if (opts->x_flag_cx_fortran_rules) - opts->x_flag_complex_method = 1; - else if (opts_set->x_flag_cx_fortran_rules) - opts->x_flag_complex_method = opts->x_flag_default_complex_method; - - /* Use -fvect-cost-model=cheap instead of -fvect-cost-mode=very-cheap - by default with explicit -ftree-{loop,slp}-vectorize. */ - if (opts->x_optimize == 2 - && (opts_set->x_flag_tree_loop_vectorize - || opts_set->x_flag_tree_vectorize)) - SET_OPTION_IF_UNSET (opts, opts_set, flag_vect_cost_model, - VECT_COST_MODEL_CHEAP); - - /* One could use EnabledBy, but it would lead to a circular dependency. */ - if (!OPTION_SET_P (flag_var_tracking_uninit)) - flag_var_tracking_uninit = flag_var_tracking; - - if (!OPTION_SET_P (flag_var_tracking_assignments)) - flag_var_tracking_assignments - = (flag_var_tracking - && !(flag_selective_scheduling || flag_selective_scheduling2)); - - if (flag_var_tracking_assignments_toggle) - flag_var_tracking_assignments = !flag_var_tracking_assignments; - - if (flag_var_tracking_assignments && !flag_var_tracking) - flag_var_tracking = flag_var_tracking_assignments = -1; - - if (flag_var_tracking_assignments - && (flag_selective_scheduling || flag_selective_scheduling2)) - warning_at (loc, 0, - "var-tracking-assignments changes selective scheduling"); - - if (flag_syntax_only) - { - write_symbols = NO_DEBUG; - profile_flag = 0; - } - - if (flag_gtoggle) - { - /* Make sure to process -gtoggle only once. */ - flag_gtoggle = false; - if (debug_info_level == DINFO_LEVEL_NONE) - { - debug_info_level = DINFO_LEVEL_NORMAL; - - if (write_symbols == NO_DEBUG) - write_symbols = PREFERRED_DEBUGGING_TYPE; - } - else - debug_info_level = DINFO_LEVEL_NONE; - } - - if (!OPTION_SET_P (debug_nonbind_markers_p)) - debug_nonbind_markers_p - = (optimize - && debug_info_level >= DINFO_LEVEL_NORMAL - && dwarf_debuginfo_p () - && !(flag_selective_scheduling || flag_selective_scheduling2)); - - diagnose_options (opts, opts_set, loc); -} - -/* The function diagnoses incompatible combinations for provided options - (OPTS and OPTS_SET) at a given LOCation. The function is called both - when command line is parsed (after the target optimization hook) and - when an optimize/target attribute (or pragma) is used. */ - -void diagnose_options (gcc_options *opts, gcc_options *opts_set, - location_t loc) -{ - /* The optimization to partition hot and cold basic blocks into separate - sections of the .o and executable files does not work (currently) - with exception handling. This is because there is no support for - generating unwind info. If opts->x_flag_exceptions is turned on - we need to turn off the partitioning optimization. */ - - enum unwind_info_type ui_except - = targetm_common.except_unwind_info (opts); - - if (opts->x_flag_exceptions - && opts->x_flag_reorder_blocks_and_partition - && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)) - { - if (opts_set->x_flag_reorder_blocks_and_partition) - inform (loc, - "%<-freorder-blocks-and-partition%> does not work " - "with exceptions on this architecture"); - opts->x_flag_reorder_blocks_and_partition = 0; - opts->x_flag_reorder_blocks = 1; - } - - /* If user requested unwind info, then turn off the partitioning - optimization. */ - - if (opts->x_flag_unwind_tables - && !targetm_common.unwind_tables_default - && opts->x_flag_reorder_blocks_and_partition - && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)) - { - if (opts_set->x_flag_reorder_blocks_and_partition) - inform (loc, - "%<-freorder-blocks-and-partition%> does not support " - "unwind info on this architecture"); - opts->x_flag_reorder_blocks_and_partition = 0; - opts->x_flag_reorder_blocks = 1; - } - - /* If the target requested unwind info, then turn off the partitioning - optimization with a different message. Likewise, if the target does not - support named sections. */ - - if (opts->x_flag_reorder_blocks_and_partition - && (!targetm_common.have_named_sections - || (opts->x_flag_unwind_tables - && targetm_common.unwind_tables_default - && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) - { - if (opts_set->x_flag_reorder_blocks_and_partition) - inform (loc, - "%<-freorder-blocks-and-partition%> does not work " - "on this architecture"); - opts->x_flag_reorder_blocks_and_partition = 0; - opts->x_flag_reorder_blocks = 1; - } - - -} - -#define LEFT_COLUMN 27 - -/* Output ITEM, of length ITEM_WIDTH, in the left column, - followed by word-wrapped HELP in a second column. */ -static void -wrap_help (const char *help, - const char *item, - unsigned int item_width, - unsigned int columns) -{ - unsigned int col_width = LEFT_COLUMN; - unsigned int remaining, room, len; - - remaining = strlen (help); - - do - { - room = columns - 3 - MAX (col_width, item_width); - if (room > columns) - room = 0; - len = remaining; - - if (room < len) - { - unsigned int i; - - for (i = 0; help[i]; i++) - { - if (i >= room && len != remaining) - break; - if (help[i] == ' ') - len = i; - else if ((help[i] == '-' || help[i] == '/') - && help[i + 1] != ' ' - && i > 0 && ISALPHA (help[i - 1])) - len = i + 1; - } - } - - printf (" %-*.*s %.*s\n", col_width, item_width, item, len, help); - item_width = 0; - while (help[len] == ' ') - len++; - help += len; - remaining -= len; - } - while (remaining); -} - -/* Data structure used to print list of valid option values. */ - -class option_help_tuple -{ -public: - option_help_tuple (int code, vec<const char *> values): - m_code (code), m_values (values) - {} - - /* Code of an option. */ - int m_code; - - /* List of possible values. */ - vec<const char *> m_values; -}; - -/* Print help for a specific front-end, etc. */ -static void -print_filtered_help (unsigned int include_flags, - unsigned int exclude_flags, - unsigned int any_flags, - unsigned int columns, - struct gcc_options *opts, - unsigned int lang_mask) -{ - unsigned int i; - const char *help; - bool found = false; - bool displayed = false; - char new_help[256]; - - if (!opts->x_help_printed) - opts->x_help_printed = XCNEWVAR (char, cl_options_count); - - if (!opts->x_help_enum_printed) - opts->x_help_enum_printed = XCNEWVAR (char, cl_enums_count); - - auto_vec<option_help_tuple> help_tuples; - - for (i = 0; i < cl_options_count; i++) - { - const struct cl_option *option = cl_options + i; - unsigned int len; - const char *opt; - const char *tab; - - if (include_flags == 0 - || ((option->flags & include_flags) != include_flags)) - { - if ((option->flags & any_flags) == 0) - continue; - } - - /* Skip unwanted switches. */ - if ((option->flags & exclude_flags) != 0) - continue; - - /* The driver currently prints its own help text. */ - if ((option->flags & CL_DRIVER) != 0 - && (option->flags & (((1U << cl_lang_count) - 1) - | CL_COMMON | CL_TARGET)) == 0) - continue; - - /* If an option contains a language specification, - exclude it from common unless all languages are present. */ - if ((include_flags & CL_COMMON) - && !(option->flags & CL_DRIVER) - && (option->flags & CL_LANG_ALL) - && (option->flags & CL_LANG_ALL) != CL_LANG_ALL) - continue; - - found = true; - /* Skip switches that have already been printed. */ - if (opts->x_help_printed[i]) - continue; - - opts->x_help_printed[i] = true; - - help = option->help; - if (help == NULL) - { - if (exclude_flags & CL_UNDOCUMENTED) - continue; - - help = undocumented_msg; - } - - /* Get the translation. */ - help = _(help); - - if (option->alias_target < N_OPTS - && cl_options [option->alias_target].help) - { - const struct cl_option *target = cl_options + option->alias_target; - if (option->help == NULL) - { - /* The option is undocumented but is an alias for an option that - is documented. If the option has alias arguments, then its - purpose is to provide certain arguments to the other option, so - inform the reader of this. Otherwise, point the reader to the - other option in preference to the former. */ - - if (option->alias_arg) - { - if (option->neg_alias_arg) - snprintf (new_help, sizeof new_help, - _("Same as %s%s (or, in negated form, %s%s)."), - target->opt_text, option->alias_arg, - target->opt_text, option->neg_alias_arg); - else - snprintf (new_help, sizeof new_help, - _("Same as %s%s."), - target->opt_text, option->alias_arg); - } - else - snprintf (new_help, sizeof new_help, - _("Same as %s."), - target->opt_text); - } - else - { - /* For documented options with aliases, mention the aliased - option's name for reference. */ - snprintf (new_help, sizeof new_help, - _("%s Same as %s."), - help, cl_options [option->alias_target].opt_text); - } - - help = new_help; - } - - if (option->warn_message) - { - /* Mention that the use of the option will trigger a warning. */ - if (help == new_help) - snprintf (new_help + strlen (new_help), - sizeof new_help - strlen (new_help), - " %s", _(use_diagnosed_msg)); - else - snprintf (new_help, sizeof new_help, - "%s %s", help, _(use_diagnosed_msg)); - - help = new_help; - } - - /* Find the gap between the name of the - option and its descriptive text. */ - tab = strchr (help, '\t'); - if (tab) - { - len = tab - help; - opt = help; - help = tab + 1; - } - else - { - opt = option->opt_text; - len = strlen (opt); - } - - /* With the -Q option enabled we change the descriptive text associated - with an option to be an indication of its current setting. */ - if (!opts->x_quiet_flag) - { - void *flag_var = option_flag_var (i, opts); - - if (len < (LEFT_COLUMN + 2)) - strcpy (new_help, "\t\t"); - else - strcpy (new_help, "\t"); - - /* Set to print whether the option is enabled or disabled, - or, if it's an alias for another option, the name of - the aliased option. */ - bool print_state = false; - - if (flag_var != NULL - && option->var_type != CLVC_DEFER) - { - /* If OPTION is only available for a specific subset - of languages other than this one, mention them. */ - bool avail_for_lang = true; - if (unsigned langset = option->flags & CL_LANG_ALL) - { - if (!(langset & lang_mask)) - { - avail_for_lang = false; - strcat (new_help, _("[available in ")); - for (unsigned i = 0, n = 0; (1U << i) < CL_LANG_ALL; ++i) - if (langset & (1U << i)) - { - if (n++) - strcat (new_help, ", "); - strcat (new_help, lang_names[i]); - } - strcat (new_help, "]"); - } - } - if (!avail_for_lang) - ; /* Print nothing else if the option is not available - in the current language. */ - else if (option->flags & CL_JOINED) - { - if (option->var_type == CLVC_STRING) - { - if (* (const char **) flag_var != NULL) - snprintf (new_help + strlen (new_help), - sizeof (new_help) - strlen (new_help), - "%s", * (const char **) flag_var); - } - else if (option->var_type == CLVC_ENUM) - { - const struct cl_enum *e = &cl_enums[option->var_enum]; - int value; - const char *arg = NULL; - - value = e->get (flag_var); - enum_value_to_arg (e->values, &arg, value, lang_mask); - if (arg == NULL) - arg = _("[default]"); - snprintf (new_help + strlen (new_help), - sizeof (new_help) - strlen (new_help), - "%s", arg); - } - else - { - if (option->cl_host_wide_int) - sprintf (new_help + strlen (new_help), - _("%llu bytes"), (unsigned long long) - *(unsigned HOST_WIDE_INT *) flag_var); - else - sprintf (new_help + strlen (new_help), - "%i", * (int *) flag_var); - } - } - else - print_state = true; - } - else - /* When there is no argument, print the option state only - if the option takes no argument. */ - print_state = !(option->flags & CL_JOINED); - - if (print_state) - { - if (option->alias_target < N_OPTS - && option->alias_target != OPT_SPECIAL_warn_removed - && option->alias_target != OPT_SPECIAL_ignore - && option->alias_target != OPT_SPECIAL_input_file - && option->alias_target != OPT_SPECIAL_program_name - && option->alias_target != OPT_SPECIAL_unknown) - { - const struct cl_option *target - = &cl_options[option->alias_target]; - sprintf (new_help + strlen (new_help), "%s%s", - target->opt_text, - option->alias_arg ? option->alias_arg : ""); - } - else if (option->alias_target == OPT_SPECIAL_ignore) - strcat (new_help, ("[ignored]")); - else - { - /* Print the state for an on/off option. */ - int ena = option_enabled (i, lang_mask, opts); - if (ena > 0) - strcat (new_help, _("[enabled]")); - else if (ena == 0) - strcat (new_help, _("[disabled]")); - } - } - - help = new_help; - } - - if (option->range_max != -1) - { - char b[128]; - snprintf (b, sizeof (b), "<%d,%d>", option->range_min, - option->range_max); - opt = concat (opt, b, NULL); - len += strlen (b); - } - - wrap_help (help, opt, len, columns); - displayed = true; - - if (option->var_type == CLVC_ENUM - && opts->x_help_enum_printed[option->var_enum] != 2) - opts->x_help_enum_printed[option->var_enum] = 1; - else - { - vec<const char *> option_values - = targetm_common.get_valid_option_values (i, NULL); - if (!option_values.is_empty ()) - help_tuples.safe_push (option_help_tuple (i, option_values)); - } - } - - if (! found) - { - unsigned int langs = include_flags & CL_LANG_ALL; - - if (langs == 0) - printf (_(" No options with the desired characteristics were found\n")); - else - { - unsigned int i; - - /* PR 31349: Tell the user how to see all of the - options supported by a specific front end. */ - for (i = 0; (1U << i) < CL_LANG_ALL; i ++) - if ((1U << i) & langs) - printf (_(" None found. Use --help=%s to show *all* the options supported by the %s front-end.\n"), - lang_names[i], lang_names[i]); - } - - } - else if (! displayed) - printf (_(" All options with the desired characteristics have already been displayed\n")); - - putchar ('\n'); - - /* Print details of enumerated option arguments, if those - enumerations have help text headings provided. If no help text - is provided, presume that the possible values are listed in the - help text for the relevant options. */ - for (i = 0; i < cl_enums_count; i++) - { - unsigned int j, pos; - - if (opts->x_help_enum_printed[i] != 1) - continue; - if (cl_enums[i].help == NULL) - continue; - printf (" %s\n ", _(cl_enums[i].help)); - pos = 4; - for (j = 0; cl_enums[i].values[j].arg != NULL; j++) - { - unsigned int len = strlen (cl_enums[i].values[j].arg); - - if (pos > 4 && pos + 1 + len <= columns) - { - printf (" %s", cl_enums[i].values[j].arg); - pos += 1 + len; - } - else - { - if (pos > 4) - { - printf ("\n "); - pos = 4; - } - printf ("%s", cl_enums[i].values[j].arg); - pos += len; - } - } - printf ("\n\n"); - opts->x_help_enum_printed[i] = 2; - } - - for (unsigned i = 0; i < help_tuples.length (); i++) - { - const struct cl_option *option = cl_options + help_tuples[i].m_code; - printf (_(" Known valid arguments for %s option:\n "), - option->opt_text); - for (unsigned j = 0; j < help_tuples[i].m_values.length (); j++) - printf (" %s", help_tuples[i].m_values[j]); - printf ("\n\n"); - } -} - -/* Display help for a specified type of option. - The options must have ALL of the INCLUDE_FLAGS set - ANY of the flags in the ANY_FLAGS set - and NONE of the EXCLUDE_FLAGS set. The current option state is in - OPTS; LANG_MASK is used for interpreting enumerated option state. */ -static void -print_specific_help (unsigned int include_flags, - unsigned int exclude_flags, - unsigned int any_flags, - struct gcc_options *opts, - unsigned int lang_mask) -{ - unsigned int all_langs_mask = (1U << cl_lang_count) - 1; - const char * description = NULL; - const char * descrip_extra = ""; - size_t i; - unsigned int flag; - - /* Sanity check: Make sure that we do not have more - languages than we have bits available to enumerate them. */ - gcc_assert ((1U << cl_lang_count) <= CL_MIN_OPTION_CLASS); - - /* If we have not done so already, obtain - the desired maximum width of the output. */ - if (opts->x_help_columns == 0) - { - opts->x_help_columns = get_terminal_width (); - if (opts->x_help_columns == INT_MAX) - /* Use a reasonable default. */ - opts->x_help_columns = 80; - } - - /* Decide upon the title for the options that we are going to display. */ - for (i = 0, flag = 1; flag <= CL_MAX_OPTION_CLASS; flag <<= 1, i ++) - { - switch (flag & include_flags) - { - case 0: - case CL_DRIVER: - break; - - case CL_TARGET: - description = _("The following options are target specific"); - break; - case CL_WARNING: - description = _("The following options control compiler warning messages"); - break; - case CL_OPTIMIZATION: - description = _("The following options control optimizations"); - break; - case CL_COMMON: - description = _("The following options are language-independent"); - break; - case CL_PARAMS: - description = _("The following options control parameters"); - break; - default: - if (i >= cl_lang_count) - break; - if (exclude_flags & all_langs_mask) - description = _("The following options are specific to just the language "); - else - description = _("The following options are supported by the language "); - descrip_extra = lang_names [i]; - break; - } - } - - if (description == NULL) - { - if (any_flags == 0) - { - if (include_flags & CL_UNDOCUMENTED) - description = _("The following options are not documented"); - else if (include_flags & CL_SEPARATE) - description = _("The following options take separate arguments"); - else if (include_flags & CL_JOINED) - description = _("The following options take joined arguments"); - else - { - internal_error ("unrecognized %<include_flags 0x%x%> passed " - "to %<print_specific_help%>", - include_flags); - return; - } - } - else - { - if (any_flags & all_langs_mask) - description = _("The following options are language-related"); - else - description = _("The following options are language-independent"); - } - } - - printf ("%s%s:\n", description, descrip_extra); - print_filtered_help (include_flags, exclude_flags, any_flags, - opts->x_help_columns, opts, lang_mask); -} - -/* Enable FDO-related flags. */ - -static void -enable_fdo_optimizations (struct gcc_options *opts, - struct gcc_options *opts_set, - int value) -{ - SET_OPTION_IF_UNSET (opts, opts_set, flag_branch_probabilities, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_values, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_unroll_loops, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_peel_loops, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_tracer, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_value_profile_transformations, - value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_inline_functions, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_ipa_cp, value); - if (value) - { - SET_OPTION_IF_UNSET (opts, opts_set, flag_ipa_cp_clone, 1); - SET_OPTION_IF_UNSET (opts, opts_set, flag_ipa_bit_cp, 1); - } - SET_OPTION_IF_UNSET (opts, opts_set, flag_predictive_commoning, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_split_loops, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_unswitch_loops, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_gcse_after_reload, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_tree_loop_vectorize, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_tree_slp_vectorize, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_version_loops_for_strides, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_vect_cost_model, - VECT_COST_MODEL_DYNAMIC); - SET_OPTION_IF_UNSET (opts, opts_set, flag_tree_loop_distribute_patterns, - value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_loop_interchange, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_unroll_jam, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_tree_loop_distribution, value); -} - -/* -f{,no-}sanitize{,-recover}= suboptions. */ -const struct sanitizer_opts_s sanitizer_opts[] = -{ -#define SANITIZER_OPT(name, flags, recover) \ - { #name, flags, sizeof #name - 1, recover } - SANITIZER_OPT (address, (SANITIZE_ADDRESS | SANITIZE_USER_ADDRESS), true), - SANITIZER_OPT (hwaddress, (SANITIZE_HWADDRESS | SANITIZE_USER_HWADDRESS), - true), - SANITIZER_OPT (kernel-address, (SANITIZE_ADDRESS | SANITIZE_KERNEL_ADDRESS), - true), - SANITIZER_OPT (kernel-hwaddress, - (SANITIZE_HWADDRESS | SANITIZE_KERNEL_HWADDRESS), - true), - SANITIZER_OPT (pointer-compare, SANITIZE_POINTER_COMPARE, true), - SANITIZER_OPT (pointer-subtract, SANITIZE_POINTER_SUBTRACT, true), - SANITIZER_OPT (thread, SANITIZE_THREAD, false), - SANITIZER_OPT (leak, SANITIZE_LEAK, false), - SANITIZER_OPT (shift, SANITIZE_SHIFT, true), - SANITIZER_OPT (shift-base, SANITIZE_SHIFT_BASE, true), - SANITIZER_OPT (shift-exponent, SANITIZE_SHIFT_EXPONENT, true), - SANITIZER_OPT (integer-divide-by-zero, SANITIZE_DIVIDE, true), - SANITIZER_OPT (undefined, SANITIZE_UNDEFINED, true), - SANITIZER_OPT (unreachable, SANITIZE_UNREACHABLE, false), - SANITIZER_OPT (vla-bound, SANITIZE_VLA, true), - SANITIZER_OPT (return, SANITIZE_RETURN, false), - SANITIZER_OPT (null, SANITIZE_NULL, true), - SANITIZER_OPT (signed-integer-overflow, SANITIZE_SI_OVERFLOW, true), - SANITIZER_OPT (bool, SANITIZE_BOOL, true), - SANITIZER_OPT (enum, SANITIZE_ENUM, true), - SANITIZER_OPT (float-divide-by-zero, SANITIZE_FLOAT_DIVIDE, true), - SANITIZER_OPT (float-cast-overflow, SANITIZE_FLOAT_CAST, true), - SANITIZER_OPT (bounds, SANITIZE_BOUNDS, true), - SANITIZER_OPT (bounds-strict, SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT, true), - SANITIZER_OPT (alignment, SANITIZE_ALIGNMENT, true), - SANITIZER_OPT (nonnull-attribute, SANITIZE_NONNULL_ATTRIBUTE, true), - SANITIZER_OPT (returns-nonnull-attribute, SANITIZE_RETURNS_NONNULL_ATTRIBUTE, - true), - SANITIZER_OPT (object-size, SANITIZE_OBJECT_SIZE, true), - SANITIZER_OPT (vptr, SANITIZE_VPTR, true), - SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true), - SANITIZER_OPT (builtin, SANITIZE_BUILTIN, true), - SANITIZER_OPT (all, ~0U, true), -#undef SANITIZER_OPT - { NULL, 0U, 0UL, false } -}; - -/* -fzero-call-used-regs= suboptions. */ -const struct zero_call_used_regs_opts_s zero_call_used_regs_opts[] = -{ -#define ZERO_CALL_USED_REGS_OPT(name, flags) \ - { #name, flags } - ZERO_CALL_USED_REGS_OPT (skip, zero_regs_flags::SKIP), - ZERO_CALL_USED_REGS_OPT (used-gpr-arg, zero_regs_flags::USED_GPR_ARG), - ZERO_CALL_USED_REGS_OPT (used-gpr, zero_regs_flags::USED_GPR), - ZERO_CALL_USED_REGS_OPT (used-arg, zero_regs_flags::USED_ARG), - ZERO_CALL_USED_REGS_OPT (used, zero_regs_flags::USED), - ZERO_CALL_USED_REGS_OPT (all-gpr-arg, zero_regs_flags::ALL_GPR_ARG), - ZERO_CALL_USED_REGS_OPT (all-gpr, zero_regs_flags::ALL_GPR), - ZERO_CALL_USED_REGS_OPT (all-arg, zero_regs_flags::ALL_ARG), - ZERO_CALL_USED_REGS_OPT (all, zero_regs_flags::ALL), -#undef ZERO_CALL_USED_REGS_OPT - {NULL, 0U} -}; - -/* A struct for describing a run of chars within a string. */ - -class string_fragment -{ -public: - string_fragment (const char *start, size_t len) - : m_start (start), m_len (len) {} - - const char *m_start; - size_t m_len; -}; - -/* Specialization of edit_distance_traits for string_fragment, - for use by get_closest_sanitizer_option. */ - -template <> -struct edit_distance_traits<const string_fragment &> -{ - static size_t get_length (const string_fragment &fragment) - { - return fragment.m_len; - } - - static const char *get_string (const string_fragment &fragment) - { - return fragment.m_start; - } -}; - -/* Given ARG, an unrecognized sanitizer option, return the best - matching sanitizer option, or NULL if there isn't one. - OPTS is array of candidate sanitizer options. - CODE is OPT_fsanitize_ or OPT_fsanitize_recover_. - VALUE is non-zero for the regular form of the option, zero - for the "no-" form (e.g. "-fno-sanitize-recover="). */ - -static const char * -get_closest_sanitizer_option (const string_fragment &arg, - const struct sanitizer_opts_s *opts, - enum opt_code code, int value) -{ - best_match <const string_fragment &, const char*> bm (arg); - for (int i = 0; opts[i].name != NULL; ++i) - { - /* -fsanitize=all is not valid, so don't offer it. */ - if (code == OPT_fsanitize_ - && opts[i].flag == ~0U - && value) - continue; - - /* For -fsanitize-recover= (and not -fno-sanitize-recover=), - don't offer the non-recoverable options. */ - if (code == OPT_fsanitize_recover_ - && !opts[i].can_recover - && value) - continue; - - bm.consider (opts[i].name); - } - return bm.get_best_meaningful_candidate (); -} - -/* Parse comma separated sanitizer suboptions from P for option SCODE, - adjust previous FLAGS and return new ones. If COMPLAIN is false, - don't issue diagnostics. */ - -unsigned int -parse_sanitizer_options (const char *p, location_t loc, int scode, - unsigned int flags, int value, bool complain) -{ - enum opt_code code = (enum opt_code) scode; - - while (*p != 0) - { - size_t len, i; - bool found = false; - const char *comma = strchr (p, ','); - - if (comma == NULL) - len = strlen (p); - else - len = comma - p; - if (len == 0) - { - p = comma + 1; - continue; - } - - /* Check to see if the string matches an option class name. */ - for (i = 0; sanitizer_opts[i].name != NULL; ++i) - if (len == sanitizer_opts[i].len - && memcmp (p, sanitizer_opts[i].name, len) == 0) - { - /* Handle both -fsanitize and -fno-sanitize cases. */ - if (value && sanitizer_opts[i].flag == ~0U) - { - if (code == OPT_fsanitize_) - { - if (complain) - error_at (loc, "%<-fsanitize=all%> option is not valid"); - } - else - flags |= ~(SANITIZE_THREAD | SANITIZE_LEAK - | SANITIZE_UNREACHABLE | SANITIZE_RETURN); - } - else if (value) - { - /* Do not enable -fsanitize-recover=unreachable and - -fsanitize-recover=return if -fsanitize-recover=undefined - is selected. */ - if (code == OPT_fsanitize_recover_ - && sanitizer_opts[i].flag == SANITIZE_UNDEFINED) - flags |= (SANITIZE_UNDEFINED - & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN)); - else - flags |= sanitizer_opts[i].flag; - } - else - flags &= ~sanitizer_opts[i].flag; - found = true; - break; - } - - if (! found && complain) - { - const char *hint - = get_closest_sanitizer_option (string_fragment (p, len), - sanitizer_opts, code, value); - - const char *suffix; - if (code == OPT_fsanitize_recover_) - suffix = "-recover"; - else - suffix = ""; - - if (hint) - error_at (loc, - "unrecognized argument to %<-f%ssanitize%s=%> " - "option: %q.*s; did you mean %qs?", - value ? "" : "no-", - suffix, (int) len, p, hint); - else - error_at (loc, - "unrecognized argument to %<-f%ssanitize%s=%> option: " - "%q.*s", value ? "" : "no-", - suffix, (int) len, p); - } - - if (comma == NULL) - break; - p = comma + 1; - } - return flags; -} - -/* Parse string values of no_sanitize attribute passed in VALUE. - Values are separated with comma. */ - -unsigned int -parse_no_sanitize_attribute (char *value) -{ - unsigned int flags = 0; - unsigned int i; - char *q = strtok (value, ","); - - while (q != NULL) - { - for (i = 0; sanitizer_opts[i].name != NULL; ++i) - if (strcmp (sanitizer_opts[i].name, q) == 0) - { - flags |= sanitizer_opts[i].flag; - if (sanitizer_opts[i].flag == SANITIZE_UNDEFINED) - flags |= SANITIZE_UNDEFINED_NONDEFAULT; - break; - } - - if (sanitizer_opts[i].name == NULL) - warning (OPT_Wattributes, - "%qs attribute directive ignored", q); - - q = strtok (NULL, ","); - } - - return flags; -} - -/* Parse -fzero-call-used-regs suboptions from ARG, return the FLAGS. */ - -unsigned int -parse_zero_call_used_regs_options (const char *arg) -{ - unsigned int flags = 0; - - /* Check to see if the string matches a sub-option name. */ - for (unsigned int i = 0; zero_call_used_regs_opts[i].name != NULL; ++i) - if (strcmp (arg, zero_call_used_regs_opts[i].name) == 0) - { - flags = zero_call_used_regs_opts[i].flag; - break; - } - - if (!flags) - error ("unrecognized argument to %<-fzero-call-used-regs=%>: %qs", arg); - - return flags; -} - -/* Parse -falign-NAME format for a FLAG value. Return individual - parsed integer values into RESULT_VALUES array. If REPORT_ERROR is - set, print error message at LOC location. */ - -bool -parse_and_check_align_values (const char *flag, - const char *name, - auto_vec<unsigned> &result_values, - bool report_error, - location_t loc) -{ - char *str = xstrdup (flag); - for (char *p = strtok (str, ":"); p; p = strtok (NULL, ":")) - { - char *end; - int v = strtol (p, &end, 10); - if (*end != '\0' || v < 0) - { - if (report_error) - error_at (loc, "invalid arguments for %<-falign-%s%> option: %qs", - name, flag); - - return false; - } - - result_values.safe_push ((unsigned)v); - } - - free (str); - - /* Check that we have a correct number of values. */ - if (result_values.is_empty () || result_values.length () > 4) - { - if (report_error) - error_at (loc, "invalid number of arguments for %<-falign-%s%> " - "option: %qs", name, flag); - return false; - } - - for (unsigned i = 0; i < result_values.length (); i++) - if (result_values[i] > MAX_CODE_ALIGN_VALUE) - { - if (report_error) - error_at (loc, "%<-falign-%s%> is not between 0 and %d", - name, MAX_CODE_ALIGN_VALUE); - return false; - } - - return true; -} - -/* Check that alignment value FLAG for -falign-NAME is valid at a given - location LOC. OPT_STR points to the stored -falign-NAME=argument and - OPT_FLAG points to the associated -falign-NAME on/off flag. */ - -static void -check_alignment_argument (location_t loc, const char *flag, const char *name, - int *opt_flag, const char **opt_str) -{ - auto_vec<unsigned> align_result; - parse_and_check_align_values (flag, name, align_result, true, loc); - - if (align_result.length() >= 1 && align_result[0] == 0) - { - *opt_flag = 1; - *opt_str = NULL; - } -} - -/* Parse argument of -fpatchable-function-entry option ARG and store - corresponding values to PATCH_AREA_SIZE and PATCH_AREA_START. - If REPORT_ERROR is set to true, generate error for a problematic - option arguments. */ - -void -parse_and_check_patch_area (const char *arg, bool report_error, - HOST_WIDE_INT *patch_area_size, - HOST_WIDE_INT *patch_area_start) -{ - *patch_area_size = 0; - *patch_area_start = 0; - - if (arg == NULL) - return; - - char *patch_area_arg = xstrdup (arg); - char *comma = strchr (patch_area_arg, ','); - if (comma) - { - *comma = '\0'; - *patch_area_size = integral_argument (patch_area_arg); - *patch_area_start = integral_argument (comma + 1); - } - else - *patch_area_size = integral_argument (patch_area_arg); - - if (*patch_area_size < 0 - || *patch_area_size > USHRT_MAX - || *patch_area_start < 0 - || *patch_area_start > USHRT_MAX - || *patch_area_size < *patch_area_start) - if (report_error) - error ("invalid arguments for %<-fpatchable-function-entry%>"); - - free (patch_area_arg); -} - -/* Print help when OPT__help_ is set. */ - -void -print_help (struct gcc_options *opts, unsigned int lang_mask, - const char *help_option_argument) -{ - const char *a = help_option_argument; - unsigned int include_flags = 0; - /* Note - by default we include undocumented options when listing - specific classes. If you only want to see documented options - then add ",^undocumented" to the --help= option. E.g.: - - --help=target,^undocumented */ - unsigned int exclude_flags = 0; - - if (lang_mask == CL_DRIVER) - return; - - /* Walk along the argument string, parsing each word in turn. - The format is: - arg = [^]{word}[,{arg}] - word = {optimizers|target|warnings|undocumented| - params|common|<language>} */ - while (*a != 0) - { - static const struct - { - const char *string; - unsigned int flag; - } - specifics[] = - { - { "optimizers", CL_OPTIMIZATION }, - { "target", CL_TARGET }, - { "warnings", CL_WARNING }, - { "undocumented", CL_UNDOCUMENTED }, - { "params", CL_PARAMS }, - { "joined", CL_JOINED }, - { "separate", CL_SEPARATE }, - { "common", CL_COMMON }, - { NULL, 0 } - }; - unsigned int *pflags; - const char *comma; - unsigned int lang_flag, specific_flag; - unsigned int len; - unsigned int i; - - if (*a == '^') - { - ++a; - if (*a == '\0') - { - error ("missing argument to %qs", "--help=^"); - break; - } - pflags = &exclude_flags; - } - else - pflags = &include_flags; - - comma = strchr (a, ','); - if (comma == NULL) - len = strlen (a); - else - len = comma - a; - if (len == 0) - { - a = comma + 1; - continue; - } - - /* Check to see if the string matches an option class name. */ - for (i = 0, specific_flag = 0; specifics[i].string != NULL; i++) - if (strncasecmp (a, specifics[i].string, len) == 0) - { - specific_flag = specifics[i].flag; - break; - } - - /* Check to see if the string matches a language name. - Note - we rely upon the alpha-sorted nature of the entries in - the lang_names array, specifically that shorter names appear - before their longer variants. (i.e. C before C++). That way - when we are attempting to match --help=c for example we will - match with C first and not C++. */ - for (i = 0, lang_flag = 0; i < cl_lang_count; i++) - if (strncasecmp (a, lang_names[i], len) == 0) - { - lang_flag = 1U << i; - break; - } - - if (specific_flag != 0) - { - if (lang_flag == 0) - *pflags |= specific_flag; - else - { - /* The option's argument matches both the start of a - language name and the start of an option class name. - We have a special case for when the user has - specified "--help=c", but otherwise we have to issue - a warning. */ - if (strncasecmp (a, "c", len) == 0) - *pflags |= lang_flag; - else - warning (0, - "%<--help%> argument %q.*s is ambiguous, " - "please be more specific", - len, a); - } - } - else if (lang_flag != 0) - *pflags |= lang_flag; - else - warning (0, - "unrecognized argument to %<--help=%> option: %q.*s", - len, a); - - if (comma == NULL) - break; - a = comma + 1; - } - - /* We started using PerFunction/Optimization for parameters and - a warning. We should exclude these from optimization options. */ - if (include_flags & CL_OPTIMIZATION) - exclude_flags |= CL_WARNING; - if (!(include_flags & CL_PARAMS)) - exclude_flags |= CL_PARAMS; - - if (include_flags) - print_specific_help (include_flags, exclude_flags, 0, opts, - lang_mask); -} - -/* Handle target- and language-independent options. Return zero to - generate an "unknown option" message. Only options that need - extra handling need to be listed here; if you simply want - DECODED->value assigned to a variable, it happens automatically. */ - -bool -common_handle_option (struct gcc_options *opts, - struct gcc_options *opts_set, - const struct cl_decoded_option *decoded, - unsigned int lang_mask, int kind ATTRIBUTE_UNUSED, - location_t loc, - const struct cl_option_handlers *handlers, - diagnostic_context *dc, - void (*target_option_override_hook) (void)) -{ - size_t scode = decoded->opt_index; - const char *arg = decoded->arg; - HOST_WIDE_INT value = decoded->value; - enum opt_code code = (enum opt_code) scode; - - gcc_assert (decoded->canonical_option_num_elements <= 2); - - switch (code) - { - case OPT__help: - { - unsigned int all_langs_mask = (1U << cl_lang_count) - 1; - unsigned int undoc_mask; - unsigned int i; - - if (lang_mask == CL_DRIVER) - break; - - undoc_mask = ((opts->x_verbose_flag | opts->x_extra_warnings) - ? 0 - : CL_UNDOCUMENTED); - target_option_override_hook (); - /* First display any single language specific options. */ - for (i = 0; i < cl_lang_count; i++) - print_specific_help - (1U << i, (all_langs_mask & (~ (1U << i))) | undoc_mask, 0, opts, - lang_mask); - /* Next display any multi language specific options. */ - print_specific_help (0, undoc_mask, all_langs_mask, opts, lang_mask); - /* Then display any remaining, non-language options. */ - for (i = CL_MIN_OPTION_CLASS; i <= CL_MAX_OPTION_CLASS; i <<= 1) - if (i != CL_DRIVER) - print_specific_help (i, undoc_mask, 0, opts, lang_mask); - opts->x_exit_after_options = true; - break; - } - - case OPT__target_help: - if (lang_mask == CL_DRIVER) - break; - - target_option_override_hook (); - print_specific_help (CL_TARGET, CL_UNDOCUMENTED, 0, opts, lang_mask); - opts->x_exit_after_options = true; - break; - - case OPT__help_: - { - help_option_arguments.safe_push (arg); - opts->x_exit_after_options = true; - break; - } - - case OPT__version: - if (lang_mask == CL_DRIVER) - break; - - opts->x_exit_after_options = true; - break; - - case OPT__completion_: - break; - - case OPT_fsanitize_: - opts->x_flag_sanitize - = parse_sanitizer_options (arg, loc, code, - opts->x_flag_sanitize, value, true); - - /* Kernel ASan implies normal ASan but does not yet support - all features. */ - if (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS) - { - SET_OPTION_IF_UNSET (opts, opts_set, - param_asan_instrumentation_with_call_threshold, - 0); - SET_OPTION_IF_UNSET (opts, opts_set, param_asan_globals, 0); - SET_OPTION_IF_UNSET (opts, opts_set, param_asan_stack, 0); - SET_OPTION_IF_UNSET (opts, opts_set, param_asan_protect_allocas, 0); - SET_OPTION_IF_UNSET (opts, opts_set, param_asan_use_after_return, 0); - } - if (opts->x_flag_sanitize & SANITIZE_KERNEL_HWADDRESS) - { - SET_OPTION_IF_UNSET (opts, opts_set, - param_hwasan_instrument_stack, 0); - SET_OPTION_IF_UNSET (opts, opts_set, - param_hwasan_random_frame_tag, 0); - SET_OPTION_IF_UNSET (opts, opts_set, - param_hwasan_instrument_allocas, 0); - } - break; - - case OPT_fsanitize_recover_: - opts->x_flag_sanitize_recover - = parse_sanitizer_options (arg, loc, code, - opts->x_flag_sanitize_recover, value, true); - break; - - case OPT_fasan_shadow_offset_: - /* Deferred. */ - break; - - case OPT_fsanitize_address_use_after_scope: - opts->x_flag_sanitize_address_use_after_scope = value; - break; - - case OPT_fsanitize_recover: - if (value) - opts->x_flag_sanitize_recover - |= (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT) - & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN); - else - opts->x_flag_sanitize_recover - &= ~(SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT); - break; - - case OPT_fsanitize_coverage_: - opts->x_flag_sanitize_coverage = value; - break; - - case OPT_O: - case OPT_Os: - case OPT_Ofast: - case OPT_Og: - case OPT_Oz: - /* Currently handled in a prescan. */ - break; - - case OPT_Wattributes_: - if (lang_mask == CL_DRIVER) - break; - - if (value) - { - error_at (loc, "arguments ignored for %<-Wattributes=%>; use " - "%<-Wno-attributes=%> instead"); - break; - } - else if (arg[strlen (arg) - 1] == ',') - { - error_at (loc, "trailing %<,%> in arguments for " - "%<-Wno-attributes=%>"); - break; - } - - add_comma_separated_to_vector (&opts->x_flag_ignored_attributes, arg); - break; - - case OPT_Werror: - dc->warning_as_error_requested = value; - break; - - case OPT_Werror_: - if (lang_mask == CL_DRIVER) - break; - - enable_warning_as_error (arg, value, lang_mask, handlers, - opts, opts_set, loc, dc); - break; - - case OPT_Wfatal_errors: - dc->fatal_errors = value; - break; - - case OPT_Wstack_usage_: - opts->x_flag_stack_usage_info = value != -1; - break; - - case OPT_Wstrict_aliasing: - set_Wstrict_aliasing (opts, value); - break; - - case OPT_Wstrict_overflow: - opts->x_warn_strict_overflow = (value - ? (int) WARN_STRICT_OVERFLOW_CONDITIONAL - : 0); - break; - - case OPT_Wsystem_headers: - dc->dc_warn_system_headers = value; - break; - - case OPT_aux_info: - opts->x_flag_gen_aux_info = 1; - break; - - case OPT_d: - decode_d_option (arg, opts, loc, dc); - break; - - case OPT_fcall_used_: - case OPT_fcall_saved_: - /* Deferred. */ - break; - - case OPT_fdbg_cnt_: - /* Deferred. */ - break; - - case OPT_fdebug_prefix_map_: - case OPT_ffile_prefix_map_: - case OPT_fprofile_prefix_map_: - /* Deferred. */ - break; - - case OPT_fcallgraph_info: - opts->x_flag_callgraph_info = CALLGRAPH_INFO_NAKED; - break; - - case OPT_fcallgraph_info_: - { - char *my_arg, *p; - my_arg = xstrdup (arg); - p = strtok (my_arg, ","); - while (p) - { - if (strcmp (p, "su") == 0) - { - opts->x_flag_callgraph_info |= CALLGRAPH_INFO_STACK_USAGE; - opts->x_flag_stack_usage_info = true; - } - else if (strcmp (p, "da") == 0) - opts->x_flag_callgraph_info |= CALLGRAPH_INFO_DYNAMIC_ALLOC; - else - return 0; - p = strtok (NULL, ","); - } - free (my_arg); - } - break; - - case OPT_fdiagnostics_show_location_: - diagnostic_prefixing_rule (dc) = (diagnostic_prefixing_rule_t) value; - break; - - case OPT_fdiagnostics_show_caret: - dc->show_caret = value; - break; - - case OPT_fdiagnostics_show_labels: - dc->show_labels_p = value; - break; - - case OPT_fdiagnostics_show_line_numbers: - dc->show_line_numbers_p = value; - break; - - case OPT_fdiagnostics_color_: - diagnostic_color_init (dc, value); - break; - - case OPT_fdiagnostics_urls_: - diagnostic_urls_init (dc, value); - break; - - case OPT_fdiagnostics_format_: - diagnostic_output_format_init (dc, - (enum diagnostics_output_format)value); - break; - - case OPT_fdiagnostics_parseable_fixits: - dc->extra_output_kind = (value - ? EXTRA_DIAGNOSTIC_OUTPUT_fixits_v1 - : EXTRA_DIAGNOSTIC_OUTPUT_none); - break; - - case OPT_fdiagnostics_column_unit_: - dc->column_unit = (enum diagnostics_column_unit)value; - break; - - case OPT_fdiagnostics_column_origin_: - dc->column_origin = value; - break; - - case OPT_fdiagnostics_escape_format_: - dc->escape_format = (enum diagnostics_escape_format)value; - break; - - case OPT_fdiagnostics_show_cwe: - dc->show_cwe = value; - break; - - case OPT_fdiagnostics_path_format_: - dc->path_format = (enum diagnostic_path_format)value; - break; - - case OPT_fdiagnostics_show_path_depths: - dc->show_path_depths = value; - break; - - case OPT_fdiagnostics_show_option: - dc->show_option_requested = value; - break; - - case OPT_fdiagnostics_minimum_margin_width_: - dc->min_margin_width = value; - break; - - case OPT_fdump_: - /* Deferred. */ - break; - - case OPT_ffast_math: - set_fast_math_flags (opts, value); - break; - - case OPT_funsafe_math_optimizations: - set_unsafe_math_optimizations_flags (opts, value); - break; - - case OPT_ffixed_: - /* Deferred. */ - break; - - case OPT_finline_limit_: - SET_OPTION_IF_UNSET (opts, opts_set, param_max_inline_insns_single, - value / 2); - SET_OPTION_IF_UNSET (opts, opts_set, param_max_inline_insns_auto, - value / 2); - break; - - case OPT_finstrument_functions_exclude_function_list_: - add_comma_separated_to_vector - (&opts->x_flag_instrument_functions_exclude_functions, arg); - break; - - case OPT_finstrument_functions_exclude_file_list_: - add_comma_separated_to_vector - (&opts->x_flag_instrument_functions_exclude_files, arg); - break; - - case OPT_fmessage_length_: - pp_set_line_maximum_length (dc->printer, value); - diagnostic_set_caret_max_width (dc, value); - break; - - case OPT_fopt_info: - case OPT_fopt_info_: - /* Deferred. */ - break; - - case OPT_foffload_options_: - /* Deferred. */ - break; - - case OPT_foffload_abi_: -#ifdef ACCEL_COMPILER - /* Handled in the 'mkoffload's. */ -#else - error_at (loc, "%<-foffload-abi%> option can be specified only for " - "offload compiler"); -#endif - break; - - case OPT_fpack_struct_: - if (value <= 0 || (value & (value - 1)) || value > 16) - error_at (loc, - "structure alignment must be a small power of two, not %wu", - value); - else - opts->x_initial_max_fld_align = value; - break; - - case OPT_fplugin_: - case OPT_fplugin_arg_: - /* Deferred. */ - break; - - case OPT_fprofile_use_: - opts->x_profile_data_prefix = xstrdup (arg); - opts->x_flag_profile_use = true; - value = true; - /* No break here - do -fprofile-use processing. */ - /* FALLTHRU */ - case OPT_fprofile_use: - enable_fdo_optimizations (opts, opts_set, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_reorder_functions, - value); - /* Indirect call profiling should do all useful transformations - speculative devirtualization does. */ - if (opts->x_flag_value_profile_transformations) - SET_OPTION_IF_UNSET (opts, opts_set, flag_devirtualize_speculatively, - false); - break; - - case OPT_fauto_profile_: - opts->x_auto_profile_file = xstrdup (arg); - opts->x_flag_auto_profile = true; - value = true; - /* No break here - do -fauto-profile processing. */ - /* FALLTHRU */ - case OPT_fauto_profile: - enable_fdo_optimizations (opts, opts_set, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_correction, value); - SET_OPTION_IF_UNSET (opts, opts_set, - param_early_inliner_max_iterations, 10); - break; - - case OPT_fprofile_generate_: - opts->x_profile_data_prefix = xstrdup (arg); - value = true; - /* No break here - do -fprofile-generate processing. */ - /* FALLTHRU */ - case OPT_fprofile_generate: - SET_OPTION_IF_UNSET (opts, opts_set, profile_arc_flag, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_values, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_inline_functions, value); - SET_OPTION_IF_UNSET (opts, opts_set, flag_ipa_bit_cp, value); - break; - - case OPT_fprofile_info_section: - opts->x_profile_info_section = ".gcov_info"; - break; - - case OPT_fpatchable_function_entry_: - { - HOST_WIDE_INT patch_area_size, patch_area_start; - parse_and_check_patch_area (arg, true, &patch_area_size, - &patch_area_start); - } - break; - - case OPT_ftree_vectorize: - /* Automatically sets -ftree-loop-vectorize and - -ftree-slp-vectorize. Nothing more to do here. */ - break; - case OPT_fzero_call_used_regs_: - opts->x_flag_zero_call_used_regs - = parse_zero_call_used_regs_options (arg); - break; - - case OPT_fshow_column: - dc->show_column = value; - break; - - case OPT_frandom_seed: - /* The real switch is -fno-random-seed. */ - if (value) - return false; - /* Deferred. */ - break; - - case OPT_frandom_seed_: - /* Deferred. */ - break; - - case OPT_fsched_verbose_: -#ifdef INSN_SCHEDULING - /* Handled with Var in common.opt. */ - break; -#else - return false; -#endif - - case OPT_fsched_stalled_insns_: - opts->x_flag_sched_stalled_insns = value; - if (opts->x_flag_sched_stalled_insns == 0) - opts->x_flag_sched_stalled_insns = -1; - break; - - case OPT_fsched_stalled_insns_dep_: - opts->x_flag_sched_stalled_insns_dep = value; - break; - - case OPT_fstack_check_: - if (!strcmp (arg, "no")) - opts->x_flag_stack_check = NO_STACK_CHECK; - else if (!strcmp (arg, "generic")) - /* This is the old stack checking method. */ - opts->x_flag_stack_check = STACK_CHECK_BUILTIN - ? FULL_BUILTIN_STACK_CHECK - : GENERIC_STACK_CHECK; - else if (!strcmp (arg, "specific")) - /* This is the new stack checking method. */ - opts->x_flag_stack_check = STACK_CHECK_BUILTIN - ? FULL_BUILTIN_STACK_CHECK - : STACK_CHECK_STATIC_BUILTIN - ? STATIC_BUILTIN_STACK_CHECK - : GENERIC_STACK_CHECK; - else - warning_at (loc, 0, "unknown stack check parameter %qs", arg); - break; - - case OPT_fstack_limit: - /* The real switch is -fno-stack-limit. */ - if (value) - return false; - /* Deferred. */ - break; - - case OPT_fstack_limit_register_: - case OPT_fstack_limit_symbol_: - /* Deferred. */ - break; - - case OPT_fstack_usage: - opts->x_flag_stack_usage = value; - opts->x_flag_stack_usage_info = value != 0; - break; - - case OPT_g: - set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set, - loc); - break; - - case OPT_gbtf: - set_debug_level (BTF_DEBUG, false, arg, opts, opts_set, loc); - /* set the debug level to level 2, but if already at level 3, - don't lower it. */ - if (opts->x_debug_info_level < DINFO_LEVEL_NORMAL) - opts->x_debug_info_level = DINFO_LEVEL_NORMAL; - break; - - case OPT_gctf: - set_debug_level (CTF_DEBUG, false, arg, opts, opts_set, loc); - /* CTF generation feeds off DWARF dies. For optimal CTF, switch debug - info level to 2. If off or at level 1, set it to level 2, but if - already at level 3, don't lower it. */ - if (opts->x_debug_info_level < DINFO_LEVEL_NORMAL - && opts->x_ctf_debug_info_level > CTFINFO_LEVEL_NONE) - opts->x_debug_info_level = DINFO_LEVEL_NORMAL; - break; - - case OPT_gdwarf: - if (arg && strlen (arg) != 0) - { - error_at (loc, "%<-gdwarf%s%> is ambiguous; " - "use %<-gdwarf-%s%> for DWARF version " - "or %<-gdwarf%> %<-g%s%> for debug level", arg, arg, arg); - break; - } - else - value = opts->x_dwarf_version; - - /* FALLTHRU */ - case OPT_gdwarf_: - if (value < 2 || value > 5) - error_at (loc, "dwarf version %wu is not supported", value); - else - opts->x_dwarf_version = value; - set_debug_level (DWARF2_DEBUG, false, "", opts, opts_set, loc); - break; - - case OPT_ggdb: - set_debug_level (NO_DEBUG, 2, arg, opts, opts_set, loc); - break; - - case OPT_gstabs: - case OPT_gstabs_: - set_debug_level (DBX_DEBUG, code == OPT_gstabs_, arg, opts, opts_set, - loc); - break; - - case OPT_gvms: - set_debug_level (VMS_DEBUG, false, arg, opts, opts_set, loc); - break; - - case OPT_gxcoff: - case OPT_gxcoff_: - set_debug_level (XCOFF_DEBUG, code == OPT_gxcoff_, arg, opts, opts_set, - loc); - break; - - case OPT_gz: - case OPT_gz_: - /* Handled completely via specs. */ - break; - - case OPT_pedantic_errors: - dc->pedantic_errors = 1; - control_warning_option (OPT_Wpedantic, DK_ERROR, NULL, value, - loc, lang_mask, - handlers, opts, opts_set, - dc); - break; - - case OPT_flto: - opts->x_flag_lto = value ? "" : NULL; - break; - - case OPT_flto_: - if (strcmp (arg, "none") != 0 - && strcmp (arg, "jobserver") != 0 - && strcmp (arg, "auto") != 0 - && atoi (arg) == 0) - error_at (loc, - "unrecognized argument to %<-flto=%> option: %qs", arg); - break; - - case OPT_w: - dc->dc_inhibit_warnings = true; - break; - - case OPT_fmax_errors_: - dc->max_errors = value; - break; - - case OPT_fuse_ld_bfd: - case OPT_fuse_ld_gold: - case OPT_fuse_ld_lld: - case OPT_fuse_ld_mold: - case OPT_fuse_linker_plugin: - /* No-op. Used by the driver and passed to us because it starts with f.*/ - break; - - case OPT_fwrapv: - if (value) - opts->x_flag_trapv = 0; - break; - - case OPT_ftrapv: - if (value) - opts->x_flag_wrapv = 0; - break; - - case OPT_fstrict_overflow: - opts->x_flag_wrapv = !value; - opts->x_flag_wrapv_pointer = !value; - if (!value) - opts->x_flag_trapv = 0; - break; - - case OPT_fipa_icf: - opts->x_flag_ipa_icf_functions = value; - opts->x_flag_ipa_icf_variables = value; - break; - - case OPT_falign_loops_: - check_alignment_argument (loc, arg, "loops", - &opts->x_flag_align_loops, - &opts->x_str_align_loops); - break; - - case OPT_falign_jumps_: - check_alignment_argument (loc, arg, "jumps", - &opts->x_flag_align_jumps, - &opts->x_str_align_jumps); - break; - - case OPT_falign_labels_: - check_alignment_argument (loc, arg, "labels", - &opts->x_flag_align_labels, - &opts->x_str_align_labels); - break; - - case OPT_falign_functions_: - check_alignment_argument (loc, arg, "functions", - &opts->x_flag_align_functions, - &opts->x_str_align_functions); - break; - - case OPT_ftabstop_: - /* It is documented that we silently ignore silly values. */ - if (value >= 1 && value <= 100) - dc->tabstop = value; - break; - - default: - /* If the flag was handled in a standard way, assume the lack of - processing here is intentional. */ - gcc_assert (option_flag_var (scode, opts)); - break; - } - - common_handle_option_auto (opts, opts_set, decoded, lang_mask, kind, - loc, handlers, dc); - return true; -} - -/* Used to set the level of strict aliasing warnings in OPTS, - when no level is specified (i.e., when -Wstrict-aliasing, and not - -Wstrict-aliasing=level was given). - ONOFF is assumed to take value 1 when -Wstrict-aliasing is specified, - and 0 otherwise. After calling this function, wstrict_aliasing will be - set to the default value of -Wstrict_aliasing=level, currently 3. */ -static void -set_Wstrict_aliasing (struct gcc_options *opts, int onoff) -{ - gcc_assert (onoff == 0 || onoff == 1); - if (onoff != 0) - opts->x_warn_strict_aliasing = 3; - else - opts->x_warn_strict_aliasing = 0; -} - -/* The following routines are useful in setting all the flags that - -ffast-math and -fno-fast-math imply. */ -static void -set_fast_math_flags (struct gcc_options *opts, int set) -{ - if (!opts->frontend_set_flag_unsafe_math_optimizations) - { - opts->x_flag_unsafe_math_optimizations = set; - set_unsafe_math_optimizations_flags (opts, set); - } - if (!opts->frontend_set_flag_finite_math_only) - opts->x_flag_finite_math_only = set; - if (!opts->frontend_set_flag_errno_math) - opts->x_flag_errno_math = !set; - if (set) - { - if (opts->frontend_set_flag_excess_precision == EXCESS_PRECISION_DEFAULT) - opts->x_flag_excess_precision - = set ? EXCESS_PRECISION_FAST : EXCESS_PRECISION_DEFAULT; - if (!opts->frontend_set_flag_signaling_nans) - opts->x_flag_signaling_nans = 0; - if (!opts->frontend_set_flag_rounding_math) - opts->x_flag_rounding_math = 0; - if (!opts->frontend_set_flag_cx_limited_range) - opts->x_flag_cx_limited_range = 1; - } -} - -/* When -funsafe-math-optimizations is set the following - flags are set as well. */ -static void -set_unsafe_math_optimizations_flags (struct gcc_options *opts, int set) -{ - if (!opts->frontend_set_flag_trapping_math) - opts->x_flag_trapping_math = !set; - if (!opts->frontend_set_flag_signed_zeros) - opts->x_flag_signed_zeros = !set; - if (!opts->frontend_set_flag_associative_math) - opts->x_flag_associative_math = set; - if (!opts->frontend_set_flag_reciprocal_math) - opts->x_flag_reciprocal_math = set; -} - -/* Return true iff flags in OPTS are set as if -ffast-math. */ -bool -fast_math_flags_set_p (const struct gcc_options *opts) -{ - return (!opts->x_flag_trapping_math - && opts->x_flag_unsafe_math_optimizations - && opts->x_flag_finite_math_only - && !opts->x_flag_signed_zeros - && !opts->x_flag_errno_math - && opts->x_flag_excess_precision == EXCESS_PRECISION_FAST); -} - -/* Return true iff flags are set as if -ffast-math but using the flags stored - in the struct cl_optimization structure. */ -bool -fast_math_flags_struct_set_p (struct cl_optimization *opt) -{ - return (!opt->x_flag_trapping_math - && opt->x_flag_unsafe_math_optimizations - && opt->x_flag_finite_math_only - && !opt->x_flag_signed_zeros - && !opt->x_flag_errno_math); -} - -/* Handle a debug output -g switch for options OPTS - (OPTS_SET->x_write_symbols storing whether a debug format was passed - explicitly), location LOC. EXTENDED is true or false to support - extended output (2 is special and means "-ggdb" was given). */ -static void -set_debug_level (uint32_t dinfo, int extended, const char *arg, - struct gcc_options *opts, struct gcc_options *opts_set, - location_t loc) -{ - opts->x_use_gnu_debug_info_extensions = extended; - - if (dinfo == NO_DEBUG) - { - if (opts->x_write_symbols == NO_DEBUG) - { - opts->x_write_symbols = PREFERRED_DEBUGGING_TYPE; - - if (extended == 2) - { -#if defined DWARF2_DEBUGGING_INFO || defined DWARF2_LINENO_DEBUGGING_INFO - if (opts->x_write_symbols & CTF_DEBUG) - opts->x_write_symbols |= DWARF2_DEBUG; - else - opts->x_write_symbols = DWARF2_DEBUG; -#elif defined DBX_DEBUGGING_INFO - opts->x_write_symbols = DBX_DEBUG; -#endif - } - - if (opts->x_write_symbols == NO_DEBUG) - warning_at (loc, 0, "target system does not support debug output"); - } - else if ((opts->x_write_symbols & CTF_DEBUG) - || (opts->x_write_symbols & BTF_DEBUG)) - { - opts->x_write_symbols |= DWARF2_DEBUG; - opts_set->x_write_symbols |= DWARF2_DEBUG; - } - } - else - { - /* Make and retain the choice if both CTF and DWARF debug info are to - be generated. */ - if (((dinfo == DWARF2_DEBUG) || (dinfo == CTF_DEBUG)) - && ((opts->x_write_symbols == (DWARF2_DEBUG|CTF_DEBUG)) - || (opts->x_write_symbols == DWARF2_DEBUG) - || (opts->x_write_symbols == CTF_DEBUG))) - { - opts->x_write_symbols |= dinfo; - opts_set->x_write_symbols |= dinfo; - } - /* However, CTF and BTF are not allowed together at this time. */ - else if (((dinfo == DWARF2_DEBUG) || (dinfo == BTF_DEBUG)) - && ((opts->x_write_symbols == (DWARF2_DEBUG|BTF_DEBUG)) - || (opts->x_write_symbols == DWARF2_DEBUG) - || (opts->x_write_symbols == BTF_DEBUG))) - { - opts->x_write_symbols |= dinfo; - opts_set->x_write_symbols |= dinfo; - } - else - { - /* Does it conflict with an already selected debug format? */ - if (opts_set->x_write_symbols != NO_DEBUG - && opts->x_write_symbols != NO_DEBUG - && dinfo != opts->x_write_symbols) - { - gcc_assert (debug_set_count (dinfo) <= 1); - error_at (loc, "debug format %qs conflicts with prior selection", - debug_type_names[debug_set_to_format (dinfo)]); - } - opts->x_write_symbols = dinfo; - opts_set->x_write_symbols = dinfo; - } - } - - if (dinfo != BTF_DEBUG) - { - /* A debug flag without a level defaults to level 2. - If off or at level 1, set it to level 2, but if already - at level 3, don't lower it. */ - if (*arg == '\0') - { - if (dinfo == CTF_DEBUG) - opts->x_ctf_debug_info_level = CTFINFO_LEVEL_NORMAL; - else if (opts->x_debug_info_level < DINFO_LEVEL_NORMAL) - opts->x_debug_info_level = DINFO_LEVEL_NORMAL; - } - else - { - int argval = integral_argument (arg); - if (argval == -1) - error_at (loc, "unrecognized debug output level %qs", arg); - else if (argval > 3) - error_at (loc, "debug output level %qs is too high", arg); - else - { - if (dinfo == CTF_DEBUG) - opts->x_ctf_debug_info_level - = (enum ctf_debug_info_levels) argval; - else - opts->x_debug_info_level = (enum debug_info_levels) argval; - } - } - } - else if (*arg != '\0') - error_at (loc, "unrecognized btf debug output level %qs", arg); -} - -/* Arrange to dump core on error for diagnostic context DC. (The - regular error message is still printed first, except in the case of - abort ().) */ - -static void -setup_core_dumping (diagnostic_context *dc) -{ -#ifdef SIGABRT - signal (SIGABRT, SIG_DFL); -#endif -#if defined(HAVE_SETRLIMIT) - { - struct rlimit rlim; - if (getrlimit (RLIMIT_CORE, &rlim) != 0) - fatal_error (input_location, "getting core file size maximum limit: %m"); - rlim.rlim_cur = rlim.rlim_max; - if (setrlimit (RLIMIT_CORE, &rlim) != 0) - fatal_error (input_location, - "setting core file size limit to maximum: %m"); - } -#endif - diagnostic_abort_on_error (dc); -} - -/* Parse a -d<ARG> command line switch for OPTS, location LOC, - diagnostic context DC. */ - -static void -decode_d_option (const char *arg, struct gcc_options *opts, - location_t loc, diagnostic_context *dc) -{ - int c; - - while (*arg) - switch (c = *arg++) - { - case 'A': - opts->x_flag_debug_asm = 1; - break; - case 'p': - opts->x_flag_print_asm_name = 1; - break; - case 'P': - opts->x_flag_dump_rtl_in_asm = 1; - opts->x_flag_print_asm_name = 1; - break; - case 'x': - opts->x_rtl_dump_and_exit = 1; - break; - case 'D': /* These are handled by the preprocessor. */ - case 'I': - case 'M': - case 'N': - case 'U': - break; - case 'H': - setup_core_dumping (dc); - break; - case 'a': - opts->x_flag_dump_all_passed = true; - break; - - default: - warning_at (loc, 0, "unrecognized gcc debugging option: %c", c); - break; - } -} - -/* Enable (or disable if VALUE is 0) a warning option ARG (language - mask LANG_MASK, option handlers HANDLERS) as an error for option - structures OPTS and OPTS_SET, diagnostic context DC (possibly - NULL), location LOC. This is used by -Werror=. */ - -static void -enable_warning_as_error (const char *arg, int value, unsigned int lang_mask, - const struct cl_option_handlers *handlers, - struct gcc_options *opts, - struct gcc_options *opts_set, - location_t loc, diagnostic_context *dc) -{ - char *new_option; - int option_index; - - new_option = XNEWVEC (char, strlen (arg) + 2); - new_option[0] = 'W'; - strcpy (new_option + 1, arg); - option_index = find_opt (new_option, lang_mask); - if (option_index == OPT_SPECIAL_unknown) - { - option_proposer op; - const char *hint = op.suggest_option (new_option); - if (hint) - error_at (loc, "%<-W%serror=%s%>: no option %<-%s%>;" - " did you mean %<-%s%>?", value ? "" : "no-", - arg, new_option, hint); - else - error_at (loc, "%<-W%serror=%s%>: no option %<-%s%>", - value ? "" : "no-", arg, new_option); - } - else if (!(cl_options[option_index].flags & CL_WARNING)) - error_at (loc, "%<-Werror=%s%>: %<-%s%> is not an option that " - "controls warnings", arg, new_option); - else - { - const diagnostic_t kind = value ? DK_ERROR : DK_WARNING; - const char *arg = NULL; - - if (cl_options[option_index].flags & CL_JOINED) - arg = new_option + cl_options[option_index].opt_len; - control_warning_option (option_index, (int) kind, arg, value, - loc, lang_mask, - handlers, opts, opts_set, dc); - } - free (new_option); -} - -/* Return malloced memory for the name of the option OPTION_INDEX - which enabled a diagnostic (context CONTEXT), originally of type - ORIG_DIAG_KIND but possibly converted to DIAG_KIND by options such - as -Werror. */ - -char * -option_name (diagnostic_context *context, int option_index, - diagnostic_t orig_diag_kind, diagnostic_t diag_kind) -{ - if (option_index) - { - /* A warning classified as an error. */ - if ((orig_diag_kind == DK_WARNING || orig_diag_kind == DK_PEDWARN) - && diag_kind == DK_ERROR) - return concat (cl_options[OPT_Werror_].opt_text, - /* Skip over "-W". */ - cl_options[option_index].opt_text + 2, - NULL); - /* A warning with option. */ - else - return xstrdup (cl_options[option_index].opt_text); - } - /* A warning without option classified as an error. */ - else if ((orig_diag_kind == DK_WARNING || orig_diag_kind == DK_PEDWARN - || diag_kind == DK_WARNING) - && context->warning_as_error_requested) - return xstrdup (cl_options[OPT_Werror].opt_text); - else - return NULL; -} - -/* Get the page within the documentation for this option. */ - -static const char * -get_option_html_page (int option_index) -{ - const cl_option *cl_opt = &cl_options[option_index]; - - /* Analyzer options are on their own page. */ - if (strstr (cl_opt->opt_text, "analyzer-")) - return "gcc/Static-Analyzer-Options.html"; - - /* Handle -flto= option. */ - if (strstr (cl_opt->opt_text, "flto")) - return "gcc/Optimize-Options.html"; - -#ifdef CL_Fortran - if ((cl_opt->flags & CL_Fortran) != 0 - /* If it is option common to both C/C++ and Fortran, it is documented - in gcc/ rather than gfortran/ docs. */ - && (cl_opt->flags & CL_C) == 0 -#ifdef CL_CXX - && (cl_opt->flags & CL_CXX) == 0 -#endif - ) - return "gfortran/Error-and-Warning-Options.html"; -#endif - - return "gcc/Warning-Options.html"; -} - -/* Return malloced memory for a URL describing the option OPTION_INDEX - which enabled a diagnostic (context CONTEXT). */ - -char * -get_option_url (diagnostic_context *, int option_index) -{ - if (option_index) - return concat (/* DOCUMENTATION_ROOT_URL should be supplied via -D by - the Makefile (see --with-documentation-root-url), and - should have a trailing slash. */ - DOCUMENTATION_ROOT_URL, - - /* get_option_html_page will return something like - "gcc/Warning-Options.html". */ - get_option_html_page (option_index), - - /* Expect an anchor of the form "index-Wfoo" e.g. - <a name="index-Wformat"></a>, and thus an id within - the URL of "#index-Wformat". */ - "#index", cl_options[option_index].opt_text, - NULL); - else - return NULL; -} - -/* Return a heap allocated producer with command line options. */ - -char * -gen_command_line_string (cl_decoded_option *options, - unsigned int options_count) -{ - auto_vec<const char *> switches; - char *options_string, *tail; - const char *p; - size_t len = 0; - - for (unsigned i = 0; i < options_count; i++) - switch (options[i].opt_index) - { - case OPT_o: - case OPT_d: - case OPT_dumpbase: - case OPT_dumpbase_ext: - case OPT_dumpdir: - case OPT_quiet: - case OPT_version: - case OPT_v: - case OPT_w: - case OPT_L: - case OPT_D: - case OPT_I: - case OPT_U: - case OPT_SPECIAL_unknown: - case OPT_SPECIAL_ignore: - case OPT_SPECIAL_warn_removed: - case OPT_SPECIAL_program_name: - case OPT_SPECIAL_input_file: - case OPT_grecord_gcc_switches: - case OPT_frecord_gcc_switches: - case OPT__output_pch_: - case OPT_fdiagnostics_show_location_: - case OPT_fdiagnostics_show_option: - case OPT_fdiagnostics_show_caret: - case OPT_fdiagnostics_show_labels: - case OPT_fdiagnostics_show_line_numbers: - case OPT_fdiagnostics_color_: - case OPT_fdiagnostics_format_: - case OPT_fverbose_asm: - case OPT____: - case OPT__sysroot_: - case OPT_nostdinc: - case OPT_nostdinc__: - case OPT_fpreprocessed: - case OPT_fltrans_output_list_: - case OPT_fresolution_: - case OPT_fdebug_prefix_map_: - case OPT_fmacro_prefix_map_: - case OPT_ffile_prefix_map_: - case OPT_fprofile_prefix_map_: - case OPT_fcompare_debug: - case OPT_fchecking: - case OPT_fchecking_: - /* Ignore these. */ - continue; - case OPT_flto_: - { - const char *lto_canonical = "-flto"; - switches.safe_push (lto_canonical); - len += strlen (lto_canonical) + 1; - break; - } - default: - if (cl_options[options[i].opt_index].flags - & CL_NO_DWARF_RECORD) - continue; - gcc_checking_assert (options[i].canonical_option[0][0] == '-'); - switch (options[i].canonical_option[0][1]) - { - case 'M': - case 'i': - case 'W': - continue; - case 'f': - if (strncmp (options[i].canonical_option[0] + 2, - "dump", 4) == 0) - continue; - break; - default: - break; - } - switches.safe_push (options[i].orig_option_with_args_text); - len += strlen (options[i].orig_option_with_args_text) + 1; - break; - } - - options_string = XNEWVEC (char, len + 1); - tail = options_string; - - unsigned i; - FOR_EACH_VEC_ELT (switches, i, p) - { - len = strlen (p); - memcpy (tail, p, len); - tail += len; - if (i != switches.length () - 1) - { - *tail = ' '; - ++tail; - } - } - - *tail = '\0'; - return options_string; -} - -/* Return a heap allocated producer string including command line options. */ - -char * -gen_producer_string (const char *language_string, cl_decoded_option *options, - unsigned int options_count) -{ - char *cmdline = gen_command_line_string (options, options_count); - char *combined = concat (language_string, " ", version_string, " ", - cmdline, NULL); - free (cmdline); - return combined; -} - -#if CHECKING_P - -namespace selftest { - -/* Verify that get_option_html_page works as expected. */ - -static void -test_get_option_html_page () -{ - ASSERT_STREQ (get_option_html_page (OPT_Wcpp), "gcc/Warning-Options.html"); - ASSERT_STREQ (get_option_html_page (OPT_Wanalyzer_double_free), - "gcc/Static-Analyzer-Options.html"); -#ifdef CL_Fortran - ASSERT_STREQ (get_option_html_page (OPT_Wline_truncation), - "gfortran/Error-and-Warning-Options.html"); -#endif -} - -/* Run all of the selftests within this file. */ - -void -opts_c_tests () -{ - test_get_option_html_page (); -} - -} // namespace selftest - -#endif /* #if CHECKING_P */ |