[PATCH] forge: utilities to support classifying patches on the forge
Richard Earnshaw (lists)
Richard.Earnshaw@arm.com
Wed Oct 29 11:12:26 GMT 2025
And this is the patch. Sorry, if you want to extract the code itself, you'll need to follow the reference back.
R.
On 28/10/2025 14:10, Richard Earnshaw via Gcc wrote:
> These two files are intended to be a demonstration of how we could auto-classify
> patches submitted to the forge and appropriate labels.
>
> This is work-in-progress; in particular the classify.py code cannot currently
> read patch files or look up bugzilla tickets. However, it is possible to run
> the script on the output of find (run from the top-level of the gcc source tree)
> to see which labels would be added for each file in the repository. Use
> something like:
> (cd ${gcc_src}; find . \( -name .git -prune \) -o -type f) | ./classify.py
>
> contrib/ChangeLog:
>
> * forge/classify.py: New file.
> * forge/labels: New file.
> ---
> contrib/forge/classify.py | 158 +++++++++++++++++
> contrib/forge/labels | 347 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 505 insertions(+)
> create mode 100755 contrib/forge/classify.py
> create mode 100644 contrib/forge/labels
>
> diff --git a/contrib/forge/classify.py b/contrib/forge/classify.py
> new file mode 100755
> index 00000000000..622b565dd61
> --- /dev/null
> +++ b/contrib/forge/classify.py
> @@ -0,0 +1,158 @@
> +#!/usr/bin/env python3
> +
> +# Map files in the GCC source tree to forge labels.
> +
> +# Copyright (C) 2025 Free Software Foundation, Inc.
> +#
> +# This file is part of GCC.
> +#
> +# GCC is free software; you can redistribute it and/or modify it under
> +# the terms of the GNU General Public License as published by the Free
> +# Software Foundation; either version 3, or (at your option) any later
> +# version.
> +#
> +# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
> +# WARRANTY; without even the implied warranty of MERCHANTABILITY or
> +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
> +# for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with GCC; see the file COPYING3. If not see
> +# <http://www.gnu.org/licenses/>.
> +
> +# Note, this file requires python 3.10 or later.
> +
> +import re
> +import sys
> +
> +# from unidiff import PatchSet
> +
> +labels_file = 'labels'
> +
> +label_and_rule = re.compile(r'^([a-zA-Z][-+a-zA-Z0-9]*(?:/[a-zA-Z][-+a-zA-Z0-9]*)*)\s+\{([^\}]+)?\}\s+')
> +ignore_line = re.compile(r'^([#:]|\s*\n)')
> +
> +class classifier:
> + def __init__(self, labs):
> + self.file_class = []
> + self.bz_class = []
> + self.default_class = None
> + f = open(labs)
> + for l in f.readlines():
> + m = label_and_rule.match(l)
> + if m:
> + rule = m.group(2)
> + if rule:
> + if rule[:5] == 'file:':
> + self.file_class += self._file_entry(rule[5:], m.group(1))
> + elif rule == 'default:':
> + if self.default_class:
> + raise Exception ('There can only be one default class')
> + else:
> + self.default_class = m.group(1)
> + elif rule[:3] == 'BZ:':
> + True
> + else:
> + raise Exception('Unrecognized line: ' + l)
> +
> + elif not ignore_line.match(l):
> + print('Unrecognized line:', l)
> + f.close()
> +
> + def map_to_labels(self, name):
> + labels = []
> + priority = 10 # Lowest supported priority is 9
> + for fc in self.file_class:
> + if fc['pattern'].match(name):
> + if fc['priority'] < priority:
> + priority = fc['priority']
> + labels = [fc['label']]
> + elif fc['priority'] == priority:
> + labels += [fc['label']]
> +
> + if len(labels) != 0:
> + return labels
> + return [self.default_class]
> +
> + def _file_entry(self, template, label):
> + pattern = r''
> + last_char = None
> + # Diff file names are of the form a/xxx or b/xxx
> + # and the output of 'find .' is of the form './xxx'
> + # so if we need to match the start of the filename, look for
> + # '^.' to skip the leading character.
> + pos = 0
> + depth = 0
> + priority = 1
> + length = len(template)
> + # An initial &<digit> gives a priority for the match. lower values have
> + # higher priority (min 1). A label will only be applied if it has the
> + # same priority as any existing labels or if it has a lower priority
> + # value than any existing labels applied (in which case the existing
> + # labels will be discarded).
> + if length - pos > 2 and template[pos] == '&':
> + priority = int(template[1])
> + pos += 2
> + if template[pos] == '^':
> + pattern += r'^.'
> + pos += 1
> + # Don't update last_char
> + else:
> + pattern += r'.*/'
> + while pos < length:
> + # '*' is mapped to '[^/]*' unless the following characters are
> + # also '*/', in which case we match '(.*/)*'
> + if template[pos] == '*':
> + if pos + 2 < length and template[:3] == '**/':
> + pattern += r'(:?.*/)*'
> + pos += 1
> + else:
> + pattern += r'[^/]*'
> + elif template[pos] == '+':
> + pattern += r'\+'
> + elif template[pos] == '(':
> + # We don't need any groups from the regex.
> + pattern += r'(?:'
> + depth += 1
> + elif template[pos] == ')':
> + pattern += r')'
> + depth -= 1
> + if depth < 0:
> + raise Exception ('Invalid template: ' + template)
> + elif template[pos] == '.':
> + pattern += r'\.'
> + elif template[pos] == '/':
> + pattern += r'/'
> + if (depth > 0
> + and pos + 1 < length
> + and (template[pos + 1] == '|'
> + or template[pos + 1] == ')')):
> + # We expect '/|' (or '/)' to appear at the end of an alternative
> + # and to mean anything in any subdirectory matched. But we may
> + # need to match files in the alternative, so add an explicit '.*'.
> + pattern += r'.*'
> + else:
> + pattern += template[pos]
> + last_char = template[pos]
> + pos += 1
> +
> + if depth != 0:
> + raise Exception ('Invalid template: ' + template)
> + if last_char != '/':
> + pattern += '$'
> +
> + d = dict()
> + d['pattern'] = re.compile(pattern)
> + d['priority'] = priority
> + d['label'] = label
> + return [d]
> +
> +
> +
> +def main():
> + my_classifier = classifier(labels_file)
> + for f in sys.stdin.readlines():
> + print (f.strip('\n'), ': ', my_classifier.map_to_labels (f.strip('\n')), sep='')
> +
> +if __name__ == "__main__":
> + main()
> diff --git a/contrib/forge/labels b/contrib/forge/labels
> new file mode 100644
> index 00000000000..c3733c2ecf8
> --- /dev/null
> +++ b/contrib/forge/labels
> @@ -0,0 +1,347 @@
> +# Provisional list of labels for the gcc forge:
> +#
> +# Copyright (C) 2025 Free Software Foundation, Inc.
> +#
> +# This file is part of GCC.
> +#
> +# GCC is free software; you can redistribute it and/or modify it under
> +# the terms of the GNU General Public License as published by the Free
> +# Software Foundation; either version 3, or (at your option) any later
> +# version.
> +#
> +# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
> +# WARRANTY; without even the implied warranty of MERCHANTABILITY or
> +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
> +# for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with GCC; see the file COPYING3. If not see
> +# <http://www.gnu.org/licenses/>.
> +
> +# Tags are not exclusive unless otherwise stated.
> +#
> +
> +# Note, *** indicates that this matches a strict category, but perhaps
> +# we shouldn't permit these in labels.
> +
> +# Format of this file:
> +# - Comments start with '#' in the first column and continue to the
> +# end of a line.
> +# - Color markers start with ':color' and indicate the background
> +# color of label. The value is RGB in hex. Color directives
> +# continue until the next color marker.
> +# - Multi-select/exclusive labels are marked ':multi' or ':exclusive'
> +# and indicate if the tag forms part of an exclusive set (you can
> +# set at most one such label on a patch or issue. These continue
> +# until the next multi/exclusive marker. Note the label name's in
> +# an exclusive set must follow Forgejo's rules for such labels.
> +# - Other lines are in the format:
> +# <label-name> {auto-assignment-query} [<optional description>]
> +# The description text will be used to populate the description
> +# field for the label.
> +#
> +# The auto-assignment-query is a search term or rule for applying
> +# the label to the ticket. No search is performed if the query
> +# field is empty ({}).
> +#
> +# Three forms of query are currently supported:
> +# - BZ:<ticket-num>.<field>
> +# Extracts 'field' from a bugzilla ticket and uses it to substitute
> +# as the last component of the label (all such labels must use the
> +# same query and all the valid values for the label must exist.
> +# - BZ:imatch(<regex>).<ticket-num>.<field>
> +# Extracts 'field' from a bugzilla ticket 'ticket-num'
> +
> +
> +
> +## Bug reports
> +# All of these labels are expected to be automatically scraped from
> +# the primary (first-referenced) bugzilla entry that is identified
> +# from the cover text of a patch. Note that they will not be
> +# automatically updated if the bugzilla entry is changed after the
> +# pull request has been created.
> +
> +# Labels relating to bugs with a 'regression' marker in the bug summary.
> +:color #bd0000
> +:multi
> +Bug/Regression {BZ:imatch(\[[^\]]*regression\]).<pr>.summary}
> +
> +# Bug importance (exclusive)
> +:color #f06d00
> +:exclusive
> +Bug/Importance/P1 {BZ:<pr>.importance} The bugzilla ticket has priority P1
> +Bug/Importance/P2 {BZ:<pr>.importance} The bugzilla ticket has priority P2
> +Bug/Importance/P3 {BZ:<pr>.importance} The bugzilla ticket has priority P3
> +Bug/Importance/P4 {BZ:<pr>.importance} The bugzilla ticket has priority P4
> +Bug/Importance/P5 {BZ:<pr>.importance} The bugzilla ticket has priority P5
> +
> +# Labels relating to bugs with a specific component. The final
> +# part of the label should be a string match for the component
> +# field of the BZ entry.
> +# (exclusive)
> +:color #fbca04
> +:exclusive
> +Bug/Component/ada {BZ:<pr>.component} The bugzilla component is 'ada'
> +Bug/Component/algol68 {BZ:<pr>.component} The bugzilla component is 'algol68'
> +Bug/Component/analyzer {BZ:<pr>.component} The bugzilla component is 'analyzer'
> +Bug/Component/boehm-gc {BZ:<pr>.component} The bugzilla component is 'boehm-gc'
> +Bug/Component/bootstrap {BZ:<pr>.component} The bugzilla component is 'bootstrap'
> +Bug/Component/c {BZ:<pr>.component} The bugzilla component is 'c'
> +Bug/Component/c++ {BZ:<pr>.component} The bugzilla component is 'c++'
> +Bug/Component/cobol {BZ:<pr>.component} The bugzilla component is 'cobol'
> +Bug/Component/d {BZ:<pr>.component} The bugzilla component is 'd'
> +Bug/Component/debug {BZ:<pr>.component} The bugzilla component is 'debug'
> +Bug/Component/demangler {BZ:<pr>.component} The bugzilla component is 'demangler'
> +Bug/Component/diagnostics {BZ:<pr>.component} The bugzilla component is 'diagnostics'
> +Bug/Component/driver {BZ:<pr>.component} The bugzilla component is 'driver'
> +Bug/Component/fortran {BZ:<pr>.component} The bugzilla component is 'fortran'
> +Bug/Component/gcov-profile {BZ:<pr>.component} The bugzilla component is 'gcov-profile'
> +Bug/Component/go {BZ:<pr>.component} The bugzilla component is 'go'
> +Bug/Component/ipa {BZ:<pr>.component} The bugzilla component is 'ipa'
> +Bug/Component/jit {BZ:<pr>.component} The bugzilla component is 'jit'
> +Bug/Component/libbacktrace {BZ:<pr>.component} The bugzilla component is 'libbacktrace'
> +Bug/Component/libcc1 {BZ:<pr>.component} The bugzilla component is 'libcc1'
> +Bug/Component/libffi {BZ:<pr>.component} The bugzilla component is 'libffi'
> +Bug/Component/libfortran {BZ:<pr>.component} The bugzilla component is 'libfortran'
> +Bug/Component/libgcc {BZ:<pr>.component} The bugzilla component is 'libgcc'
> +Bug/Component/libgdiagnostics {BZ:<pr>.component} The bugzilla component is 'libdiagnostics'
> +Bug/Component/libgomp {BZ:<pr>.component} The bugzilla component is 'libgomp'
> +Bug/Component/libitm {BZ:<pr>.component} The bugzilla component is 'libitm'
> +Bug/Component/libobjc {BZ:<pr>.component} The bugzilla component is 'libobjc'
> +Bug/Component/libquadmath {BZ:<pr>.component} The bugzilla component is 'libquadmath'
> +Bug/Component/libstdc++ {BZ:<pr>.component} The bugzilla component is 'libstdc++'
> +Bug/Component/lto {BZ:<pr>.component} The bugzilla component is 'lto'
> +Bug/Component/middle-end {BZ:<pr>.component} The bugzilla component is 'middle-end'
> +Bug/Component/modula2 {BZ:<pr>.component} The bugzilla component is 'modula2'
> +Bug/Component/objc {BZ:<pr>.component} The bugzilla component is 'objc'
> +Bug/Component/other {BZ:<pr>.component} The bugzilla component is 'other'
> +Bug/Component/pch {BZ:<pr>.component} The bugzilla component is 'pch'
> +Bug/Component/pending {BZ:<pr>.component} The bugzilla component is 'pending'
> +Bug/Component/plugins {BZ:<pr>.component} The bugzilla component is 'plugins'
> +Bug/Component/preprocessor {BZ:<pr>.component} The bugzilla component is 'preprocessor'
> +Bug/Component/regression {BZ:<pr>.component} The bugzilla component is 'regression'
> +Bug/Component/rtl-optimization {BZ:<pr>.component} The bugzilla component is 'rtl-optimization'
> +Bug/Component/rust {BZ:<pr>.component} The bugzilla component is 'rust'
> +Bug/Component/sanitizer {BZ:<pr>.component} The bugzilla component is 'sanitizer'
> +Bug/Component/sarif-replay {BZ:<pr>.component} The bugzilla component is 'sarif-replay'
> +# Bug/Component/spam *** This shouldn't be needed.
> +Bug/Component/target {BZ:<pr>.component} The bugzilla component is 'target'
> +Bug/Component/testsuite {BZ:<pr>.component} The bugzilla component is 'testsuite'
> +Bug/Component/translation {BZ:<pr>.component} The bugzilla component is 'translation'
> +Bug/Component/tree-optimization {BZ:<pr>.component} The bugzilla component is 'tree-optimization'
> +Bug/Component/web {BZ:<pr>.component} The bugzilla component is 'web'
> +
> +## Labels relating to releases (for backporting)
> +:color #5319e7
> +:multi
> +# eg: Release/GCC-<major>
> +Release/GCC-13 {} Consider backporting to GCC-13
> +Release/GCC-14 {} Consider backporting to GCC-14
> +Release/GCC-15 {} Consider backporting to GCC-15
> +
> +## Labels related to components
> +# Note that multiple labels in this section can be applied, based on the files
> +# modified.
> +
> +# Miscellany
> +:color #006b75
> +:multi
> +General/config {file:&2^/(config/|**/*.(in|ac|m4)|**/configure*)} Affects configure or autoconf scripts
> +General/contrib {file:^/contrib/} Miscellaneous support scripts
> +General/make {file:&2(Makefile(.*)?|*.am)} Affects Makefiles or automake
> +General/driver {file:^/gcc/gcc(-main|-ar)?.(cc|h)} GCC main driver program
> +General/forge {file:^/.(forgejo|github)/} Forge and CI infrastructure
> +General/unknown {default:} Catch-all, does not match any other category
> +General/gdbhooks {file:^/gcc/gdb(hooks.py|init.in)} Support for debugging GCC with GDB (gdbhooks.py)
> +General/docs {file:docs?/} Changes to the documentation
> +General/web {} Changes to the web pages
> +
> +# Library components
> +:color #009800
> +:multi
> +Library/libada {file:^/libada/} Affects libada
> +Library/libatomic {file:^/libatomic/} Affects libatomic
> +Library/libbacktrace {file:^/libbacktrace/} Affects libbacktrace
> +Library/libcc1 {file:^/libcc1/} Affects libcc1
> +Library/libcody {file:^/libcody/} Affects libcody
> +Library/libcpp {file:^/libcpp/} Affects libcpp
> +Library/libdecnumber {file:^/libdecnumber/} Affects libdecnumber
> +Library/libffi {file:^/libffi/} Affects libffi
> +Library/libgcc {file:^/libgcc/} Affects libgcc
> +Library/libgcobol {file:^/libgcobol/} Affects libgcobol
> +Library/libgfortran {file:^/libgfortran/} Affects libgfortran
> +Library/libgm2 {file:^/libgm2/} Affects libgm2
> +Library/libgo {file:^/libgo/} Affects libgo
> +Library/libgomp {file:^/libgomp/} Affects libgomp
> +Library/libgrust {file:^/libgrust/} Affects libgrust
> +Library/libiberty {file:^/(include|libiberty)/} Affects libiberty
> +Library/libitm {file:^/libitm/} Affects libitm
> +Library/libobjc {file:^/libobjc/} Affects libobjc
> +Library/libphobos {file:^/libphobos/} Affects libphobos
> +Library/libquadmath {file:^/libquadmath/} Affects libquadmath
> +Library/libsanitizer {file:^/libsanitizer/} Affects libsanitizer
> +Library/libssp {file:^/libssp/} Affects libssp
> +Library/libstdc++ {file:^/libstdc++-v3/} Affects libstdc++
> +Library/libvtv {file:^/libvtv/} Affects libvtv
> +Library/zlib {file:^/zlib/} Affects zlib
> +
> +# CPU targets (in compiler or in libraries)
> +
> +:color #70c24a
> +:multi
> +Target/aarch64 {file:config/aarch64/} Affects the aarch64 target
> +Target/alpha {file:config/alpha/} Affects the alpha target
> +Target/arc {file:config/arc/} Affects the arc target
> +Target/arm {file:config/arm/} Affects the arm target
> +Target/avr {file:config/avr/} Affects the avr target
> +Target/bfin {file:config/bfin/} Affects the bfin target
> +Target/bpf {file:config/bpf/} Affects the bpf target
> +Target/c6x {file:config/c6x/} Affects the c6x target
> +Target/cris {file:config/cris/} Affects the cris target
> +Target/csky {file:config/csky/} Affects the csky target
> +Target/epiphany {file:config/epiphany/} Affects the epiphany target
> +Target/fr30 {file:config/fr30/} Affects the fr30 target
> +Target/frv {file:config/frv/} Affects the frv target
> +Target/ft32 {file:config/ft32/} Affects the ft32 target
> +Target/gcn {file:config/gcn/} Affects the gcn target
> +Target/h8300 {file:config/h8300/} Affects the h8300 target
> +Target/i386 {file:config/i386/} Affects the i386 target
> +Target/ia64 {file:config/ia64/} Affects the ia64 target
> +Target/iq2000 {file:config/iq2000/} Affects the iq2000 target
> +Target/lm32 {file:config/lm32/} Affects the lm32 target
> +Target/loongarch {file:config/loongarch/} Affects the loongarch target
> +Target/m32c {file:config/m32c/} Affects the m32c target
> +Target/m32r {file:config/m32r/} Affects the m32r target
> +Target/m68k {file:config/m68k/} Affects the m68k target
> +Target/mcore {file:config/mcore/} Affects the mcore target
> +Target/microblaze {file:config/microblaze/} Affects the microblaze target
> +Target/mips {file:config/mips/} Affects the mips target
> +Target/mmix {file:config/mmix/} Affects the mmix target
> +Target/mn10300 {file:config/mn10300/} Affects the mn1030 target
> +Target/moxie {file:config/moxie/} Affects the moxie target
> +Target/msp430 {file:config/msp430/} Affects the msp430 target
> +Target/nds32 {file:config/nds32/} Affects the nds32 target
> +Target/nvptx {file:config/nvptx/} Affects the nvptx target
> +Target/or1k {file:config/or1k/} Affects the or1k target
> +Target/pa {file:config/pa/} Affects the pa target
> +Target/pdp11 {file:config/pdp11/} Affects the pdp1 target
> +Target/pru {file:config/pru/} Affects the pru target
> +Target/riscv {file:config/riscv/} Affects the riscv target
> +Target/rl78 {file:config/rl78/} Affects the rl78 target
> +Target/rs6000 {file:config/rs6000/} Affects the rs6000 target
> +Target/rx {file:config/rx/} Affects the rx target
> +Target/s390 {file:config/s390/} Affects the s390 target
> +Target/sh {file:config/sh/} Affects the sh target
> +Target/sparc {file:config/sparc/} Affects the sparc target
> +Target/stormy16 {file:config/x?stormy16/} Affects the stormy16 target
> +Target/v850 {file:config/v850/} Affects the v850 target
> +Target/vax {file:config/vax/} Affects the vax target
> +Target/visium {file:config/visium/} Affects the visium target
> +Target/xtensa {file:config/xtensa/} Affects the xtensa target
> +
> +# These are OS ports that have their own subdirectory in GCC's config subdir
> +#Target/mingw {file:config/mingw/} Affects the mingw target
> +#Target/vms {file:config/vms/} Affects the vms target
> +#Target/vxworks {file:config/vxworks/} Affects the vxworks target
> +
> +# labels specific to an object file format
> +:color #b0ffb0
> +:multi
> +Obj/coff {file:&2*coff*} Target independent code related to COFF object format
> +Obj/elf {file:&2*elf*} Target independent code related to COFF object format
> +Obj/pe {} Target independent code related to PE-COFF object format
> +
> +# labels relating to a specific OS
> +:color #b0fff9
> +:multi
> +OS/aix {file:rs6000/*aix*} Affects AIX OS
> +OS/android {file:*android*} Affects Android OS
> +OS/cygwin {file:(config/mingw/|*(cyqwin|mingw)*)} Affects cywin or mingw OSes
> +OS/darwin {file:*darwin*} Affects Darwin OS
> +OS/dragonfly {file:*dragonfly*} Affects Dragonfly OS
> +OS/freebsd {file:*freebsd*} Affects FreeBSD OS
> +OS/hpux {file:*hpux*} Affects HP-UX OS
> +OS/hurd {file:*hurd*} Affects GNU Hurd OS
> +OS/linux {file:&2*linux*} Affects generic Linux OS
> +OS/netbsd {file:*netbsd*} Affects NetBSD OS
> +OS/openbsd {file:*openbsd*} Affects OpenBSD OS
> +OS/rtems {file:*rtems*} Affects RTEMS OS
> +OS/solaris {file:(sol2*|*solaris*)} Affects Solaris OS
> +OS/vms {file:(*[^a-z])?vms*} Affects VMS OS
> +OS/vxworks {file:(config/vxworks/|*vxworks*)} Affects VxWorks
> +OS/windows {file:*windows*} Affects Windows OS
> +
> +# Labels relating to compiler mid-end
> +:color #207de5
> +:multi
> +Midend/diagnostics {file:^/gcc/(diagnostics/|text-art/|*diagnostic*|*sarif*)} Diagnostics framework
> +Midend/rtl {file:&3^/gcc/*.(cc|c|h)} General RTL code
> +Midend/reg-alloc {file:^/gcc/*(ira|lra)*} Register allocation code
> +Midend/tree {file:&2^/gcc/*tree*} General tree/gimple code
> +Midend/vect {file:^/gcc/*vect*} Vectorization
> +Midend/cfg {file:^/gcc/*cfg*} Control Flow Graph framework
> +Midend/ggc {file:^/gcc/*ggc*} Garbage collection
> +Midend/gen {file:^/gcc/gen*.(cc|h)} Generator programs, eg genattr
> +Midend/ipa {file:^/gcc/ipa*} Inter Procedural Analysis framework
> +Midend/misc {file:&4^/gcc/*} Miscellaneous files that doesn't fit anything else
> +Midend/lto {file:^/gcc/(lto/|*lto*)} Link Time Optimizer code
> +Midend/jit {file:^/gcc/jit/} JIT (Just-In-Time) code
> +Midend/include {file:^/(fixincludes|gcc/ginclude)/} Include headers and fixincludes
> +Midend/dwarf {file:^/gcc/**/*dwarf*} Dwarf debug information
> +Midend/debug {file:^/gcc/*ctf*} Non-dwarf debug support
> +Midend/gimple {file:^/gcc/*gimple*} General GIMPLE support
> +Midend/gcse {file:^/gcc/*gcse*} RTL GCSE
> +Midend/jump {file:^/gcc/*jump*} Jump and branch optimizations
> +Midend/i18n {file:^/gcc/(po/|intl.*)} Internationalization and Localization
> +Midend/gcov {file:^/gcc/gcov*} GCOV code coverage support
> +Midend/opts {file:^/gcc/(opt*.awk|*.opt|opt[-s]*)} Option framework
> +Midend/ranger {file:^/gcc/*range*} Value range framework
> +Midend/rtl-ssa {file:^/gcc/rtl-ssa/} RTL SSA framework
> +Midend/tree-ssa {file:^/gcc/(tree|gimple)-ssa*} Tree SSA framework
> +Midend/autofdo {file:^/gcc/auto-profile*} AutoFDO framework
> +Midend/combine {file:^/gcc/combine*} Instruction Combiner
> +Midend/reload {file:^/gcc/reload*} Legacy reload pass (obsolete)
> +Midend/pair-fusion {file:^/gcc/pair-fusion*} Pair Fusion framework
> +Midend/ivopts {file:^/gcc/*loop-iv*} Loop IVopt framework
> +Midend/loop {file:^/gcc/*loop*} Loop optimizations
> +Midend/openacc {} OpenACC framework
> +Midend/openmp {file:^/gcc/omp*} OpenMP framework
> +Midend/analyzer {file:^/gcc/analyzer/} Static analyzer
> +
> +# Labels relating to language frontends
> +:color #0052cc
> +:multi
> +Frontend/ada {file:^/gcc/ada/} The Ada frontend
> +Frontend/algol68 {file:^/gcc/algol68/} The Algol68 frontend
> +Frontend/c {file:^/gcc/c(|-family)/} The C frontend
> +Frontend/c++ {file:^/gcc/c(p|-family)/} The C++ frontend
> +Frontend/cobol {file:^/gcc/cobol/} The COBOL frontend
> +Frontend/d {file:^/gcc/d/} The D frontend
> +Frontend/fortran {file:^/gcc/fortran/} The Fortran frontend
> +Frontend/go {file:^/gcc/(go/|godump*)} The Go frontend
> +Frontend/m2 {file:^/gcc/m2/} The Modula-2 frontend
> +Frontend/objc {file:^/gcc/objcp?/} The Objective-C/-C++ frontends
> +Frontend/rust {file:^/gcc/rust/} The Rust frontend
> +
> +# Labels relating to testsuites (probably incomplete)
> +:color #c544ff
> +:multi
> +Tests/framework {file:testsuite/lib/} Changes to the test framework (testsuite/lib)
> +Tests/torture {file:^/gcc/testsuite/*-torture/} Changes to legacy torture tests
> +Tests/target {file:^/gcc/testsuite/*.target/} Changes to target-specific tests (use target/* as well)
> +Tests/lang {file:^/gcc/testsuite/(gcc|gdc|gfortran|g++|obj|go|cobol|gnat|ada|c-c++|gm2|rust)*/} Changes to language-specific tests
> +Tests/lib {file:^/lib*/**/testsuite/} Changes to top-level library tests (use Library/* as well)
> +Tests/jit {file:^/gcc/testsuite/jit.dg/} Changes to GCC's jit tests
> +Tests/selftest {file:^/gcc/testsuite/selftests/} Changes to GCC's self-tests
> +Tests/diagnostics {file:^/gcc/testsuite/libgdiagnostics.dg/} Changes to GCC's diagnostic framework tests
> +Tests/sarif {file:^/gcc/testsuite/sarif-replay.dg/} Changes to GCC's sarif tests
> +
> +## Forge status labels
> +# Labels for runners (exclusive)
> +:color #f6c6c7
> +:exclusive
> +Runner/pending {} Runner has started, but results not yet available
> +Runner/unresolved {} Runner failed for an unknown reason)
> +Runner/red {} Check failed with errors, code not fit for committing
> +Runner/amber {} Check failed with warnings, manually inspect results
> +Runner/green {} Checks passed
More information about the Gcc
mailing list