]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/ssa-iterators.h
don't declare header-defined functions both static and inline
authorPatrick Palka <ppalka@redhat.com>
Thu, 16 Feb 2023 15:30:20 +0000 (10:30 -0500)
committerPatrick Palka <ppalka@redhat.com>
Thu, 16 Feb 2023 15:30:20 +0000 (10:30 -0500)
commitcb3e0eac262e55774949b1717c64da383adbc621
treea86ae96b5585e5f6d6c86bf152bc621ae76d632d
parenta5de17d9120dde7e6598a05ea4d1556c2783c69b
don't declare header-defined functions both static and inline

Many functions defined in our headers are declared 'static inline' which
is a C idiom whose use predates our move to C++ as the implementation
language.  But in C++ the inline keyword is more than just a compiler
hint, and is sufficient to give the function the intended semantics.
In fact declaring a function both static and inline is a pessimization
since static effectively disables the desired definition merging
behavior enabled by inline, and is also a source of (harmless) ODR
violations when a static inline function gets called from a non-static
inline one (such as tree_operand_check calling tree_operand_length).

This patch mechanically fixes the vast majority of occurrences of this
anti-pattern throughout the compiler's headers via the command line

  sed -i 's/^static inline/inline/g' gcc/*.h gcc/*/*.h

There's also a manual change to remove the redundant declarations
of is_ivar and lookup_category in gcc/objc/objc-act.cc which would
otherwise conflict with their modified definitions in objc-act.h
(due to the difference in staticness).

Besides fixing some ODR violations, this speeds up stage1 cc1plus by
about 2% and reduces the size of its text segment by 1.5MB.

gcc/ChangeLog:

* addresses.h: Mechanically drop 'static' from 'static inline'
functions via s/^static inline/inline/g.
* asan.h: Likewise.
* attribs.h: Likewise.
* basic-block.h: Likewise.
* bitmap.h: Likewise.
* cfghooks.h: Likewise.
* cfgloop.h: Likewise.
* cgraph.h: Likewise.
* cselib.h: Likewise.
* data-streamer.h: Likewise.
* debug.h: Likewise.
* df.h: Likewise.
* diagnostic.h: Likewise.
* dominance.h: Likewise.
* dumpfile.h: Likewise.
* emit-rtl.h: Likewise.
* except.h: Likewise.
* expmed.h: Likewise.
* expr.h: Likewise.
* fixed-value.h: Likewise.
* gengtype.h: Likewise.
* gimple-expr.h: Likewise.
* gimple-iterator.h: Likewise.
* gimple-predict.h: Likewise.
* gimple-range-fold.h: Likewise.
* gimple-ssa.h: Likewise.
* gimple.h: Likewise.
* graphite.h: Likewise.
* hard-reg-set.h: Likewise.
* hash-map.h: Likewise.
* hash-set.h: Likewise.
* hash-table.h: Likewise.
* hwint.h: Likewise.
* input.h: Likewise.
* insn-addr.h: Likewise.
* internal-fn.h: Likewise.
* ipa-fnsummary.h: Likewise.
* ipa-icf-gimple.h: Likewise.
* ipa-inline.h: Likewise.
* ipa-modref.h: Likewise.
* ipa-prop.h: Likewise.
* ira-int.h: Likewise.
* ira.h: Likewise.
* lra-int.h: Likewise.
* lra.h: Likewise.
* lto-streamer.h: Likewise.
* memmodel.h: Likewise.
* omp-general.h: Likewise.
* optabs-query.h: Likewise.
* optabs.h: Likewise.
* plugin.h: Likewise.
* pretty-print.h: Likewise.
* range.h: Likewise.
* read-md.h: Likewise.
* recog.h: Likewise.
* regs.h: Likewise.
* rtl-iter.h: Likewise.
* rtl.h: Likewise.
* sbitmap.h: Likewise.
* sched-int.h: Likewise.
* sel-sched-ir.h: Likewise.
* sese.h: Likewise.
* sparseset.h: Likewise.
* ssa-iterators.h: Likewise.
* system.h: Likewise.
* target-globals.h: Likewise.
* target.h: Likewise.
* timevar.h: Likewise.
* tree-chrec.h: Likewise.
* tree-data-ref.h: Likewise.
* tree-iterator.h: Likewise.
* tree-outof-ssa.h: Likewise.
* tree-phinodes.h: Likewise.
* tree-scalar-evolution.h: Likewise.
* tree-sra.h: Likewise.
* tree-ssa-alias.h: Likewise.
* tree-ssa-live.h: Likewise.
* tree-ssa-loop-manip.h: Likewise.
* tree-ssa-loop.h: Likewise.
* tree-ssa-operands.h: Likewise.
* tree-ssa-propagate.h: Likewise.
* tree-ssa-sccvn.h: Likewise.
* tree-ssa.h: Likewise.
* tree-ssanames.h: Likewise.
* tree-streamer.h: Likewise.
* tree-switch-conversion.h: Likewise.
* tree-vectorizer.h: Likewise.
* tree.h: Likewise.
* wide-int.h: Likewise.

