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
-- 
2.43.0

Reply via email to