From 5c69acb32329d49e58c26fa41ae74229a52b9106 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Fri, 14 Jan 2022 16:56:44 +0100 Subject: 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. --- gcc/opts.c | 3722 ------------------------------------------------------------ 1 file changed, 3722 deletions(-) delete mode 100644 gcc/opts.c (limited to 'gcc/opts.c') 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 -. */ - -#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 *v = (vec *) *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, %, %, % or %"); - 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 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 values): - m_code (code), m_values (values) - {} - - /* Code of an option. */ - int m_code; - - /* List of possible values. */ - vec 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 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 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 % passed " - "to %", - 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 -{ - 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 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 &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 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|} */ - 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 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. - , 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 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 */ -- cgit v1.1