gcc/c-family/ChangeLog:

* c-common.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/c/ChangeLog:

* c-parser.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/cp/ChangeLog:

* cp-tree.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/fortran/ChangeLog:

* gfortran.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.

gcc/jit/ChangeLog:

* jit-dejagnu.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.
* jit-recording.h: Likewise.

gcc/objc/ChangeLog:

* objc-act.h: Mechanically drop static from static inline
functions via s/^static inline/inline/g.
* objc-map.h: Likewise.
* objc-act.cc: Remove the redundant redeclarations of is_ivar
and lookup_category.
98 files changed:
gcc/addresses.h
gcc/asan.h
gcc/attribs.h
gcc/basic-block.h
gcc/bitmap.h
gcc/c-family/c-common.h
gcc/c/c-parser.h
gcc/cfghooks.h
gcc/cfgloop.h
gcc/cgraph.h
gcc/cp/cp-tree.h
gcc/cselib.h
gcc/data-streamer.h
gcc/debug.h
gcc/df.h
gcc/diagnostic.h
gcc/dominance.h
gcc/dumpfile.h
gcc/emit-rtl.h
gcc/except.h
gcc/expmed.h
gcc/expr.h
gcc/fixed-value.h
gcc/fortran/gfortran.h
gcc/gengtype.h
gcc/gimple-expr.h
gcc/gimple-iterator.h
gcc/gimple-predict.h
gcc/gimple-range-fold.h
gcc/gimple-ssa.h
gcc/gimple.h
gcc/graphite.h
gcc/hard-reg-set.h
gcc/hash-map.h
gcc/hash-set.h
gcc/hash-table.h
gcc/hwint.h
gcc/input.h
gcc/insn-addr.h
gcc/internal-fn.h
gcc/ipa-fnsummary.h
gcc/ipa-icf-gimple.h
gcc/ipa-inline.h
gcc/ipa-modref.h
gcc/ipa-prop.h
gcc/ira-int.h
gcc/ira.h
gcc/jit/jit-dejagnu.h
gcc/jit/jit-recording.h
gcc/lra-int.h
gcc/lra.h
gcc/lto-streamer.h
gcc/memmodel.h
gcc/objc/objc-act.cc
gcc/objc/objc-act.h
gcc/objc/objc-map.h
gcc/omp-general.h
gcc/optabs-query.h
gcc/optabs.h
gcc/plugin.h
gcc/pretty-print.h
gcc/range.h
gcc/read-md.h
gcc/recog.h
gcc/regs.h
gcc/rtl-iter.h
gcc/rtl.h
gcc/sbitmap.h
gcc/sched-int.h
gcc/sel-sched-ir.h
gcc/sese.h
gcc/sparseset.h
gcc/ssa-iterators.h
gcc/system.h
gcc/target-globals.h
gcc/target.h
gcc/timevar.h
gcc/tree-chrec.h
gcc/tree-data-ref.h
gcc/tree-iterator.h
gcc/tree-outof-ssa.h
gcc/tree-phinodes.h
gcc/tree-scalar-evolution.h
gcc/tree-sra.h
gcc/tree-ssa-alias.h
gcc/tree-ssa-live.h
gcc/tree-ssa-loop-manip.h
gcc/tree-ssa-loop.h
gcc/tree-ssa-operands.h
gcc/tree-ssa-propagate.h
gcc/tree-ssa-sccvn.h
gcc/tree-ssa.h
gcc/tree-ssanames.h
gcc/tree-streamer.h
gcc/tree-switch-conversion.h
gcc/tree-vectorizer.h
gcc/tree.h
gcc/wide-int.h